]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/log
ceph.git
4 weeks agoceph-volume: skip mkfs discard for LVM NVMe OSDs 68286/head
Ujjawal Anand [Mon, 6 Apr 2026 06:26:20 +0000 (11:56 +0530)]
ceph-volume: skip mkfs discard for LVM NVMe OSDs

Run NVMe preformat in the LVM bluestore prepare path and
set skip_mkfs_discard so ceph-osd --mkfs gets --bdev-enable-discard false,
matching the raw OSD behavior.

Fixes:https://tracker.ceph.com/issues/75873

Signed-off-by: Ujjawal Anand <ujjawal.anand@ibm.com>
(cherry picked from commit bb6d4d7457d3daff87811a00ec2a61ab31e19d7d)

4 weeks agoMerge PR #67907 into tentacle
Patrick Donnelly [Tue, 7 Apr 2026 17:38:24 +0000 (13:38 -0400)]
Merge PR #67907 into tentacle

* refs/pull/67907/head:
doc/start: Add ARM support note to hardware-recommendations.rst
doc: Improve start/hardware-recommendations.rst
doc: Update the old ceph.com/community/ links to ceph.io/en/news/blog/
doc/start: Improve hardware-recommendations.rst
doc/start: fix wording in swap tip
doc: Use ref instead of full URLs for intra-docs links
doc: Use existing labels and ref for hyperlinks in architecture.rst

Reviewed-by: Ilya Dryomov <idryomov@redhat.com>
Reviewed-by: Anthony D Atri <anthony.datri@gmail.com>
4 weeks agoMerge PR #66948 into tentacle
Patrick Donnelly [Tue, 7 Apr 2026 12:41:48 +0000 (08:41 -0400)]
Merge PR #66948 into tentacle

* refs/pull/66948/head:
mgr/DaemonServer: Re-order OSDs in crush bucket to maximize OSDs for upgrade
mgr/DaemonServer: Implement ok-to-upgrade command
mgr/DaemonServer: Modify offline_pg_report to handle set or vector types

Reviewed-by: Nitzan Mordechai <nmordech@redhat.com>
Reviewed-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
4 weeks agoMerge PR #67993 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 19:55:54 +0000 (15:55 -0400)]
Merge PR #67993 into tentacle

* refs/pull/67993/head:
test/rgw/kafka: fix kafka relase to more recent one

Reviewed-by: J. Eric Ivancich <ivancich@redhat.com>
4 weeks agoMerge PR #67797 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 19:40:39 +0000 (15:40 -0400)]
Merge PR #67797 into tentacle

* refs/pull/67797/head:
qa/workunits/rbd: fix unbound variable in status()
qa/workunits/rbd: short-circuit status() if "ceph -s" fails
qa: rbd_mirror_fsx_compare.sh doesn't error out as expected

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
4 weeks agoMerge PR #67795 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 19:40:07 +0000 (15:40 -0400)]
Merge PR #67795 into tentacle

* refs/pull/67795/head:
qa/tasks: make rbd_mirror_thrash inherit from ThrasherGreenlet

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
4 weeks agoMerge PR #67705 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 19:39:48 +0000 (15:39 -0400)]
Merge PR #67705 into tentacle

* refs/pull/67705/head:
librbd/cache/pwl: WriteLogOperationSet::cell can be garbage

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
4 weeks agoMerge PR #66837 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 18:25:25 +0000 (14:25 -0400)]
Merge PR #66837 into tentacle

* refs/pull/66837/head:
os/bluestore: rename row names in RocksDBBlueFSVolumeSelector.
test/bluestore: add volume selector tests
os/bluestore:fix bluestore_volume_selection_reserved_factor usage

Reviewed-by: Adam Kupczyk <akupczyk@redhat.com>
4 weeks agoMerge PR #67354 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 18:24:11 +0000 (14:24 -0400)]
Merge PR #67354 into tentacle

* refs/pull/67354/head:
debian: remove invoke-rc.d calls from postrm scripts

Reviewed-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Reviewed-by: Casey Bodley <cbodley@redhat.com>
4 weeks agoMerge PR #67407 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 18:22:32 +0000 (14:22 -0400)]
Merge PR #67407 into tentacle

* refs/pull/67407/head:
osd: add pg-upmap-primary to clean_pg_upmaps

Reviewed-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
4 weeks agoMerge PR #66482 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 18:21:40 +0000 (14:21 -0400)]
Merge PR #66482 into tentacle

* refs/pull/66482/head:
mgr/prometheus/test_module: Adding unit-test for new classes
mgr/prometheus: metrics header for standby module
mgr/prometheus: Use RLock to fix deadlock in HealthHistory
mgr/TTLCache: fix PyObject* lifetime management and cleanup logic
mgr/prometheus: prune stale health checks, compress output

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
Reviewed-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
4 weeks agoMerge PR #65913 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 18:17:08 +0000 (14:17 -0400)]
Merge PR #65913 into tentacle

* refs/pull/65913/head:
client: signal waitfor_commit waiters for write delegation enabled inode
test/libcephfs: add test for fsync on a write delegated inode
client: adjust `Fb` cap ref count check during synchronous fsync()

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
Reviewed-by: Venky Shankar <vshankar@redhat.com>
4 weeks agoMerge PR #65957 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 18:16:33 +0000 (14:16 -0400)]
Merge PR #65957 into tentacle

* refs/pull/65957/head:
client: crash caused by invalid iterator in _readdir_cache_cb

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
4 weeks agoMerge PR #66469 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 18:16:13 +0000 (14:16 -0400)]
Merge PR #66469 into tentacle

* refs/pull/66469/head:
mds: MDCache: check validity of mdr requests before dispatching
mds: MDCache request cleanup handles potential null mdr

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
4 weeks agoMerge PR #67617 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 18:14:09 +0000 (14:14 -0400)]
Merge PR #67617 into tentacle

* refs/pull/67617/head:
qa: fix TypeError in delay

Reviewed-by: Venky Shankar <vshankar@redhat.com>
4 weeks agoMerge PR #67455 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 18:10:14 +0000 (14:10 -0400)]
Merge PR #67455 into tentacle

* refs/pull/67455/head:
qa: krbd_rxbounce.sh: do more reads to generate more errors

Reviewed-by: Ramana Raja <rraja@redhat.com>
4 weeks agoMerge PR #67581 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 18:09:55 +0000 (14:09 -0400)]
Merge PR #67581 into tentacle

* refs/pull/67581/head:
librbd: don't complete ImageUpdateWatchers::shut_down() prematurely

Reviewed-by: Ramana Raja <rraja@redhat.com>
4 weeks agoMerge PR #67583 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 18:09:34 +0000 (14:09 -0400)]
Merge PR #67583 into tentacle

* refs/pull/67583/head:
librbd/mirror: detect trashed snapshots in UnlinkPeerRequest

Reviewed-by: Ramana Raja <rraja@redhat.com>
4 weeks agoMerge PR #67031 into tentacle
Patrick Donnelly [Mon, 6 Apr 2026 18:03:06 +0000 (14:03 -0400)]
Merge PR #67031 into tentacle

* refs/pull/67031/head:
doc/ceph.rst: scrub-related 'tell pgid' commands
osd/scrub: operator abort: (not) handling in-the-mail scrubs
osd/scrub: added the scrub-abort command
osd/scrub: support an operator-abort command
osd/scrub: removing the unused PgScrubber::m_scrub_reg_stamp

Reviewed-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
5 weeks agoMerge PR #68185 into tentacle
Patrick Donnelly [Fri, 3 Apr 2026 16:55:31 +0000 (12:55 -0400)]
Merge PR #68185 into tentacle

* refs/pull/68185/head:
20.2.1

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
5 weeks ago20.2.1 tentacle-release 68185/head v20.2.1
Ceph Release Team [Thu, 2 Apr 2026 14:15:15 +0000 (14:15 +0000)]
20.2.1

Signed-off-by: Ceph Release Team <ceph-maintainers@ceph.io>
6 weeks agotest/rgw/kafka: fix kafka relase to more recent one 67993/head
Yuval Lifshitz [Wed, 4 Mar 2026 14:53:13 +0000 (14:53 +0000)]
test/rgw/kafka: fix kafka relase to more recent one

