Anoop C S [Fri, 5 Dec 2025 09:25:58 +0000 (14:55 +0530)]
mon/MonMap: Dump addr in backward compatible format
Prior to c5b43e9b2765ff98419c649a5ae53ec16601975d, we dumped only the
legacy string component from public_addrs as `addr`. Ensure that this
backward compatible filtering is retained when dumping MonMap.
Kefu Chai [Thu, 4 Dec 2025 08:05:27 +0000 (16:05 +0800)]
mgr/PyModule: clear Python exception when NOTIFY_TYPES is missing
Commit 4589c4d8ac5 ("mgr: do not require NOTIFY_TYPES in python modules")
changed load_notify_types() to treat missing NOTIFY_TYPES as non-fatal,
but failed to clear the Python exception state set by PyObject_GetAttrString().
When PyObject_GetAttrString() fails to find an attribute, it:
1. Returns nullptr
2. Sets AttributeError in the interpreter's exception state
The exception state persists across subsequent Python C API calls until
explicitly cleared. This causes unrelated operations to fail with misleading
error messages.
Bug Manifestation:
------------------
In PyModule::load() (line 292), the call sequence is:
The failure occurs because PyImport_ImportModule() at line 658 checks
PyErr_Occurred() before operating. When it detects the pending AttributeError
from step 2, it refuses to import and returns NULL immediately.
This causes load_subclass_of() to report:
```
1 mgr[py] Loading python module 'balancer'
-1 mgr[py] Module balancer has missing NOTIFY_TYPES member
-1 mgr[py] Module not found: 'mgr_module'
-1 mgr[py] AttributeError: type object 'Module' has no attribute 'NOTIFY_TYPES'
```
This error is misleading - mgr_module exists and is importable, but the
import fails due to the uncleared exception from an unrelated operation.
Without this fix, modules without NOTIFY_TYPES may fail to load their
standby class, or cause subsequent module loads to fail entirely with
confusing error messages pointing to the wrong module.
Fix:
----
This patch follows Python's EAFP (Easier to Ask for Forgiveness than
Permission) philosophy by attempting the attribute access and handling the
expected AttributeError, rather than checking preconditions with
PyObject_HasAttrString() (LBYL approach). The EAFP approach:
- Is more pythonic and idiomatic
- Requires only one API call instead of two (more efficient)
- Properly distinguishes expected errors (AttributeError) from unexpected
errors (e.g., interpreter shutdown, memory errors)
- Handles unexpected errors appropriately by reporting and returning -EINVAL
Implementation:
- Use PyErr_ExceptionMatches() to check for expected AttributeError
- Clear expected exception with PyErr_Clear()
- Report unexpected exceptions via handle_pyerror()
Refs: 4589c4d8ac5 ("mgr: do not require NOTIFY_TYPES in python modules")
Refs: https://tracker.ceph.com/issues/55835 Fixes: https://tracker.ceph.com/issues/70789 Signed-off-by: Kefu Chai <k.chai@proxmox.com>
Casey Bodley [Tue, 2 Dec 2025 21:19:05 +0000 (16:19 -0500)]
rgw/rados: fix init/shutdown order for RGWIndexCompletionManager
RGWRados::init_complete() initializes this RGWIndexCompletionManager
after starting some background threads that depend on it, like RGWLC and
RGWDataSyncProcessorThread and RGWObjectExpirer. this can lead to a
crash when accessing a null index_completion_manager
RGWRados::finalize() deletes it before stopping the Restore thread
Fixes: https://tracker.ceph.com/issues/74067 Reported-by: J. Eric Ivancich <ivancich@redhat.com> Signed-off-by: Casey Bodley <cbodley@redhat.com>
Afreen Misbah [Tue, 21 Oct 2025 16:37:46 +0000 (22:07 +0530)]
mgr/dashboard: Carbonize the Change Password Form
Fixes https://tracker.ceph.com/issues/73193
- using carbon based stylings, typography and components
- used grid layout for form arrangement
- breadcrumb is slightly off, which needs to be fixed by applying grid layout to the app shell
Kefu Chai [Sat, 22 Nov 2025 00:24:36 +0000 (08:24 +0800)]
qa/suites/rados/encoder: exclude ceph-osd-* when installing LTS releases
In a37b5b5, the ceph-osd-classic and ceph-osd-crimson packages were
added to qa/packages/packages.yaml. The "install" task uses this file as
the default package list for all branches, including LTS releases like
Reef.
However, a37b5b5 only exists in the main branch and won't be backported
to LTS branches. This causes installation failures in the rados/encoder
test suite, which verifies forward compatibility by installing LTS
releases and testing whether they can decode the latest corpus.
Exclude ceph-osd-classic and ceph-osd-crimson from LTS installations to
ensure the test suite can successfully install ceph-dencoder, which is
required for the interoperability tests.
Afreen Misbah [Wed, 19 Nov 2025 20:03:26 +0000 (01:33 +0530)]
monitoring: Fixes for development
- fixes tox.ini using and undefined env - `grafonnet-check`( instead of `jsonnet-check`)
- adds steps for local development of mixins and building jsonnet
- added help command in Makefile
- added comments and descriptions for Makefile and tox.ini
Shraddha Agrawal [Mon, 17 Nov 2025 19:50:44 +0000 (01:20 +0530)]
qa/clusters/crimson: increase reactors in fixed-1 cluster
Issue: Various different tests were failing randomly due to slow
ops. There was no common ground between them, it was happening
across differnet object stores (seastore and bluestore) and
across different tests.
Cause: Since this is happening quite randomly, this is likely
happening due to low reactor count.
Solution: We are opting the solution to increase reactors used
for testing. I've increased them to 3 from the initial 2 value.
Matan Breizman [Sun, 16 Nov 2025 12:52:05 +0000 (12:52 +0000)]
qa/suites: exclude ceph-osd-classic
a37b5b5bde8c2e8d6890f16b31046119ed55f25d added ceph-osd-classic
package.
old-clients and upgrade tests should not try to install the new package
as it is not available in older releases.
Anoop C S [Tue, 21 Oct 2025 08:53:50 +0000 (14:23 +0530)]
mgr/smb: Disable posix locking in share definition
The prerequisites for supporting durable handles[1] in Samba include
disabling the mapping of POSIX locks, as well as setting the `kernel
oplocks` and `kernel sharemodes` parameters to disabled. Currently
this configuration is hard‑coded, but in the future it could be made
conditional and combined with other settings to enable persistent
handles on continuously available shares.