Patrick Donnelly [Thu, 30 Jul 2026 18:00:49 +0000 (14:00 -0400)]
Merge PR #69986 into umbrella
* refs/pull/69986/head:
mgr/cephadm: For updating NFS backends in HAProxy, send a SIGHUP signal to reload the configuration instead of restart
mgr/cephadm: Signal handling while daemon reconfig
Patrick Donnelly [Thu, 30 Jul 2026 17:59:29 +0000 (13:59 -0400)]
Merge PR #69735 into umbrella
* refs/pull/69735/head:
doc/cephadm: Document cephadm_binary_logging_level option
mgr/cephadm: Control cephadm.log messages based on a new mgr logging level flag
Jon Bailey [Thu, 4 Jun 2026 10:27:07 +0000 (11:27 +0100)]
test: Remove invalid unit test
This test was talking about testing invalid ops, however with the inclusion of sync reads in EC (https://github.com/ceph/ceph/pull/67079), it is valid to perform class reads in EC. In addition, work was done around illegal ops here: https://github.com/ceph/ceph/pull/66258 and the existance of TEST(ClsHello, BadMethods) in test_cls_hello.cc covers illegal ops in that PR leading me to think this is unneccisairy. Because of these reasons, I think its better this test is removed as it is incorrect and also not working.
Patrick Donnelly [Tue, 28 Jul 2026 13:04:01 +0000 (09:04 -0400)]
Merge PR #69651 into umbrella
* refs/pull/69651/head:
test/rgw: init CephContext in unittest_rgw_cors
rgw: include str_list.h for ceph::for_each_substr in CORS header
rgw: address CORS rule-matching review feedback
fix: some issue based on CORS spec 6.2.4
reject null or empty method in matches_method
rgw: match CORS rules like Amazon S3
Reviewed-by: Adam C. Emerson <aemerson@redhat.com>
mgr/cephadm: set mgr cap for NVMeoF to allow cmd "service dump"
Allow nvmeof daemons cap to run mgr command "service dump".
This helps to map gateway_id with hostname (info needed to resolve
nvmeof issue https://github.com/ceph/ceph-nvmeof/issues/1974)
Sun Yuechi [Tue, 7 Jul 2026 02:01:05 +0000 (19:01 -0700)]
rbd-mirror: return after finishing on unsupported mirror mode
The mirror-mode switch default in handle_get_mirror_info() calls
finish(-EOPNOTSUPP), which deletes this, then breaks and falls
through to the common code, dereferencing the null *m_state_builder and
freeing the request a second time.
Fixes: https://tracker.ceph.com/issues/78043 Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
(cherry picked from commit 9759952725a8bdfba6eab10979678dce90cc088d)
Sun Yuechi [Tue, 7 Jul 2026 02:03:59 +0000 (19:03 -0700)]
rbd-mirror: take MirrorStatusUpdater lock by value in queue_update_task
queue_update_task() took the lock by rvalue reference, so its early
returns never released it. In handle_update_task() that left m_lock
held across the on_finish->complete() calls; during shutdown a
completion can re-enter try_remove_mirror_image_status() and re-lock
m_lock, deadlocking.
Take the unique_lock by value so it unlocks on every return path.
Fixes: https://tracker.ceph.com/issues/78047 Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
(cherry picked from commit b450195246cfeb7eabcaf8da53a433b98f279fee)
Sun Yuechi [Wed, 8 Jul 2026 07:00:53 +0000 (15:00 +0800)]
rbd-mirror: fix strict weak ordering in PeerSpec::operator<
The mon_host tier branched on "mon_host < rhs.mon_host" but returned the
same comparison, so mon_host > rhs.mon_host fell through to key, both
a < b and b < a could hold.
Only Mirror::m_pool_replayers reaches operator< (via std::pair key).
Fixes: https://tracker.ceph.com/issues/78049 Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
(cherry picked from commit ad6de06803654c73c0cf5e42f4859fc119d107db)
Sun Yuechi [Sun, 21 Jun 2026 08:42:54 +0000 (16:42 +0800)]
tools/immutable_object_cache: don't leak in-flight replies on teardown
CacheSession::send() deleted the reply in the async_write completion
handler. On teardown asio drops the pending handler without running it,
leaking the reply. Delete it right after encoding into bl instead; bl
owns the payload, so the write is unaffected.
Fixes: https://tracker.ceph.com/issues/77552 Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
(cherry picked from commit 2d85d9e15855e662a4235c38c683a533213be934)
Patrick Donnelly [Mon, 27 Jul 2026 14:21:10 +0000 (10:21 -0400)]
Merge PR #69765 into umbrella
* refs/pull/69765/head:
rbd-mirror: Remove old non-primary demoted image snapshots on the local cluster
rbd-mirror: prune obsolete primary mirror snapshots after relocation
rbd-mirror: fix missing initialization of Peer UUID
Patrick Donnelly [Mon, 27 Jul 2026 14:01:13 +0000 (10:01 -0400)]
Merge PR #70287 into umbrella
* refs/pull/70287/head:
doc/rbd: elaborate on key-ref syntax (existing in S3Stream and new in NativeFormat)
qa/suites/rbd: add mon_host + key[-ref] coverage to migration-external
qa/suites/rbd: use client.0 entity in migration-external tests
librbd/migration/NativeFormat: support specifying mon_host and key via spec
Patrick Donnelly [Mon, 27 Jul 2026 13:51:53 +0000 (09:51 -0400)]
Merge PR #70176 into umbrella
* refs/pull/70176/head:
mgr/dashboard: fixing manual deployment option for osd creation flow
mgr/dashboard: fix cancel button
mgr/dashboard: Converting Create OSDs tearsheet type from Full to Wide
mgr/dashboard: carbonized OSD form component
qa/tests: drop parens from all health-code ignorelist entries
Monitor.cc logs a "Health check cleared: <CODE> (was: ...)" line
for any health check clearing mid-test, with the code bare (no
parens) -- while the "Health check failed"/"Health check failed
(unmute)" lines wrap the code in parens. Every \(CODE\) entry in
this file therefore only matches the raise/failed form and misses
the corresponding cleared form, the same gap just fixed for
POOL_FULL.
Drop the escaped parens from the remaining entries so each matches
both log forms, consistent with the bare entries already present
(OSD_ROOT_DOWN, MDS_INSUFFICIENT_STANDBY, POOL_FULL).
qa/tests: fix POOL_FULL ignorelist pattern in upgrade tests
\(POOL_FULL\) only matches the "Health check failed/update" cluster-log
format (code wrapped in parens). It misses the "Health check cleared"
format, where the code is not parenthesized (see src/mon/Monitor.cc),
so a pool clearing its full state mid-upgrade-test was not ignorelisted.
Drop the escaped parens so the pattern matches both forms, consistent
with other bare entries already in this file (OSD_ROOT_DOWN,
MDS_INSUFFICIENT_STANDBY).
Lumir Sliva [Mon, 22 Jun 2026 15:20:24 +0000 (17:20 +0200)]
rgw/lc: report x-amz-expiration only for the current version
The x-amz-expiration response header describes the current-version
Expiration lifecycle action for an object. s3_expiration_header() instead
selected between the Expiration and the NoncurrentVersionExpiration rule
based on whether the object key carried an instance id:
This was wrong in two ways. OLH resolution writes the current version's
instance id into the key before the header is computed, so even a plain
GET/HEAD of the current version (no versionId) was treated as a
non-current request and reported a NoncurrentVersionExpiration rule. And
x-amz-expiration is not meant to surface NoncurrentVersionExpiration at
all. A versioned bucket whose only rule was NoncurrentVersionExpiration
therefore returned a bogus expiry-date and rule-id on the current object,
for both a plain request and a versionId request.
Compute the header from the current-version Expiration rule only, and
return no header when the request targets a specific version. The header
helper now passes the client request key (s->object_key) rather than the
OLH-resolved key, so a plain GET/HEAD of the current version is no longer
misclassified as a versioned request.
Add a unit test covering a noncurrent-only policy (no header for either a
plain or a versioned request) and a combined policy (the current
Expiration rule for the current version, no header for a versionId
request).
rgw/admin: guard bilog autotrim on non-exporting (archive) zones
The background sync-log-trim thread already skips bucket trim on zones whose
sync module does not export data , but the admin command had no equivalent
guard, so running it on an archive zone could delete instance metadata the
zone is meant to retain.
So, refuse the command on non-exporting zones unless --yes-i-really-mean-it is
given.
mgr/DaemonServer: Make an ok-to-upgrade error message more generic
When no OSDs within a CRUSH bucket can be found to upgrade, the earlier error
message indicated the minimum number of PGs affected if any OSD was removed
from the set. For e.g.,
"Error EBUSY: unsafe to upgrade osd(s) at this time (at least X PG(s) will
become offline if any OSD out of the Y in CRUSH bucket 'foo' is stopped)"
This was inaccurate in some cases because the number of PGs affected is
determined only from the last tested OSD in the CRUSH bucket based on the sort
order (i.e., OSD with least number of PGs per OSD). Based on the CRUSH rules
and placement, this doesn't mean that the least number of PGs are affected if
this OSD is stopped. There may be other OSDs in the set that affect a smaller
number of PGs if made offline.
But with the way ok-to-upgrade logic uses the convergence factor, not all OSDs
would be tested for the offline pg check. Therefore, it is not possible to
accurately determine the minimum number affected PGs.
In view of the above, the error message is modified as shown below to be
slightly more generic but still convey the reason:
"Error EBUSY: unsafe to upgrade osd(s) at this time (one or more PG(s) will
become offline if any OSD out of the Y in CRUSH bucket 'foo' is stopped)"
Patrick Donnelly [Mon, 20 Jul 2026 18:28:42 +0000 (14:28 -0400)]
Merge PR #69553 into umbrella
* refs/pull/69553/head:
doc: add PendingReleaseNotes entry for rgw multisite DNS endpoint resolution
rgw/rest: add TODO for concurrent endpoint DNS resolution
rgw/multisite: fix endpoint unreachable detection in RGWRESTConn sync paths
rgw: store RGWEndpoint URL as boost::urls::url
doc/radosgw: expose rgw_rest_conn_connect_to_resolved_ips and rgw_rest_conn_ip_fail_timeout_secs
rgw: rename round-robin counters for brevity
rgw/zone: increase visibility into zone connections via admin socket
rgw: make CONN_STATUS_EXPIRE_SECS a cfg option
rgw/rest: track connection failures per-IP instead of per-endpoint
rgw/rest: remove unused headers
rgw/rest: consolidate endpoint_urls and resolved_endpoints into single vector
rgw: add operator<< for RGWEndpoint and simplify logging
rgw: track original URL within RGWEndpoint instead of separate member (refactor)
rgw: fix incomplete RGWRESTConn move constructor/assignment
rgw/rest: consolidate endpoint status tracking into ResolvedEndpoint
rgw/http: apply RGWEndpoint connect_to via libcurl CURLOPT_CONNECT_TO
rgw/rest: round-robin resolved endpoint IPs into curl CONNECT_TO mapping
rgw/rest: resolve multisite endpoints to all A/AAAA records (optional)
rgw: add rgw_resolve_endpoints_into_all_addresses config option
rgw/http: introduce RGWEndpoint to carry url + connect_to (refactor)
Reviewed-by: Adam C. Emerson <aemerson@redhat.com>
Patrick Donnelly [Mon, 20 Jul 2026 18:27:59 +0000 (14:27 -0400)]
Merge PR #69741 into umbrella
* refs/pull/69741/head:
tests/neorados: fix ceph_test_neorados_completions being not installed
common/async: async_cond::notify/cancel must post to handler's associated executor
Reviewed-by: Adam C. Emerson <aemerson@redhat.com>
Patrick Donnelly [Mon, 20 Jul 2026 18:26:49 +0000 (14:26 -0400)]
Merge PR #69723 into umbrella
* refs/pull/69723/head:
mgr/dashboard: Add "gw refresh_network" cmd
mgr/dashboard: bump nvmeof submodule to 1.8.2
mgr/dashboard: align nvmeof cli with missing parameters and functions from the old nvmeof cli
monitoring: fix NVMeoFMultipleNamespacesOfRBDImage
Patrick Donnelly [Mon, 20 Jul 2026 18:11:35 +0000 (14:11 -0400)]
Merge PR #70267 into umbrella
* refs/pull/70267/head:
21.1.0
debian/rules: Also exclude librgw and radosgw from dwz
debian/rules: exclude ceph-osd-crimson from dwz compression
script/buildcontainer-setup: fix package install on debian trixie
Gil Bregman [Mon, 22 Jun 2026 09:06:00 +0000 (12:06 +0300)]
mgr/cephadm: Add degraded namespace flag to NVMEoF spec file Fixes: https://tracker.ceph.com/issues/77556 Signed-off-by: Gil Bregman <gbregman@il.ibm.com>
(cherry picked from commit 77764dbe66e7ef86b69d8d280852f0fe68676458)
Leonid Chernin [Tue, 10 Feb 2026 06:50:51 +0000 (08:50 +0200)]
nvmeofgw: introduce nvme-gw show-all
Introduce a new read-only command, nvme-gw show-all, which
iterates over all configured pools and groups and runs
nvme-gw show for each, simplifying gateway inspection.
fixes https://tracker.ceph.com/issues/74854 Signed-off-by: Leonid Chernin <leonidc@il.ibm.com>
(cherry picked from commit ca090f3a35909d1a7c238f531445b5f5c9650109)
David Galloway [Fri, 17 Jul 2026 18:34:44 +0000 (14:34 -0400)]
container: default FROM_IMAGE to Rocky Linux 10
Since tentacle, the preferred base image for ceph containers has been
Rocky Linux 10, and the CI tag-naming logic in build.sh already assumes
rockylinux-10 is the default fromtag for every branch except reef and
squid. The actual build default was never flipped, though: anything
that ran build.sh without FROM_IMAGE set (e.g. the release container
job in ceph-build) still got a CentOS Stream 9 base.
Flip the Containerfile ARG and the build.sh fallback to
docker.io/rockylinux/rockylinux:10 so umbrella and later build from
Rocky 10 by default. Builds that want a different base can still pass
FROM_IMAGE explicitly, as the CI pipeline does.
Ilya Dryomov [Mon, 29 Jun 2026 11:39:50 +0000 (13:39 +0200)]
qa/suites/rbd: use client.0 entity in migration-external tests
Currently client.admin is passed for client_name and that doesn't
exercise client_name handling much as client.admin is the default.
When deploying multiple clusters the ceph task distributes keyrings
with only the key for the initial monitor and client.admin key. Other
keys (e.g. client.0) are present only on their respective clusters, so
client.0's key for cluster2 needs to be obtained on cluster1 explicitly
with "ceph auth get".
Leonid Chernin [Mon, 2 Feb 2026 06:01:14 +0000 (08:01 +0200)]
librbd/migration/NativeFormat: support specifying mon_host and key via spec
migration:
-take secret_key from spec
-take mon_host from the spec
-ignore source keyring, source ceph.conf - bypass them
-added validations of the new way schema
-get key from the KV DB if key in spec is actually key-ref
Fixes: https://tracker.ceph.com/issues/68177 Signed-off-by: Leonid Chernin <leonidc@il.ibm.com> Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 705d865ae77f4d3e80a9d3da3281ba6a824d7f29)
Kefu Chai [Fri, 23 Jan 2026 07:04:47 +0000 (15:04 +0800)]
debian/rules: exclude ceph-osd-crimson from dwz compression
When building with DWZ enabled, the debian packaging fails with:
```
dh_dwz: error: Aborting due to earlier error
```
Running the dwz command manually reveals the root cause:
```
$ dwz -mdebian/ceph-osd-crimson/usr/lib/debug/.dwz/x86_64-linux-gnu/ceph-osd-crimson.debug \
-M/usr/lib/debug/.dwz/x86_64-linux-gnu/ceph-osd-crimson.debug -- \
debian/ceph-osd-crimson/usr/bin/ceph-osd-crimson \
debian/ceph-osd-crimson/usr/bin/crimson-store-nbd
dwz: debian/ceph-osd-crimson/usr/bin/ceph-osd-crimson: Too many DIEs, not optimizing
dwz: Too few files for multifile optimization
```
The dwz tool has a limit on the number of DWARF DIEs (Debug Information
Entries) it can process. The ceph-osd-crimson binary, being a large C++
executable with extensive template usage, exceeds this limit, causing
dwz to exit with status 1 and fail the build.
This change excludes only ceph-osd-crimson from dwz processing using
the -X flag, allowing other binaries in the package to still benefit
from DWARF compression while avoiding the build failure.
Please note, we always disable DWZ in ceph-build's ceph-dev-pipeline.