Fixes: https://tracker.ceph.com/issues/75323
Signed-off-by: Yuval Lifshitz <ylifshit@ibm.com>
(cherry picked from commit dc412a7e519d037acbcac8a92c7ecf2dbde9875a)

7 weeks agodoc/start: Add ARM support note to hardware-recommendations.rst 67907/head
Anthony D'Atri [Mon, 8 Dec 2025 19:48:58 +0000 (14:48 -0500)]
doc/start: Add ARM support note to hardware-recommendations.rst

Signed-off-by: Anthony D'Atri <anthonyeleven@users.noreply.github.com>
(cherry picked from commit 33ecb7912f15495668a99cc64d3aa86fe93d20df)

7 weeks agodoc: Improve start/hardware-recommendations.rst
Anthony D'Atri [Mon, 17 Nov 2025 17:57:29 +0000 (12:57 -0500)]
doc: Improve start/hardware-recommendations.rst

Signed-off-by: Anthony D'Atri <anthonyeleven@users.noreply.github.com>
(cherry picked from commit b4fa87d24fc363ecbc2dafbe5feaf15273e18128)

7 weeks agodoc: Update the old ceph.com/community/ links to ceph.io/en/news/blog/
mrVectorz [Mon, 3 Nov 2025 04:24:59 +0000 (23:24 -0500)]
doc: Update the old ceph.com/community/ links to ceph.io/en/news/blog/

Signed-off-by: Marc Methot <mb.methot@gmail.com>
(cherry picked from commit c32027ba9192b10a10acbbe7683933290dc964b5)

7 weeks agodoc/start: Improve hardware-recommendations.rst
Anthony D'Atri [Thu, 23 Oct 2025 19:29:19 +0000 (15:29 -0400)]
doc/start: Improve hardware-recommendations.rst

Signed-off-by: Anthony D'Atri <anthonyeleven@users.noreply.github.com>
(cherry picked from commit d24c3ac173c09018cd45d8932cde264d36cee257)

7 weeks agodoc/start: fix wording in swap tip
Pierre Riteau [Thu, 21 Aug 2025 09:44:57 +0000 (11:44 +0200)]
doc/start: fix wording in swap tip

Signed-off-by: Pierre Riteau <pierre@stackhpc.com>
(cherry picked from commit 0d45223dd71f3a06d06d28260ac387bad0bde54d)

7 weeks agodoc: Use ref instead of full URLs for intra-docs links
Ville Ojamo [Sat, 2 Aug 2025 06:26:14 +0000 (13:26 +0700)]
doc: Use ref instead of full URLs for intra-docs links

Labels mostly existed already but add labels in 2 files.

Add missing closing quotation mark in
rados/troubleshooting/log-and-debug.rst.

Signed-off-by: Ville Ojamo <14869000+bluikko@users.noreply.github.com>
(cherry picked from commit 40e5395db6c7dcc4ecfdc219e3e5e1fb72650558)

7 weeks agodoc: Use existing labels and ref for hyperlinks in architecture.rst
Ville Ojamo [Thu, 15 May 2025 10:32:29 +0000 (17:32 +0700)]
doc: Use existing labels and ref for hyperlinks in architecture.rst

Use validated ":ref:" hyperlinks instead of "external links" in "target
definitions" when linking within the Ceph docs:
- Update to use existing labels when linkin from architecture.rst.
- Remove unused "target definitions".

Also use title case for section titles in
doc/start/hardware-recommendations.rst because change to use link text
generated from section title.

Other than generated link texts the rendered PR should look the same as
the old docs, only differing in the source RST.

Signed-off-by: Ville Ojamo <14869000+bluikko@users.noreply.github.com>
(cherry picked from commit 15935db5d78360d5ca98c799cf9fff287b6d0a4c)

7 weeks agoMerge PR #67894 into tentacle
Patrick Donnelly [Thu, 19 Mar 2026 17:48:33 +0000 (13:48 -0400)]
Merge PR #67894 into tentacle

* refs/pull/67894/head:
src: Move the decision to build the ISA plugin to the top level make file

Reviewed-by: Bill Scales <bill_scales@uk.ibm.com>
7 weeks agoMerge PR #67765 into tentacle
Patrick Donnelly [Thu, 19 Mar 2026 15:23:06 +0000 (11:23 -0400)]
Merge PR #67765 into tentacle

* refs/pull/67765/head:
qa: reduce radosbench runs
qa: use correct upgrade order
qa: preload isa ec module
qa/tests: added inital draft for tentacle-p2p

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
7 weeks agosrc: Move the decision to build the ISA plugin to the top level make file 67894/head
Alex Ainscow [Wed, 18 Mar 2026 14:51:57 +0000 (14:51 +0000)]
src: Move the decision to build the ISA plugin to the top level make file

Previously, the first time you build ceph, common did not see the correct
value of WITH_EC_ISA_PLUGIN.  The consequence is that the global.yaml gets
build with osd_erasure_code_plugins not including isa.  This is not great
given its our default plugin.

We considered simply removing this parameter from make entirely, but this
may require more discussion about supporting old hardware.

So the slightly ugly fix is to move this erasure-code specific declartion
to the top-level.

Fixes: https://tracker.ceph.com/issues/75537
Signed-off-by: Alex Ainscow <aainscow@uk.ibm.com>
(cherry picked from commit cecce28f16b0867ea8578a8f0c1478e24a40e525)

7 weeks agoqa: reduce radosbench runs wip-yuriw-squid-p2p-tentacle 67765/head
Patrick Donnelly [Wed, 18 Mar 2026 17:42:38 +0000 (13:42 -0400)]
qa: reduce radosbench runs

to avoid running out of space.

Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
7 weeks agoqa: use correct upgrade order
Patrick Donnelly [Wed, 18 Mar 2026 17:42:22 +0000 (13:42 -0400)]
qa: use correct upgrade order

Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
7 weeks agoqa: preload isa ec module
Patrick Donnelly [Wed, 18 Mar 2026 17:41:59 +0000 (13:41 -0400)]
qa: preload isa ec module

So that the mons won't load an upgraded plugin.

Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
7 weeks agoMerge PR #67750 into tentacle
Patrick Donnelly [Wed, 18 Mar 2026 17:41:18 +0000 (13:41 -0400)]
Merge PR #67750 into tentacle

* refs/pull/67750/head:
Revert "Merge pull request #66958 from Hezko/wip-74413-tentacle"

Reviewed-by: Yuri Weinstein <yweins@redhat.com>
Tested-by: Patrick Donnelly <pdonnell@redhat.com>
8 weeks agoRevert "Merge pull request #66958 from Hezko/wip-74413-tentacle" 67750/head
Patrick Donnelly [Thu, 12 Mar 2026 06:46:09 +0000 (12:16 +0530)]
Revert "Merge pull request #66958 from Hezko/wip-74413-tentacle"

This reverts commit 6dddf544a44d3944e883c051d886f0049a95a2e5, reversing
changes made to 07ec509cf156d83e38aa6c2a151d4f06009e8dfa.

Backport 6dddf54 introduced a new connection feature bit
NVMEOF_BEACON_DIFF but there are plans (#66624) to make further
enhancements on that feature bit. This would cause the mons to crash
during upgrades.

However, this connection feature bit should not have been added to
begin with. The correct way to do this is extend
e55ad7bce2fb85096cd31ff9846403f9dbd01e85 by @athanatos to require
`CEPH_MON_FEATURE_INCOMPAT_NVMEOF_BEACON_DIFF` if all mons support it.
This should be done by having mons add/update their supported features
the MonMap via an update from `MMonJoin` (see for instance `crush_loc`
which was recently added to `mon_info_t`). Once the supported features
indicated for each mon in the `MonMap` show they understand the new
NVMEOF_BEACON_DIFF, then it should be turned on globally in the
`MonMap` as a required feature (added to the incompat set).

Conflicts:
src/mon/NVMeofGwMon.h: conflicts with header change from 19c9be2
                               fix missing header change in #66584

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
8 weeks agoqa/workunits/rbd: fix unbound variable in status() 67797/head
Ilya Dryomov [Mon, 2 Mar 2026 11:07:48 +0000 (12:07 +0100)]
qa/workunits/rbd: fix unbound variable in status()

It was missed in commit 5fe64fa806f3 ("qa: rbd_mirror.sh: change
parameters to cluster rather than daemon name").

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 1a280b9a320d51bdc4cb80be9bdd6ae265151132)

8 weeks agoqa/workunits/rbd: short-circuit status() if "ceph -s" fails
Ilya Dryomov [Sun, 1 Mar 2026 21:55:52 +0000 (22:55 +0100)]
qa/workunits/rbd: short-circuit status() if "ceph -s" fails

In mirror-thrash tests, status() can be invoked after one of the
clusters is effectively stopped due to a watchdog bark:

2026-03-01T22:27:38.633 INFO:tasks.daemonwatchdog.daemon_watchdog:thrasher.rbd_mirror.[cluster2] failed
2026-03-01T22:27:38.633 INFO:tasks.daemonwatchdog.daemon_watchdog:BARK! unmounting mounts and killing all daemons
...
2026-03-01T22:32:46.964 INFO:tasks.workunit.cluster1.client.mirror.trial199.stderr:+ status
2026-03-01T22:32:46.964 INFO:tasks.workunit.cluster1.client.mirror.trial199.stderr:+ local cluster daemon image_pool image_ns image
2026-03-01T22:32:46.964 INFO:tasks.workunit.cluster1.client.mirror.trial199.stderr:+ for cluster in ${CLUSTER1} ${CLUSTER2}

In this scenario all commands that are invoked from the loop body
are going to time out anyway.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 82717e43a08a1262987f5e271fd72d4433c4fb3b)

8 weeks agoqa: rbd_mirror_fsx_compare.sh doesn't error out as expected
Ilya Dryomov [Sun, 1 Mar 2026 16:45:51 +0000 (17:45 +0100)]
qa: rbd_mirror_fsx_compare.sh doesn't error out as expected

In mirror-thrash tests, one of the clusters can be effectively stopped
due to a watchdog bark while rbd_mirror_fsx_compare.sh is running and is
in the middle of the "wait for all images" loop:

2026-03-01T12:55:35.059 INFO:tasks.workunit.cluster1.client.mirror.trial055.stderr:+ retrying_seconds=1040
2026-03-01T12:55:35.060 INFO:tasks.workunit.cluster1.client.mirror.trial055.stderr:+ '[' 1040 -le 7200 ']'
2026-03-01T12:55:35.060 INFO:tasks.workunit.cluster1.client.mirror.trial055.stderr:++ rbd --cluster cluster2 --pool mirror ls
2026-03-01T12:55:35.060 INFO:tasks.workunit.cluster1.client.mirror.trial055.stderr:++ wc -l
2026-03-01T12:55:35.084 INFO:tasks.workunit.cluster1.client.mirror.trial055.stderr:+ '[' 290 -ge 292 ']'
2026-03-01T12:55:35.084 INFO:tasks.workunit.cluster1.client.mirror.trial055.stderr:+ sleep 10
...
2026-03-01T12:55:49.568 INFO:tasks.daemonwatchdog.daemon_watchdog:thrasher.rbd_mirror.[cluster2] failed
2026-03-01T12:55:49.568 INFO:tasks.daemonwatchdog.daemon_watchdog:BARK! unmounting mounts and killing all daemons

In this scenario "rbd ls" is going to time out repeatedly, turning the
loop into up to a ~60-hour sleep (up to 720 iterations with a 5-minute
timeout + 10-second sleep per iteration).

Fixes: https://tracker.ceph.com/issues/75239
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 81a5906f0d1cc844bb4ef16aae9ace3e7d371ac2)

8 weeks agoqa/tasks: make rbd_mirror_thrash inherit from ThrasherGreenlet 67795/head
Ilya Dryomov [Fri, 27 Feb 2026 14:18:27 +0000 (15:18 +0100)]
qa/tasks: make rbd_mirror_thrash inherit from ThrasherGreenlet

Commit 21b4b89e5280 ("qa/tasks: watchdog terminate thrasher") made it
required for a thrasher to have stop_and_join() method, but the
preceding commit a035b5a22fb8 ("thrashers: standardize stop and join
method names") missed to add it to rbd_mirror_thrash (whether as an
ad-hoc implementation or by way of inheriting from ThrasherGreenlet).
Later on, commit 783f0e3a9903 ("qa: Adding a new class for the
daemonwatchdog to monitor") worsened the issue by expanding the use
of stop_and_join() to all watchdog barks rather than just the case of
a thrasher throwing an exception which is something that practically
never happens.

Fixes: https://tracker.ceph.com/issues/75200
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 3ebe3a0a43251b0f126497d4100bd1af9ca8afc5)

8 weeks agoqa/tests: added inital draft for tentacle-p2p
Yuri Weinstein [Thu, 12 Mar 2026 21:38:39 +0000 (14:38 -0700)]
qa/tests: added inital draft for tentacle-p2p

Signed-off-by: Yuri Weinstein <yweinste@redhat.com>
2 months agolibrbd/cache/pwl: WriteLogOperationSet::cell can be garbage 67705/head
Ilya Dryomov [Mon, 16 Feb 2026 21:24:47 +0000 (22:24 +0100)]
librbd/cache/pwl: WriteLogOperationSet::cell can be garbage

The pointer is never initialized but gets printed by operator<<.
Luckily outside of that it's unused.

Fixes: https://tracker.ceph.com/issues/74971
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit bffa11487cb7d68c0aa39994f50fbc3b4b00e415)

2 months agoclient: signal waitfor_commit waiters for write delegation enabled inode 65913/head
Venky Shankar [Wed, 15 Oct 2025 13:40:35 +0000 (13:40 +0000)]
client: signal waitfor_commit waiters for write delegation enabled inode

Fixes: http://tracker.ceph.com/issues/73624
Signed-off-by: Venky Shankar <vshankar@redhat.com>
Tested-by: Suhas Athani <sathani@redhat.com>
(cherry picked from commit ee864798373248abda5237ceef2258ed7236f6ee)

2 months agotest/libcephfs: add test for fsync on a write delegated inode
Venky Shankar [Mon, 29 Sep 2025 06:44:28 +0000 (06:44 +0000)]
test/libcephfs: add test for fsync on a write delegated inode

Signed-off-by: Venky Shankar <vshankar@redhat.com>
(cherry picked from commit be0c40c89c0556ae7696dfaaf6804684ecfaddeb)

2 months agoclient: adjust `Fb` cap ref count check during synchronous fsync()
Venky Shankar [Mon, 29 Sep 2025 06:41:23 +0000 (06:41 +0000)]
client: adjust `Fb` cap ref count check during synchronous fsync()

cephfs client holds a ref on Fb caps when handing out a write delegation[0].
As fsync from (Ganesha) client holding write delegation will block indefinitely[1]
waiting for cap ref for Fb to drop to 0, which will never happen until the
delegation is returned/recalled.

[0]: https://github.com/ceph/ceph/blob/main/src/client/Delegation.cc#L71
[1]: https://github.com/ceph/ceph/blob/main/src/client/Client.cc#L12438

If an inode has been write delegated, adjust for cap reference count
check in fsync().

Note: This only workls for synchronous fsync() since `client_lock` is
held for the entire duration of the call (at least till the patch leading
upto the reference count check). Asynchronous fsync() needs to be fixed
separately (as that can drop `client_lock`).

Fixes: https://tracker.ceph.com/issues/73298
Signed-off-by: Venky Shankar <vshankar@redhat.com>
(cherry picked from commit d7eca69a5b887e2b65513411280158d06cdb6b3c)

2 months agomgr/prometheus/test_module: Adding unit-test for new classes 66482/head
NitzanMordhai [Mon, 2 Feb 2026 13:37:34 +0000 (13:37 +0000)]
mgr/prometheus/test_module: Adding unit-test for new classes

Fixes: https://tracker.ceph.com/issues/74149
Signed-off-by: Nitzan Mordechai <nmordech@ibm.com>
(cherry picked from commit e3de8c9c1f3b83ec41bbdee25a14fe1ff20e239c)

2 months agomgr/prometheus: metrics header for standby module
Nitzan Mordechai [Thu, 11 Dec 2025 06:32:31 +0000 (06:32 +0000)]
mgr/prometheus: metrics header for standby module

PR #65245 drop the header set for standby module,
we should still have it.

Fixes: https://tracker.ceph.com/issues/74149
Signed-off-by: Nitzan Mordechai <nmordech@ibm.com>
(cherry picked from commit 2ef12b2ffa6dd11041e7120febcbd62338ec8cd3)

2 months agomgr/prometheus: Use RLock to fix deadlock in HealthHistory
Nitzan Mordechai [Tue, 9 Dec 2025 12:34:07 +0000 (12:34 +0000)]
mgr/prometheus: Use RLock to fix deadlock in HealthHistory

The HealthHistory.check() method acquires the lock and then calls
HealthHistory.save(), which also tries to acquire the same lock.
With a regular Lock(), the same thread blocks trying to re-acquire it (deadlock).
Switch to RLock to allow nested acquisition by the same thread.
PR #65245 added the locks.

Fixes: https://tracker.ceph.com/issues/74148
Signed-off-by: Nitzan Mordechai <nmordech@ibm.com>
(cherry picked from commit 26394ca06981e87ec7aee75b8467817afa330ba6)

2 months agomgr/TTLCache: fix PyObject* lifetime management and cleanup logic
Nitzan Mordechai [Tue, 26 Aug 2025 14:30:12 +0000 (14:30 +0000)]
mgr/TTLCache: fix PyObject* lifetime management and cleanup logic

Fix incorrect reference counting and memory retention behavior in TTLCache
when storing PyObject* values.
Previously, TTLCache::insert did not increment the reference count,
and `erase` / `clear` did not correctly decref the values, leading
to use-after-free or leaks depending on usage.

Changes:
- Move Py_INCREF from cacheable_get_python() to TTLCache::insert()
- Add `TTLCache::clear()` method for proper memory cleanup
- Ensure TTLCache::get() returns a new reference
- Fix misuse of std::move on c_str() in PyJSONFormatter

These changes prevent both memory leaks and use-after-free errors when
mgr modules use cached Python objects logic.

Fixes: https://tracker.ceph.com/issues/68989
Signed-off-by: Nitzan Mordechai <nmordech@redhat.com>
(cherry picked from commit 7fadf6a8d464456668550e1f85c6c5a86f94bb49)

2 months agomgr/prometheus: prune stale health checks, compress output
Nitzan Mordechai [Wed, 20 Aug 2025 14:50:40 +0000 (14:50 +0000)]
mgr/prometheus: prune stale health checks, compress output

This patch introduces several improvements to the Prometheus module:

 - Introduces `HealthHistory._prune()` to drop stale and inactive health checks.
  Limits the in-memory healthcheck dict to a configurable max_entries (default 1000).
  TTL for stale entries is configurable via `healthcheck_history_stale_ttl` (default 3600s).

 - Refactors HealthHistory.check() to use a unified iteration over known and current checks,
  improving concurrency and minimizing redundant updates.

 - Use cherrypy.tools.gzip instead of manual gzip.compress() for cleaner
  HTTP compression with proper header handling and client negotiation.

 - Introduces new module options:
    - `healthcheck_history_max_entries`

 - Add proper error handling for CherryPy engine startup failures
 - Remove os._exit monkey patch in favor of proper exception handling
 - Remove manual Content-Type header setting (CherryPy handles automatically)

Fixes: https://tracker.ceph.com/issues/68989
Signed-off-by: Nitzan Mordechai <nmordech@redhat.com>
(cherry picked from commit be28901f361cadcf6bf993276d71f3a79beaae4f)

2 months agoMerge PR #67318 into tentacle
Patrick Donnelly [Tue, 3 Mar 2026 20:53:18 +0000 (15:53 -0500)]
Merge PR #67318 into tentacle

* refs/pull/67318/head:
qa/multisite: use boto3's ClientError in place of assert_raises from tools.py.
qa/multisite: test fixes
qa/multisite: boto3 in tests.py
qa/multisite: zone files use boto3 resource api
qa/multisite: switch to boto3 in multisite test libraries

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
2 months agoMerge PR #67425 into tentacle
Patrick Donnelly [Tue, 3 Mar 2026 20:52:10 +0000 (15:52 -0500)]
Merge PR #67425 into tentacle

* refs/pull/67425/head:
RGW | fix conditional MultiWrite

Reviewed-by: Adam C. Emerson <aemerson@redhat.com>
2 months agoMerge PR #67449 into tentacle
Patrick Donnelly [Tue, 3 Mar 2026 20:51:44 +0000 (15:51 -0500)]
Merge PR #67449 into tentacle

* refs/pull/67449/head:
tentacle: qa/rgw: bucket notifications use pynose

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
2 months agoqa: fix TypeError in delay 67617/head
Jos Collin [Tue, 24 Feb 2026 02:03:13 +0000 (07:33 +0530)]
qa: fix TypeError in delay

random.randrange() asserts TypeError for arguments of type 'float'.
So use random.uniform() to fix this.

Fixes: https://tracker.ceph.com/issues/75090
Signed-off-by: Jos Collin <jcollin@redhat.com>
(cherry picked from commit 027400df81aa3bff0def422acfa43eff5f6e08c0)

2 months agolibrbd/mirror: detect trashed snapshots in UnlinkPeerRequest 67583/head
Ilya Dryomov [Tue, 24 Feb 2026 11:46:35 +0000 (12:46 +0100)]
librbd/mirror: detect trashed snapshots in UnlinkPeerRequest

If two instances of UnlinkPeerRequest race with each other (e.g. due
to rbd-mirror daemon unlinking from a previous mirror snapshot and the
user taking another mirror snapshot at same time), the snapshot that
UnlinkPeerRequest was created for may be in the process of being removed
(which may mean trashed by SnapshotRemoveRequest::trash_snap()) or fully
removed by the time unlink_peer() grabs the image lock.  Because trashed
snapshots weren't handled explicitly, UnlinkPeerRequest could spuriously
fail with EINVAL ("not mirror snapshot" case) instead of the expected
ENOENT ("missing snapshot" case).  This in turn could lead to spurious
ImageReplayer failures with it stopping prematurely.

Fixes: https://tracker.ceph.com/issues/68279
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 3596ca077097a4e0ff8e8d05a410c2044332391e)

2 months agolibrbd: don't complete ImageUpdateWatchers::shut_down() prematurely 67581/head
Ilya Dryomov [Wed, 25 Feb 2026 10:37:16 +0000 (11:37 +0100)]
librbd: don't complete ImageUpdateWatchers::shut_down() prematurely

ImageUpdateWatchers::flush() requests aren't tracked with
m_in_flight-like mechanism the way ImageUpdateWatchers::send_notify()
requests are, but in both cases callbacks that represent delayed work
that is very likely to (indirectly) reference ImageCtx are involved.
When the image is getting closed, ImageUpdateWatchers::shut_down() is
called before anything that belongs to ImageCtx is destroyed.  However,
the shutdown can complete prematurely in the face of a pending flush if
one gets sent shortly before CloseRequest is invoked.  The callback for
that flush will then race with CloseRequest and may execute after parts
of or even the entire ImageCtx is destroyed, leading to use-after-free
and various segfaults.

Fixes: https://tracker.ceph.com/issues/75161
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 3ea6ee62aa339d1ad9976fdcc6e207a505f9bf44)

2 months agoos/bluestore: rename row names in RocksDBBlueFSVolumeSelector. 66837/head
Igor Fedotov [Wed, 21 May 2025 08:30:15 +0000 (11:30 +0300)]
os/bluestore: rename row names in RocksDBBlueFSVolumeSelector.

Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
(cherry picked from commit a9f591f4e1cb1e364879165250c55cb0f841d64f)

2 months agotest/bluestore: add volume selector tests
Igor Fedotov [Mon, 19 May 2025 19:20:53 +0000 (22:20 +0300)]
test/bluestore: add volume selector tests

Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
(cherry picked from commit 158d1550a021ed60e5ad1c565b247e5b0b6d5946)

2 months agoos/bluestore:fix bluestore_volume_selection_reserved_factor usage
Igor Fedotov [Mon, 19 May 2025 19:19:45 +0000 (22:19 +0300)]
os/bluestore:fix bluestore_volume_selection_reserved_factor usage

Fixes: https://tracker.ceph.com/issues/71368
Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
(cherry picked from commit 43d7864093f92977a3fd084bbfd65229244b1cc9)

2 months agoMerge PR #67559 into tentacle
Patrick Donnelly [Fri, 27 Feb 2026 15:04:33 +0000 (10:04 -0500)]
Merge PR #67559 into tentacle

* refs/pull/67559/head:
test: disable known flaky tests in run-rbd-unit-tests

Reviewed-by: Ramana Raja <rraja@redhat.com>
Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
2 months agotest: disable known flaky tests in run-rbd-unit-tests 67559/head
Ilya Dryomov [Thu, 19 Feb 2026 14:45:39 +0000 (15:45 +0100)]
test: disable known flaky tests in run-rbd-unit-tests

The failures seem to be more frequent on newer hardware.  In the
absence of immediate fixes, disable a few tests that have been known to
be flaky for a long time to avoid disrupting "make check" runs.

Fixes: https://tracker.ceph.com/issues/75163
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit ecb616681b5347676198b33c80de60742bac7b69)

2 months agoMerge PR #66540 into tentacle
Patrick Donnelly [Thu, 26 Feb 2026 20:17:06 +0000 (15:17 -0500)]
Merge PR #66540 into tentacle

* refs/pull/66540/head:
include: detect corrupt frag from byteswap
test/encoding: print context on diff failure
mds: dump frag_t as an object
common/frag: produce valid fragments for test instances
common: simplify fragment printing
common: properly convert frag_t to net/store endianness
mds: include sysinfo in status command output
include/frag.h: un-inline methods to reduce header dependencies

Tested-by: Patrick Donnelly <pdonnell@redhat.com>
Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
2 months agoMerge PR #65358 into tentacle
Patrick Donnelly [Thu, 26 Feb 2026 20:16:07 +0000 (15:16 -0500)]
Merge PR #65358 into tentacle

* refs/pull/65358/head:
qa: Disable a test for kernel mount
qa: Run test_admin with the squid client
src/test/mds: Fix TestMDSAuthCaps
client: Fix the multifs auth caps check
mds: Fix multifs auth caps check
qa: Fix validation of client_version
qa: Test cross fs access by single client in multifs

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
2 months agoMerge PR #67333 into tentacle
Patrick Donnelly [Thu, 26 Feb 2026 13:53:27 +0000 (08:53 -0500)]
Merge PR #67333 into tentacle

* refs/pull/67333/head:
test/test_bluefs: make a standalone test case to reproduce bug#74765
os/bluestore: update volume selector after recovering BlueFS WAL in
test/test_bluefs: reproduce volume selector inconsistency after
os/bluestore: move RocksDBBlueFSVolumeSelector to BlueFS.cc
os/bluestore: rename/repurpose bluefs_check_volume_selector_on_umount setting.
os/bluestore/bluefs: Fix stat() for WAL envelope mode

Reviewed-by: Adam Kupczyk <akupczyk@redhat.com>
2 months agomgr/DaemonServer: Re-order OSDs in crush bucket to maximize OSDs for upgrade 66948/head
Sridhar Seshasayee [Thu, 12 Feb 2026 20:03:25 +0000 (01:33 +0530)]
mgr/DaemonServer: Re-order OSDs in crush bucket to maximize OSDs for upgrade

DaemonServer::_maximize_ok_to_upgrade_set() attempts to find which OSDs
from the initial set found as part of _populate_crush_bucket_osds() can be
upgraded as part of the initial phase. If the initial set results in failure,
the convergence logic trims the 'to_upgrade' vector from the end until a safe
set is found.

Therefore, it would be advantageous to sort the OSDs by the ascending number
of PGs hosted by the OSDs. By placing OSDs with smallest (or no PGs) at the
beginning of the vector, the trim logic along with _check_offlines_pgs() will
have the best chance of finding OSDs to upgrade as it approaches a grouping
of OSDs that have the smallest or no PGs.

To achieve the above, a temporary vector of struct pgs_per_osd is created and
sorted for a given crush bucket. The sorted OSDs are pushed to the main
crush_bucket_osds that is eventually used to run the _check_offlines_pgs()
logic to find a safe set of OSDs to upgrade.

pgmap is passed to _populate_crush_bucket_osds() to utilize get_num_pg_by_osd()
for the above logic to work.

Signed-off-by: Sridhar Seshasayee <sseshasa@redhat.com>
(cherry picked from commit 8177e48e5c800e8bdcebd46fcaa51fbe5ea126cc)

2 months agomgr/DaemonServer: Implement ok-to-upgrade command
Sridhar Seshasayee [Mon, 27 Oct 2025 16:34:54 +0000 (22:04 +0530)]
mgr/DaemonServer: Implement ok-to-upgrade command

Implement a new Mgr command called 'ok-to-upgrade' that returns a set of OSDs
within the provided CRUSH bucket that are safe to upgrade without reducing
immediate data availability.

The command accepts the following as input:
 - CRUSH bucket name (required)
   - The CRUSH bucket type is limited to 'rack', 'chassis', 'host' and 'osd'.
     This is to prevent users from specifying a bucket type higher up the tree
     which could result in performance issues if the number of OSDs in the
     bucket is very high.
 - The new Ceph version to check against. The format accepted is the short
   form of the Ceph version, for e.g. 20.3.0-3803-g63ca1ffb5a2. (required)
 - The maximum number of OSDs to consider if specified. (optional)

Implementation Details:

After sanity checks on the provided parameters, the following steps are
performed:

1. The set of OSDs within the CRUSH bucket is first determined.
2. From the main set of OSDs, a filtered set of OSDs not yet running the new
   Ceph version is created.
   - For this purpose, the OSD's 'ceph_version_short' string is read from
     the metadata. For this purpose a new method called
     DaemonServer::get_osd_metadata() is used. The information is determined
     from the DaemonStatePtr maintained within the DaemonServer.
3. If all OSDs are already running the new Ceph version, a success report is
   generated and returned.
4. If OSDs are not running the new Ceph version, a new set (to_upgrade) is
   created.
5. If the current version cannot be determined, an error is logged and the
   output report with 'bad_no_version' field populated with the OSD in question
   is generated.
6. On the new set (to_upgrade), the existing logic in _check_offline_pgs() is
   executed to see if stopping any or all OSDs in the set as part of the upgrade
   can reduce immediate data availability.
   - If data availability is impacted, then the number of OSDs in the filtered
     set is reduced by a factor defined by a new config option called
     'mgr_osd_upgrade_check_convergence_factor' which is set to 0.8 by default.
   - The logic in _check_offline_pgs() is repeated for the new set.
   - The above is repeated until a safe subset of OSDs that can be stopped for
     upgrade is found. Each iteration reduces the number of OSDs to check by
     the convergence factor mentioned above.
7. It must be noted that the default value of
   'mgr_osd_upgrade_check_convergence_factor' is on the higher side in order to
   help determine an optimal set of OSDs to upgrade. In other words, a higher
   convergence factor would help maximize the number of OSDs to upgrade. In this
   case, the number of iterations and therefore the time taken to determine the
   OSDs to upgrade is proportional to the number of OSDs in the CRUSH bucket.
   The converse is true if a lower convergence factor is used.
8. If the number of OSDs determined is lower than the 'max' specified, then an
   additional loop is executed to determine if other children of the CRUSH
   bucket can be added to the existing set.
9. Once a viable set is determined, an output report similar to the following is
   generated:

A standalone test is introduced that exercises the logic for both replicated
and erasure-coded pools by manipulating the min_size for a pool and check for
upgradability. The tests also performs other basic sanity checks and error
conditions.

The output shown below is for a cluster running on a single node with 10 OSDs
and with replicated pool configuration:

$ ceph osd ok-to-upgrade incerta06 01.00.00-gversion-test --format=json
{"ok_to_upgrade":true,"all_osds_upgraded":false,\
 "osds_in_crush_bucket":[0,1,2,3,4,5,6,7,8,9],\
 "osds_ok_to_upgrade":[0],"osds_upgraded":[],"bad_no_version":[]}

The following report is shown if all OSDs are running the desired Ceph version:

$ ceph osd ok-to-upgrade --crush_bucket  localrack \
  --ceph_version 20.3.0-3803-g63ca1ffb5a2
{"ok_to_upgrade":false,"all_osds_upgraded":true,\
 "osds_in_crush_bucket":[0,1,2,3,4,5,6,7,8,9],"osds_ok_to_upgrade":[],\
"osds_upgraded":[0,1,2,3,4,5,6,7,8,9],"bad_no_version":[]}'

Fixes: https://tracker.ceph.com/issues/73031
Signed-off-by: Sridhar Seshasayee <sseshasa@redhat.com>
(cherry picked from commit c63b188a9fb1431827b2299c5dfa2074c078854a)

2 months agomgr/DaemonServer: Modify offline_pg_report to handle set or vector types
Sridhar Seshasayee [Mon, 2 Feb 2026 08:44:15 +0000 (14:14 +0530)]
mgr/DaemonServer: Modify offline_pg_report to handle set or vector types

The offline_pg_report structure to be used by both the 'ok-to-stop' and
'ok-to-upgrade' commands is modified to handle either std::set or std::vector
type containers. This is necessitated due to the differences in the way
both commands work. For the 'ok-to-upgrade' command logic to work optimally,
the items in the specified crush bucket including items found in the subtree
must be strictly ordered. The earlier std::set container re-orders the items
upon insertion by sorting the items which results in the offline pg check to
report sub-optimal results.

Therefore, the offline_pg_report struct is modified to use
std::variant<std::vector<int>, std::set<int>> as a ContainerType and handled
accordingly in dump() using std::visit(). This ensures backward compatibility
with the existing 'ok-to-stop' command while catering to the requirements of
the new 'ok-to-upgrade' command.

Signed-off-by: Sridhar Seshasayee <sseshasa@redhat.com>
(cherry picked from commit cf54988c504a7819c88bbd78d1a7f766b705ca43)

Conflicts:
    src/mgr/DaemonServer.cc
- In DaemonServer::_check_offlines_pgs(), resolve a compiler error
  when printing the list of osds which is of type std::variant. Since
  tentacle branch is still not transitioned to use std::variant
  instead of boost::variant, the operator<< is not handled like in the
  main branch(see commit: 09d2731). Therefore, use std::visit() to
  print the list of osds that could be of types std::set or
  std::vector by using a lambda and passing the CephContext pointer
  and a pointer to the offline pg report.

2 months agoqa: krbd_rxbounce.sh: do more reads to generate more errors 67455/head
Ilya Dryomov [Sun, 8 Feb 2026 08:27:26 +0000 (09:27 +0100)]
qa: krbd_rxbounce.sh: do more reads to generate more errors

On faster hardware having each thread do 1024 reads isn't always
sufficient for the "two orders of magnitude" threshold that is used in
the test.

Fixes: https://tracker.ceph.com/issues/74712
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 7f85b9ddb54cb3d83311daa7a72be27731be2806)

2 months agotentacle: qa/rgw: bucket notifications use pynose 67449/head
Casey Bodley [Thu, 19 Feb 2026 15:09:44 +0000 (10:09 -0500)]
tentacle: qa/rgw: bucket notifications use pynose

nose incompatibility in multisite tests was fixed by switching to pynose
in https://github.com/ceph/teuthology/pull/1947, so i'm trying the same
here

Fixes: https://tracker.ceph.com/issues/74573
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit 915a5309a639333839829b5a554f3fdb6c560464)
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
2 months agoMerge PR #65949 into tentacle
Patrick Donnelly [Thu, 19 Feb 2026 17:12:12 +0000 (12:12 -0500)]
Merge PR #65949 into tentacle

* refs/pull/65949/head:
RGW | fixed enqueueing the overwritten object for gc
RGW | Added debugs in cases where precondition check fails
RGW | fix conditional Delete and MultiDelete

Reviewed-by: Casey Bodley <cbodley@redhat.com>
2 months agotest/test_bluefs: make a standalone test case to reproduce bug#74765 67333/head
Igor Fedotov [Thu, 12 Feb 2026 15:46:35 +0000 (18:46 +0300)]
test/test_bluefs: make a standalone test case to reproduce bug#74765

Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
(cherry picked from commit 03ef619e79a56cd363b087a5c6f19a1a09b49040)

2 months agoos/bluestore: update volume selector after recovering BlueFS WAL in
Igor Fedotov [Wed, 11 Feb 2026 16:52:20 +0000 (19:52 +0300)]
os/bluestore: update volume selector after recovering BlueFS WAL in
envelope mode.

Fixes: https://tracker.ceph.com/issues/74765
Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
(cherry picked from commit 7807e11ee411192563fa256143bce9a454ccf5f1)

2 months agotest/test_bluefs: reproduce volume selector inconsistency after
Igor Fedotov [Wed, 11 Feb 2026 16:36:20 +0000 (19:36 +0300)]
test/test_bluefs: reproduce volume selector inconsistency after
recovering WAL in envelope mode.

Reproduces: https://tracker.ceph.com/issues/74765

Exact bug reproduction (which occurs on file removal) requires
'bluefs_check_volume_selector_on_mount' to be set manually to false
in 'wal_v2_simulate_crash' test case.
That's not the case for the default implementation which fails volume selector
validation at earlier stage during BlueFS mount.
This seems a general approach which provides better test coverage.

Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
(cherry picked from commit e65564e9d1d7f97731f5f9d1d0072192ffb66183)

2 months agoos/bluestore: move RocksDBBlueFSVolumeSelector to BlueFS.cc
Igor Fedotov [Wed, 11 Feb 2026 16:34:30 +0000 (19:34 +0300)]
os/bluestore: move RocksDBBlueFSVolumeSelector to BlueFS.cc

We'll need it from test_bluefs.cc and hence better move out of
BlueStore.cc to not expose it for the tests.

Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
(cherry picked from commit 42b25e52e19014206b26be7ea7fa1e5538ecae08)

2 months agoos/bluestore: rename/repurpose bluefs_check_volume_selector_on_umount setting.
Igor Fedotov [Wed, 11 Feb 2026 16:20:23 +0000 (19:20 +0300)]
os/bluestore: rename/repurpose bluefs_check_volume_selector_on_umount setting.

This is bluefs_check_volume_selector_on_mount now and enables volume
selector validation on both mount and umount.

Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
(cherry picked from commit 777783f4219d7e456d701b01463ec3419bf20873)

2 months agoos/bluestore/bluefs: Fix stat() for WAL envelope mode
Adam Kupczyk [Thu, 4 Dec 2025 13:59:57 +0000 (13:59 +0000)]
os/bluestore/bluefs: Fix stat() for WAL envelope mode

After indexing WAL envelope files update of actual file size was
forgotten. Strangely, it does not affect RocksDB WAL recovery procedure.

Fixes: https://tracker.ceph.com/issues/74091
Signed-off-by: Adam Kupczyk <akupczyk@ibm.com>
(cherry picked from commit 5a13df1c8c68d98c8a98ec6dc90c80ef8a5b6cbb)

2 months agoRGW | fix conditional MultiWrite 67425/head
Ali Masarwa [Sun, 3 Aug 2025 11:00:11 +0000 (14:00 +0300)]
RGW | fix conditional MultiWrite

Signed-off-by: Ali Masarwa <amasarwa@redhat.com>
(cherry picked from commit 0f8d0969d50a986837d0d79134cf561af1fefad2)

2 months agoMerge PR #67319 into tentacle
Patrick Donnelly [Thu, 19 Feb 2026 13:26:31 +0000 (08:26 -0500)]
Merge PR #67319 into tentacle

* refs/pull/67319/head:
mon: Deny EC optimizations (fast EC) for non-4k-aligned chunk-sizes.

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
2 months agoosd: add pg-upmap-primary to clean_pg_upmaps 67407/head
Laura Flores [Fri, 28 Feb 2025 06:04:42 +0000 (06:04 +0000)]
osd: add pg-upmap-primary to clean_pg_upmaps

This commit adds handling of pg_upmap_primary to `clean_pg_upmaps`
so invalid mappings are properly removed. Invalid mappings occur
when pools are deleted, the PG size is decreased, or an OSD is
marked down/out.

Test cases cover cases where:
1. PG num is reduced (all pg_upmap_primary mappings should be canceled)
2. An OSD outside of the up set has been mapped as the primary
3. An OSD is marked "out"
4. A mapping is redundant
5. A pool is deleted

Run the unit test with:
$ ninja unittest_osdmap
$ ./bin/unittest_osdmap --gtest_filter=*CleanPGUpmapPrimaries* --debug_osd=10

Fixes: https://tracker.ceph.com/issues/67265
Signed-off-by: Laura Flores <lflores@ibm.com>
(cherry picked from commit e37d02a3a591f559710471d4ce3dcef76bb9565f)

2 months agomon: Deny EC optimizations (fast EC) for non-4k-aligned chunk-sizes. 67319/head
Alex Ainscow [Wed, 11 Feb 2026 18:11:12 +0000 (18:11 +0000)]
mon: Deny EC optimizations (fast EC) for non-4k-aligned chunk-sizes.

There are some bugs in the way Fast EC handles non 4k-aligned chunk sizes.

Such chunk sizes are buggy and even if they did work, the performance
would not be very good.  Storage efficiency is also not helped by these
unusual encodings.

This commit will reject any attempt to turn optimizations (fast EC) on.

If the default is set to turn optimizations on, then this will be ignored
if the profile is not 4k aligned.

Note that to create a profile in the first place requires a --force override.

Fixes: https://tracker.ceph.com/issues/74813
Signed-off-by: Alex Ainscow <aainscow@uk.ibm.com>
(cherry picked from commit 442b45295f707b8d155caf5d1d51afd4664900db)

2 months agodebian: remove invoke-rc.d calls from postrm scripts 67354/head
Kefu Chai [Fri, 21 Nov 2025 11:50:26 +0000 (19:50 +0800)]
debian: remove invoke-rc.d calls from postrm scripts

Previously, we called "invoke-rc.d ceph stop" in postrm scripts to
support sysvinit-based installations. However, this fails on systemd-
based systems, which are now the default on modern Debian distributions.

When invoke-rc.d detects systemd as the init system, it delegates to
systemctl, converting "invoke-rc.d ceph stop" to "systemctl stop
ceph.service". Since Ceph provides ceph.target and template units
(ceph-osd@.service, ceph-mon@.service, etc.) rather than a monolithic
ceph.service, this command always fails with exit code 5
(LSB EXIT_NOTINSTALLED).

This failure prevents the auto-generated cleanup sections added by
debhelper from executing properly, which can leave the system in an
inconsistent state during package removal.

Changes:

- Remove the invoke-rc.d call entirely. Systemd will handle service
  cleanup through its own mechanisms when the package is removed.
- Remove redundant "exit 0" statement (the script exits successfully
  by default, and "set -e" is no longer needed without commands that
  might fail).
- Remove vim modeline comment, as it's unnecessary for a 3-line script.
- Eventually remove this 3-line script stanza, as this is exactly what
  debhelper provides us.

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
(cherry picked from commit 4f48af0d01472453b9388732fcd10997ee893929)

2 months agoqa/multisite: use boto3's ClientError in place of assert_raises from tools.py. 67318/head
Shilpa Jagannath [Tue, 3 Feb 2026 05:15:46 +0000 (00:15 -0500)]
qa/multisite: use boto3's ClientError in place of assert_raises from tools.py.

tools.py should eventually be removed once all other dependent tests move to boto3

Signed-off-by: Shilpa Jagannath <smanjara@redhat.com>
(cherry picked from commit 3d08847abc44e2c09e1ca7fa8a2fbadb32332303)

Conflicts:
src/test/rgw/rgw_multi/tests.py
 - Assert changes
 - We still don't replicate object locks in tentacle
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
2 months agoqa/multisite: test fixes
Shilpa Jagannath [Wed, 28 Jan 2026 00:04:19 +0000 (19:04 -0500)]
qa/multisite: test fixes

Signed-off-by: Shilpa Jagannath <smanjara@redhat.com>
(cherry picked from commit 90eb0612fd83547b20a1e1eeae8f2384526be508)
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
2 months agoqa/multisite: boto3 in tests.py
Shilpa Jagannath [Wed, 21 Jan 2026 23:54:55 +0000 (18:54 -0500)]
qa/multisite: boto3 in tests.py

Signed-off-by: Shilpa Jagannath <smanjara@redhat.com>
(cherry picked from commit 3438add3fc9e086da6313830e697e6a987893f3c)

Conflicts:
src/test/rgw/rgw_multi/tests.py
 - Whitespace and other drift
 - Tentacle doesn't sync object locks
 - `test_suspended_delete_marker_incremental_sync` is a new test but
   not a new behavior.

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
2 months agoqa/multisite: zone files use boto3 resource api
Shilpa Jagannath [Wed, 21 Jan 2026 06:50:01 +0000 (01:50 -0500)]
qa/multisite: zone files use boto3 resource api

Signed-off-by: Shilpa Jagannath <smanjara@redhat.com>
(cherry picked from commit 47ad27cb2f373ee5057a8b2fd1acaaa5073729b7)
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
2 months agoqa/multisite: switch to boto3 in multisite test libraries
Shilpa Jagannath [Tue, 20 Jan 2026 23:42:30 +0000 (18:42 -0500)]
qa/multisite: switch to boto3 in multisite test libraries

Signed-off-by: Shilpa Jagannath <smanjara@redhat.com>
(cherry picked from commit c84efd9af5a4e2845745285ada994aad072eb2a0)
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
2 months agoMerge PR #67279 into tentacle
Patrick Donnelly [Fri, 13 Feb 2026 19:38:54 +0000 (14:38 -0500)]
Merge PR #67279 into tentacle

* refs/pull/67279/head:
librbd: introduce RBD_LOCK_MODE_EXCLUSIVE_TRANSIENT
librbd: prepare lock_acquire() for changing between policies
librbd: fix RequestLockPayload log message in ImageWatcher
librbd: amend error message in lock_acquire()

Reviewed-by: Ramana Raja <rraja@redhat.com>
2 months agoMerge PR #67226 into tentacle
Patrick Donnelly [Fri, 13 Feb 2026 15:21:44 +0000 (10:21 -0500)]
Merge PR #67226 into tentacle

* refs/pull/67226/head:
qa/standalone/availability.sh: retry after feature is turned on

Reviewed-by: Kamoltat Sirivadhna <ksirivad@redhat.com>
2 months agoMerge PR #66839 into tentacle
Patrick Donnelly [Fri, 13 Feb 2026 15:19:44 +0000 (10:19 -0500)]
Merge PR #66839 into tentacle

* refs/pull/66839/head:
vstart.sh: revert unintended allocator type change
os/bluestore: introduce allocator lookup policy
os/bluestore: add free space spatial histogram to adminsock

Reviewed-by: Adam Kupczyk <akupczyk@redhat.com>
2 months agoMerge PR #66611 into tentacle
Patrick Donnelly [Fri, 13 Feb 2026 15:18:17 +0000 (10:18 -0500)]
Merge PR #66611 into tentacle

* refs/pull/66611/head:
Revert "PrimeryLogPG: don't accept ops with mixed balance_reads and rwordered flags"

Reviewed-by: Greg Farnum <gfarnum@redhat.com>
Reviewed-by: Samuel Just <sjust@redhat.com>
2 months agoMerge PR #67283 into tentacle
Patrick Donnelly [Fri, 13 Feb 2026 15:14:27 +0000 (10:14 -0500)]
Merge PR #67283 into tentacle

* refs/pull/67283/head:
qa/tasks/qemu: adjust NFS service name for Rocky 10
qa/tasks/qemu: install genisoimage package

Reviewed-by: Ramana Raja <rraja@redhat.com>
2 months agoMerge PR #67282 into tentacle
Patrick Donnelly [Fri, 13 Feb 2026 15:13:51 +0000 (10:13 -0500)]
Merge PR #67282 into tentacle

* refs/pull/67282/head:
qa/workunits/rbd: use the same qemu-iotests version throughout

Reviewed-by: Ramana Raja <rraja@redhat.com>
2 months agoMerge PR #67281 into tentacle
Patrick Donnelly [Fri, 13 Feb 2026 15:13:18 +0000 (10:13 -0500)]
Merge PR #67281 into tentacle

* refs/pull/67281/head:
qa/valgrind.supp: make gcm_cipher_internal suppression more resilient

Reviewed-by: Casey Bodley <cbodley@redhat.com>
2 months agolibrbd: introduce RBD_LOCK_MODE_EXCLUSIVE_TRANSIENT 67279/head
Ilya Dryomov [Tue, 23 Dec 2025 13:27:18 +0000 (14:27 +0100)]
librbd: introduce RBD_LOCK_MODE_EXCLUSIVE_TRANSIENT

The existing StandardPolicy that exposed as RBD_LOCK_MODE_EXCLUSIVE
argument to rbd_lock_acquire() disables automatic exclusive lock
transitions with "permanent" semantics: any request to release the lock
causes the peer to error out immediately.  Such a lock owner can
perform maintenance operations that are proxied from other peers, but
any write-like I/O issued by other peers will fail with EROFS.

This isn't suitable for use cases where one of the peers wants to
manage exclusive lock manually (i.e. rbd_lock_acquire() is used) but
the lock is acquired only for very short periods of time.  The rest of
the time the lock is expected to be held by other peers that stay in
the default "auto" mode (AutomaticPolicy) and run as usual, completely
unconcerned with each other or the manual-mode peer.  However, these
peers get acutely aware of the manual-mode peer because when it grabs
the lock with RBD_LOCK_MODE_EXCLUSIVE their I/O gets disrupted: higher
layers translate EROFS into generic EIO, filesystems shut down, etc.

Add a new TransientPolicy exposed as RBD_LOCK_MODE_EXCLUSIVE_TRANSIENT
to allow disabling automatic exclusive lock transitions with semantics
that would cause the other peers to block waiting for the lock to be
released by the manual-mode peer.  This is intended to be a low-level
interface -- no attempt to safeguard against potential misuse causing
e.g. indefinite blocking is made.

It's possible to switch between RBD_LOCK_MODE_EXCLUSIVE and
RBD_LOCK_MODE_EXCLUSIVE_TRANSIENT modes of operation both while the
lock is held and after it's released.

Fixes: https://tracker.ceph.com/issues/73824
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 8740544c51781211b82ac45d4bc93b9eb9623e76)

2 months agolibrbd: prepare lock_acquire() for changing between policies
Ilya Dryomov [Mon, 19 Jan 2026 16:43:41 +0000 (17:43 +0100)]
librbd: prepare lock_acquire() for changing between policies

In preparation for adding a new TransientPolicy, get rid of the check
implemented in terms of exclusive_lock::Policy::may_auto_request_lock()
that essentially makes it so that exclusive lock policy on a given
image handle can be changed from the default AutomaticPolicy only once.
In order to effect another change a new image handle would have been
needed which is pretty suboptimal.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 1f9396ff8208accdf334c088745d2734225b34c1)

2 months agolibrbd: fix RequestLockPayload log message in ImageWatcher
Ilya Dryomov [Mon, 22 Dec 2025 18:07:27 +0000 (19:07 +0100)]
librbd: fix RequestLockPayload log message in ImageWatcher

exclusive_lock::Policy::lock_requested() isn't guaranteed to queue
the release of exclusive lock (and in fact only one of the two existing
implementations does that).  Instead of talking about the lock, log the
response to the notification.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit ff89abf5ddcca91c34cfd46d288d41fe93ec38b0)

2 months agolibrbd: amend error message in lock_acquire()
Ilya Dryomov [Mon, 22 Dec 2025 16:22:53 +0000 (17:22 +0100)]
librbd: amend error message in lock_acquire()

... since it went stale with commit 2914eef50d69 ("rbd: Changed
exclusive-lock implementation to use the new managed-lock").  In the
context of exclusive lock, requesting the lock refers to a specific
action which may or may not be performed as part of acquiring the lock
and lock_acquire() doesn't get visibility into that.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 9159a2dd032bf47a030260660ff64b5be2d72648)

2 months agoqa/valgrind.supp: make gcm_cipher_internal suppression more resilient 67281/head
Ilya Dryomov [Tue, 11 Nov 2025 20:39:58 +0000 (21:39 +0100)]
qa/valgrind.supp: make gcm_cipher_internal suppression more resilient

gcm_cipher_internal() and ossl_gcm_stream_final() make it to the stack
trace only on CentOS Stream 9.  On Ubuntu 22.04 and Rocky 10, it looks
as follows:

Thread 4 msgr-worker-1:
Conditional jump or move depends on uninitialised value(s)
   at 0x70A36D4: ??? (in /usr/lib64/libcrypto.so.3.2.2)
   by 0x70A39A1: ??? (in /usr/lib64/libcrypto.so.3.2.2)
   by 0x6F8A09C: EVP_DecryptFinal_ex (in /usr/lib64/libcrypto.so.3.2.2)
   by 0xB498C1F: ceph::crypto::onwire::AES128GCM_OnWireRxHandler::authenticated_decrypt_update_final(ceph::buffer::v15_2_0::list&) (crypto_onwire.cc:271)
   by 0xB4992D7: ceph::msgr::v2::FrameAssembler::disassemble_preamble(ceph::buffer::v15_2_0::list&) (frames_v2.cc:281)
   by 0xB482D98: ProtocolV2::handle_read_frame_preamble_main(std::unique_ptr<ceph::buffer::v15_2_0::ptr_node, ceph::buffer::v15_2_0::ptr_node::disposer>&&, int) (ProtocolV2.cc:1149)
   by 0xB475318: ProtocolV2::run_continuation(Ct<ProtocolV2>&) (ProtocolV2.cc:54)
   by 0xB457012: AsyncConnection::process() (AsyncConnection.cc:495)
   by 0xB49E61A: EventCenter::process_events(unsigned int, std::chrono::duration<unsigned long, std::ratio<1l, 1000000000l> >*) (Event.cc:492)
   by 0xB49EA9D: UnknownInlinedFun (Stack.cc:50)
   by 0xB49EA9D: UnknownInlinedFun (invoke.h:61)
   by 0xB49EA9D: UnknownInlinedFun (invoke.h:111)
   by 0xB49EA9D: std::_Function_handler<void (), NetworkStack::add_thread(Worker*)::{lambda()#1}>::_M_invoke(std::_Any_data const&) (std_function.h:290)
   by 0xBB11063: ??? (in /usr/lib64/libstdc++.so.6.0.33)
   by 0x4F17119: start_thread (in /usr/lib64/libc.so.6)

The proposal to amend the existing suppression so that it's tied to the
specific callsite rather than libcrypto internals [1] received a thumbs
up from Radoslaw.

[1] https://github.com/ceph/ceph/pull/61689#issuecomment-2650179891

Fixes: https://tracker.ceph.com/issues/74672
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit d85265eab4f9344f0d08330f737ce9d7be32d716)

2 months agoqa/workunits/rbd: use the same qemu-iotests version throughout 67282/head
Ilya Dryomov [Thu, 29 Jan 2026 20:25:55 +0000 (21:25 +0100)]
qa/workunits/rbd: use the same qemu-iotests version throughout

"platform:el10" could be appended to the grep pattern for v2.11.0 but
we no longer test on any distro needing v2.3.0 or v2.2.0-rc3.

Fixes: https://tracker.ceph.com/issues/74671
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
(cherry picked from commit 825ec0d9bb21140b8732257bbe45503179790ef7)