Compare commits

...

440 Commits

Author SHA1 Message Date
Kotresh HR
35a74f4d80 qa: Validate sync-stat omap removal on peer_remove and disable mirroring
Fixes: https://tracker.ceph.com/issues/78464
Signed-off-by: Kotresh HR <khiremat@redhat.com>
2026-08-02 00:07:28 +05:30
Kotresh HR
46e0a5a79c tools/cephfs_mirror: Remove sync-stat omap metrics on peer remove and mirror disable
Remove persisted sync-stat omap entries when a peer is removed or
mirroring is disabled for a filesystem, since those peer UUIDs are not
reused. Preserve omap on internal blocklist/failure restarts so sync
can resume where it left off.

Also update the relevant documentation

Fixes: https://tracker.ceph.com/issues/78464
Signed-off-by: Kotresh HR <khiremat@redhat.com>
2026-08-02 00:07:28 +05:30
Shilpa Jagannath
8482cb11bc
Merge pull request #70510 from smanjara/wip-shilpa-test_zonegroup_rename
qa/tests: fix flaky multisite tests
2026-07-31 10:20:58 -07:00
John Mulligan
ac9a88d3ed
Merge pull request #70679 from phlogistonjohn/jjm-smb-etc-altpaths
smb: support altpaths for updating non-AD users/groups live while a cluster is running

Reviewed-by: Anoop C S <anoopcs@cryptolab.net>
Reviewed-by: Avan Thakkar <athakkar@redhat.com>
2026-07-31 10:09:31 -04:00
Jaya Prakash
3434180fc5
Merge pull request #70492 from Jayaprakash-ibm/wip-jaya-spl-clr-docs-ext
doc/rados/bluestore: Documentation for Interpreting spillover cleaner stats

Reviewed-by: Adam Kupczyk <akupczyk@ibm.com>
2026-07-31 18:59:17 +05:30
Ilya Dryomov
2caabd7a28
Merge pull request #70729 from ivancich/wip-fix-ceph-spec-in
rgw: revert debian portion of update build config to streamline builds

Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
2026-07-31 14:01:47 +02:00
Jaya Prakash
2c452108d3 doc/rados/bluestore: Documentation for Interpreting spillover cleaner stats
Signed-off-by: Jaya Prakash <jayaprakash@ibm.com>
2026-07-31 16:59:09 +05:30
Nizamudeen A
0152782bfe
Merge pull request #70723 from rhcs-dashboard/rename-tab
mgr/dashboard: Title says "Gateways" but it displays gateway group names in NVME/TCP

Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-31 14:46:44 +05:30
Ilya Dryomov
b1c466c2eb
Merge pull request #70086 from VinayBhaskar-V/wip-group-image-list
librbd: propagate ENOENT for non-existent groups and images

Reviewed-by: Ramana Raja <rraja@redhat.com>
Reviewed-by: Ilya Dryomov <idryomov@gmail.com>
2026-07-31 11:14:08 +02:00
J. Eric Ivancich
cdbd4dabe9 rgw: revert debian portion of update build config to streamline builds
The debian portion broke the build. Reverting a portion of
c3c4a139ad.

Signed-off-by: J. Eric Ivancich <ivancich@redhat.com>
2026-07-30 14:31:54 -04:00
pujashahu
0323ff2141 mgr/dashboard: Title says "Gateways" but it displays gateway group names in NVME/TCP
Fixes: https://tracker.ceph.com/issues/75443
Signed-off-by: pujaoshahu <pshahu@redhat.com>
2026-07-30 21:35:18 +05:30
Gil Bregman
3d9aa9f329
Merge pull request #70705 from gbregman/main
mgr/dashboard: Add --keep-connections parameter to NVMEoF CLI
2026-07-30 16:32:14 +03:00
Patrick Donnelly
218983d0cf
Merge PR #70689 into main
* refs/pull/70689/head:
	.github/workflows: switch to pull_request_target trigger

Reviewed-by: Yuri Weinstein <yweins@redhat.com>
2026-07-30 09:29:44 -04:00
Patrick Donnelly
31519526f7
Merge PR #70690 into main
* refs/pull/70690/head:
	.github/workflows: switch to pull_request_target trigger

Reviewed-by: Yuri Weinstein <yweins@redhat.com>
2026-07-30 09:29:20 -04:00
Patrick Donnelly
c2afa96e8e
Merge PR #70695 into main
* refs/pull/70695/head:
	.githubmap: add myself

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-30 09:15:08 -04:00
Patrick Donnelly
beccebe2e8
Merge PR #70683 into main
* refs/pull/70683/head:
	script/ptl-tool: add 'crimson', 'build/ops', 'common', 'tests' to SUPPORTED_QA_TAGS

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-30 08:30:37 -04:00
Gil Bregman
fd39161c7f mgr/dashboard: Add --keep-connections parameter to NVMEoF CLI
Fixes: https://tracker.ceph.com/issues/78833

Signed-off-by: Gil Bregman <gbregman@il.ibm.com>
2026-07-30 14:56:12 +03:00
Venky Shankar
6beaf71d96 Merge PR #69835 into main
* refs/pull/69835/head:
	mds/Server: return after responding on error paths

Reviewed-by: Kefu Chai <k.chai@proxmox.com>
Reviewed-by: Venky Shankar <vshankar@redhat.com>
2026-07-30 14:01:37 +05:30
Alexander Indenbaum
660ba02205 .githubmap: add myself
Signed-off-by: Alexander Indenbaum <aindenba@redhat.com>
2026-07-30 10:41:40 +03:00
bluikko
4e380d304b
Merge pull request #70663 from bluikko/wip-doc-install-ref-links
doc/install: use ref for intra-docs links
2026-07-30 12:00:47 +07:00
Kotresh HR
10292cc86f Merge PR #70212 into main
* refs/pull/70212/head:
	qa/cephfs-mirror: Fix tests for ISO sync_time_stamp
	doc/cephfs-mirroring: document ISO-8601 sync timestamps
	cephfs_mirror: format sync timestamps as ISO-8601 local time
	tools/cephfs-mirror: report epoch time in last snap sync time

Reviewed-by: Karthik U S <karthik.u.s1@ibm.com>
2026-07-30 09:28:12 +05:30
Xuehan Xu
ab4a964a1c
Merge pull request #56650 from zhscn/dev-lbc
crimson/os/seastore: introduce logical bucket cache

Reviewed-by: Matan Breizman <mbreizma@redhat.com>
Reviewed-by: Kefu Chai <k.chai@proxmox.com>
Reviewed-by: Anthony D'Atri <anthony.datri@gmail.com>
2026-07-31 11:28:31 +08:00
Xuehan Xu
b8f9beb9c1 crimson/os/seastore/transaction_manager: don't demote dirty extents
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:20 +08:00
Xuehan Xu
6b6c8d4da3 crimson/os/seastore/transaction_manager: allow non-existing lba regions
when demoting them

It is possible that, when we do demote_region, the target region has
already been removed from the lba tree, for example, a temp recovering
object might have already been renamed to the real one, which means all
lba mappings within its original region have been moved away.

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:20 +08:00
Xuehan Xu
e89e2104a8 crimson/os/seastore/epm: reserve the space in the cold tier before
demoting

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:20 +08:00
Xuehan Xu
528bba37b9 crimson/os/seastore/epm: add try_reserve_main and abort_main_usage
As the counterpart of try_reserve_cold and abort_cold_usage

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:20 +08:00
Xuehan Xu
953710c5e6 crimson/os/seastore/transaction_manager: add the shadow to the trans'
read_set when getting extents

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:20 +08:00
Xuehan Xu
ba0655657c crimson/os/seastore/transaction: mutation_pending extents' paddrs should
be on the same device as the stable prior's old paddr

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:20 +08:00
Xuehan Xu
64263d609d crimson/os/seastore/journal/segmented_journal: scan the journal for the
allocation map on boot if the cold tier is an RBM one

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:20 +08:00
Xuehan Xu
acdb292361 crimson/os/seastore/journal: refactor SegmentedJournal::replay() to
adapt to Journal::scan_valid_record_delta()

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:20 +08:00
Xuehan Xu
f56b2a5f42 crimson/os/seastore/journal: coroutinize SegmentedJournal::replay()
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:20 +08:00
Xuehan Xu
aad3524f7a crimson/os/seastore/journal: lift the alloc_map scanning from CircularBoundedJournal to Journal
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
92a569aa4a crimson/os/seastore/btree: define fmt::formatter for lba_val_map_t in
btree_types.h

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
aba5a77872 crimson/os/seastore/lba: make sure all mappings in the copied range is
examined when updating paddrs for the copied mappings

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
b899ade928 crimson/os/seastore/lba: add more rigorous assertions
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
f18fe72baa crimson/os/seastore/transaction_manager: indicate the extents as COLD
when demoting them

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
43f048c81e crimson/os/seastore/epm: avoid adjust generation for eviction if the
main device is not SEGMENTED

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
0a0a7e3da0 crimson/os/seastore/cache: allow LogNode to be remapped
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
a4f338e77f crimson/os/seastore: also update lba mappings' shadow fields when
updating paddr synchronously

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
6db2d97c74 crimson/os/seastore/lba: merge the whole mapping into the delta
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
e141ac3f38 crimson/os/seastore/extent_pinboard: don't add extents under promotion
to cache

This is to avoid an under-promotion extent from being added back to and
evicted from the cache again before the promotion ends.

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
a5693801a6 crimson/os/seastore/lba,TM: remove shadows when trimming dirty non-data
extents

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
a9220d9470 crimson/os/seastore/cached_extent: let pending cached extents hold pointers to the transactions
This is necessary for the promote transaction to find the transactions
that are retiring the extents promoted

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
e3c1baf8c8 crimson/os/seastore: demote/promote background processes are also
rewrite transactions

So we need to merge the extents promoted/demoted with their counterparts
in client transactions, just like trim/cleaner transaction do.

The difference between demote/promote transactions and trim/cleaner
transactions is that the former also involves remapping extents while the
latter only involves rewriting and mutating extents.

With the logical bucket cache in place, all rewrite transactions need to
handle shadow extents carafully, too.

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
eeba1411a2 crimson/os/seastore/transaction_manager: wait for the demotion when the
rbm main device is not enough

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
e4979f98ed crimson/os/seastore: drop backref when all backends are RBMs
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
c8769a0f34 qa/config/crimson_qa_overrides.yaml: add test workload for LBC
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
660c7d86f4 crimson/os/seastore/cache: count promote/demote related metrics
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
c48848ba9f test/crimson/seastore/test_transaction_manager: the scatter_allocation case shouldn't submit the trans
In scatter_allocation, an extent is split into several
small ones, and the last allocation is supposed to fail,
in which case, the small extents that belong to the same
allocation wouldn't be attached to the parent lba leaf
node. Sumitting the transaction would trigger assertions,
and is not consistent with the behavior of nornal crimson
OSDs.

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Zhang Song
5314e38d39 crimson/os/seastore: add test workload to promote/evict aggressively
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Xuehan Xu
d86fb5fd80 crimson/os/seastore/random_block_manager: try to allocate consecutive rbm space when rewriting extents
Add the address of the last allocation as the hint to the current round
of allocation in rbm

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Zhang Song
eb9e9b9d06 crimson/os/seastore/cache: add hit ratio metric
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Zhang Song
2a5257a04c crimson/os/seastore: make cold rbm cleaner use different metric prefix
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Zhang Song
a8b0baca91 crimson/os/seastore: allow RBM backend as hot tier
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Zhang Song
c969a8b9b5 crimson/os/seastore: update logical bucket cache when processing
read/write transactions

All client accessed extents are to be tracked by logical bucket cache
before eviction

Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Zhang Song
afde4c6dcb crimson/os/seastore: add write through policy
Write extents larger than some threshold to the cold tier directly

Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Zhang Song
43d0b3316a crimson/osd: create cold devices when mkfs
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-31 09:40:19 +08:00
Afreen Misbah
3e1c41c193
Merge pull request #70621 from rhcs-dashboard/fix-IBMCEPH-16202
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-31 03:07:40 +05:30
Afreen Misbah
386cd71173
Merge pull request #70558 from rhcs-dashboard/rgw-user-form-fix
Reviewed-by: Afreen Misbah <afreen@ibm.com>
Reviewed-by: Nizamudeen A <nia@redhat.com>
2026-07-31 03:07:16 +05:30
Afreen Misbah
de09de6004
Merge pull request #70655 from rhcs-dashboard/fix-78823
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-31 03:06:35 +05:30
Afreen Misbah
1066090245
Merge pull request #70643 from rhcs-dashboard/fix-pool-deletion
mgr/dashboard: Pool deletion enhancements

Reviewed-by: Afreen Misbah <afreen@ibm.com>
Reviewed-by: Naman Munet <nmunet@redhat.com>
2026-07-31 01:10:41 +05:30
Patrick Donnelly
413f3e7590
Merge PR #70721 into main
* refs/pull/70721/head:
	doc/dev: update release checklist for github automations

Reviewed-by: Yuri Weinstein <yweins@redhat.com>
2026-07-30 15:24:28 -04:00
John Mulligan
2569c8bd8b
Merge pull request #70684 from phlogistonjohn/jjm-grpc-sock-len
python-common/smb: work around socket path length limits for grpc lib

Reviewed-by: Anoop C S <anoopcs@cryptolab.net>
Reviewed-by: Avan Thakkar <athakkar@redhat.com>
2026-07-30 14:19:33 -04:00
Patrick Donnelly
0b3995d9cc
Merge PR #70717 into main
* refs/pull/70717/head:
	.github/workflows/pr-checklist: switch to pull_request_target and scope permissions

Reviewed-by: Yuri Weinstein <yweins@redhat.com>
2026-07-30 13:37:05 -04:00
Afreen Misbah
d0add82594 mgr/dashboard: Pool deletion enhancements
Admin role:
- show confirmation modal that pool deletion is disabled
- allow enabling pool deletion
- fix pool deletion text

Pool mgr role
- show a modal that pool deletion is disabled

Signed-off-by: Afreen Misbah <afreen@ibm.com>
2026-07-30 21:48:01 +05:30
Patrick Donnelly
35c5193cd3
doc/dev: update release checklist for github automations
Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-30 11:09:46 -04:00
Patrick Donnelly
35060603bc
.github/workflows/pr-checklist: switch to pull_request_target and scope permissions
To make `main` the authoritative workflow source.

Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-30 10:55:51 -04:00
J. Eric Ivancich
92cef49cde
Merge pull request #70483 from gardran/wip-gardran-fix-78491
rgw/rados/rgw_sync: fix unintended uint64_t->int conversion

Reviewed-by: Adam C. Emerson <aemerson@redhat.com>
2026-07-30 10:40:34 -04:00
Naman Munet
b9fccdffd2 mgr/dashboard: Add required field validation for managed policies in account user creation
fixes: https://tracker-origin.ceph.com/issues/78684

Signed-off-by: Naman Munet <naman.munet@ibm.com>
2026-07-30 16:09:47 +05:30
Sagar Gopale
5bab45c606 mgr/dashboard: hide number spinners for fixed priority values
Fixes: https://tracker.ceph.com/issues/78823
Signed-off-by: Sagar Gopale <sagar.gopale@ibm.com>
2026-07-30 14:07:55 +05:30
Sagar Gopale
4adc02dffb mgr/dashboard: Fix password form validation mismatch errors
Fixes: https://tracker.ceph.com/issues/78781

Signed-off-by: Sagar Gopale <sagar.gopale@ibm.com>
2026-07-30 12:07:13 +05:30
Zhang Song
98f1892fb6 crimson/os/seastore: throttle bandwidth to secondary devices
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:27 +08:00
Zhang Song
223dde6bab crimson/os/seastore: introduce RotationalDevice
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:27 +08:00
Zhang Song
eca32e1fa9 crimson/os/seastore: set backend type explicitly
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:27 +08:00
Zhang Song
051db088b3 crimson/os/seastore/EPM/BackgroundProcess: add promote and demote process
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:27 +08:00
Zhang Song
91eb5d2a9c crimson/os/seastore/EPM: initialize logical bucket and pinboard
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:27 +08:00
Zhang Song
c7b3fd1350 crimson/os/seastore: don't add shadow extent to cache
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:26 +08:00
Zhang Song
3f2b958478 crimson/os/seastore: avoid evicting promoted extent to the cold tier
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:26 +08:00
Zhang Song
d088cfc46d crimson/os/seastore: consolidate parameters on extent allocation path
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:26 +08:00
Zhang Song
1af4a97792 crimson/os/seastore: implement demote region
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:26 +08:00
Zhang Song
c3e971a84c crimson/os/seastore: implement promote extent
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:26 +08:00
Zhang Song
ad7469ca59 crimson/os/seastore/lba: introduce shadow paddr
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:26 +08:00
Zhang Song
671b1b4ffc crimson/os/seastore: introduce logical bucket and demote process
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:26 +08:00
Zhang Song
2d629af107 crimson/os/seastore: support promote extents purged from pinboard
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:26 +08:00
Zhang Song
6c526c811b crimson/os/seastore: rename extent_2q_state_t to extent_pin_state_t
This is because, even for LRU caches, extents still have pin states,
although it's only Fresh. What's more, in the logical bucket cache
world, extents in both LRU and 2Q caches may be in the
Fresh/PendingPromote/Promoting state.

Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:26 +08:00
Zhang Song
ece1a68497 crimson/os/seastore: introduce PROMOTE and DEMOTE transaction type
Signed-off-by: Zhang Song <zhangsong02@qianxin.com>
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:26 +08:00
Xuehan Xu
f17f12b4a1 doc/dev/crimson: add design the document for LogicalBucketCache
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-30 10:12:26 +08:00
Patrick Donnelly
9336dcba48
.github/workflows: switch to pull_request_target trigger
Switch the trigger from `pull_request` to `pull_request_target` so that
the workflow definition on `main` is evaluated for PRs targeting active
release branches (main, umbrella, tentacle, squid). This allows the check
to run cleanly across release branches without requiring workflow file
backports to each branch.

Additionally:
- Update `src/script/verify-qa` to accept an optional target directory argument ($1).
- Run the trusted `verify-qa` script from `main` against the checked-out PR directory (`./pull_request`).

The concern of exfiltrating secrets is important but not relevant here:
we're not using the secrets in the definition and we explicitly
downgrade the github token to `read` permission.

Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-29 21:05:05 -04:00
Patrick Donnelly
71ddab8e32
.github/workflows: switch to pull_request_target trigger
Switch the trigger from `pull_request` to `pull_request_target` so that
the workflow definition on `main` is evaluated for PRs targeting active
release branches (main, umbrella, tentacle, squid). This allows the check
to run cleanly across release branches without requiring workflow file
backports to each branch.

While this workflow passes `github.token`, the token permissions are
strictly restricted to read-only (`contents: read` and `pull-requests: read`).
Because no PR code is checked out or executed, using `pull_request_target`
presents zero security risk here.

Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-29 20:43:02 -04:00
John Mulligan
144c6e8f76 python-common/smb: work around socket path length limits for grpc lib
The grpc library (at least the version on centos/rocky 10) has a limit
of 107 characters. Even a fairly short host name is going to be close
to this limit due to the UUID and service name in the path.

Because the tool doesn't do much else and it is safe, the workaround is
to chdir to into the parent dir of the socket and only pass the relative
path name of socket.

Fixes: https://tracker.ceph.com/issues/78857
Signed-off-by: John Mulligan <jmulligan@redhat.com>
2026-07-29 17:53:50 -04:00
Yuri Weinstein
4705abd056 script/ptl-tool: add 'crimson', 'build/ops', 'common', 'tests' to SUPPORTED_QA_TAGS
PRs carrying these GitHub labels were silently dropped from both the
QA tracker's PR "Labels" column and the Redmine ticket's tag_list,
since SUPPORTED_QA_TAGS is a fixed whitelist and these were never
added to it despite being real, actively-used component/category
labels (e.g. ceph/ceph#70661, #70658 for crimson).

Signed-off-by: Yuri Weinstein <yweinste@redhat.com>
2026-07-29 14:21:21 -07:00
John Mulligan
0a6d0cb043 cephadm: update how smb configwatch sidecar is started
In order to update users (and groups) live without AD support we need
the configwatch sidecar to be configured for split (altfiles) nsswitch.
The capability to configure configwatch for nsswitch was added to
sambacc under a special mode of the run subcommand.
Switch to starting the confgwatch sidecar using the run subcommand and
configuring the appropriate user and nsswitch setup options.

Signed-off-by: John Mulligan <jmulligan@redhat.com>
2026-07-29 16:00:01 -04:00
John Mulligan
8026e6941c cephadm: update smb env to specify writable shared passwd/group files
Update environment for smb containers to specify arguments that sambacc
will use to configure the containers for a split configuration for
users (passwd) and group files. The writable copy will be store in
the samba state dir (/var/lib/samba in the container) and be shared
across the primary and sidecar containers so that configwatch can
pull new users and groups lists from ceph and apply them live.

Signed-off-by: John Mulligan <jmulligan@redhat.com>
2026-07-29 16:00:01 -04:00
mheler
e82ccd0873
Merge pull request #70051 from mheler/wip-copyobject-replace 2026-07-29 13:30:53 -05:00
bluikko
2dcf7a1267
Merge pull request #70659 from bluikko/wip-doc-cephadm-install-substitutions
doc/cephadm: enable substitutions on CLI command example
2026-07-29 23:05:19 +07:00
Casey Bodley
bd3a488a1f
Merge pull request #69533 from qiuxinyidian/main
rgw:adding bucket index Indexless check when bi list

Reviewed-by: Casey Bodley <cbodley@redhat.com>
2026-07-29 11:44:29 -04:00
VinayBhaskar-V
c4c937d81c librbd: propagate ENOENT for non-existent groups and images
Calling `list_images()` on a non-existent group falsely succeeded and
returned an empty iterator.This happened because `Group<I>::image_list`
ignored the negative error code returned by `group_image_list`, allowing
execution to proceed blindly. Furthermore, the C API `rbd_group_image_list`
intercepted `-ENOENT` and forced a success (0) return value.

Similarly other public C APIs `rbd_snap_list` and `rbd_group_snap_list`
also intercepts -ENOENT and forces a success (0) return value which
is incorrect.

Fix these behavior by:
- Propagating errors properly inside `Group<I>::image_list`.
- Removing the incorrect `-ENOENT` masking in `rbd_group_image_list`,
`rbd_snap_list`, rbd_group_snap_list`

Now `list_images()` consistently raise an `ObjectNotFound` error when
invoked on a non-existent group and public C APIs propagate ENOENT
without masking it into 0.
Also Extended the `TestGroups` test fixture with `self.dne_group` to
validate the expected error paths across all relevant APIs.

Fixes: https://tracker.ceph.com/issues/78108
Signed-off-by: VinayBhaskar-V <vvarada@redhat.com>
2026-07-29 19:11:14 +05:30
Afreen Misbah
25187a4389
Merge pull request #70097 from tchaikov/wip-mgr-testcase-single-bounce
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-29 18:26:36 +05:30
Afreen Misbah
51131eb3d9
Merge pull request #70515 from rhcs-dashboard/fix-17067
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-29 18:26:28 +05:30
Pedro Gonzalez Gomez
0bb0d59a85
Merge pull request #70604 from rhcs-dashboard/service-form-text-label-fix
mgr/dashboard: fix cd-text-label-list string writeValue

Reviewed-by: Nizamudeen A <nia@redhat.com>
2026-07-29 14:11:46 +02:00
Ville Ojamo
3fe15c1f71 doc/install: use ref for intra-docs links
Use ref instead of external link definitions for intra-docs links.
Add labels if necessary in files within the install/ directory. Use
existing labels for links outside the install/ directory but do not add
new labels outside of the install/ directory.

Signed-off-by: Ville Ojamo <git2233+ceph@ojamo.eu>
2026-07-29 17:24:56 +07:00
Ville Ojamo
872d3bd14c doc/cephadm: enable substitutions on CLI command example
Substitutions were not enabled on a prompt directive that tried to use
the stable-release substitution so the substitution string was rendered
verbatim.

Signed-off-by: Ville Ojamo <git2233+ceph@ojamo.eu>
2026-07-29 16:40:54 +07:00
Afreen Misbah
66a1de3eff
Merge pull request #70625 from rhcs-dashboard/fix/dashboard-gzip-mime-type
mgr/dashboard: add text/javascript to gzip mime types

Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-29 15:07:01 +05:30
Afreen Misbah
a5803a5ed5
Merge pull request #70606 from rhcs-dashboard/add-doc-url
mgr/dashboard: Add alerts doc url to active alert list


Reviewed-by: Aashish Sharma <aasharma@redhat.com>
2026-07-29 13:32:30 +05:30
Venky Shankar
c748ba8b79
Merge pull request #68519 from edwinzrodriguez/cephfs-bench
cephfs-tool: Improve reporting and config options

Reviewed-by: Venky Shankar <vshankar@redhat.com>
2026-07-29 13:09:51 +05:30
Guillaume Abrioux
4d26ec1395
Merge pull request #70486 from guits/fix-nvme-reformat
ceph-volume: fix nvme preformat wiping VG on osds-per-device > 1
2026-07-29 09:34:24 +02:00
Pedro Gonzalez Gomez
851ca4c75c
Merge pull request #70603 from rhcs-dashboard/snap-edit-fix
mgr/dashboard: fix snap schedule startDate

Reviewed-by: Afreen Misbah <afreen@ibm.com>
Reviewed-by: Nizamudeen A <nia@redhat.com>
2026-07-29 08:54:00 +02:00
root
58ef0cd984 mgr/dashboard: fix cd-text-label-list string writeValue
When editing services such as oauth2-proxy, backend fields like scope
arrive as a single string. Spreading that string into the list turned
each character into its own row. Normalize string values to one item.

Fixes: https://tracker.ceph.com/issues/78808
Signed-off-by: Pedro Gonzalez Gomez <pegonzal@ibm.com>
2026-07-29 08:42:58 +02:00
Kefu Chai
070e0ca298
Merge pull request #69680 from sunyuechi/wip-bufferlist-omap
test/crimson/omap: enlarge values under ASan to shrink depth-driven tests

Reviewed-by: Kefu Chai <k.chai@proxmox.com>
2026-07-29 11:47:24 +08:00
SrinivasaBharathKanta
bfebe2ea25
Merge pull request #66757 from senolcolak/wip-v2-mgr-inventory-crush-host
mgr: override OSD hostname with CRUSH physical host in all metadata paths
2026-07-29 08:58:21 +05:30
SrinivasaBharathKanta
9da521bd82
Merge pull request #69885 from sunyuechi/wip-rados-fix-std-fd-close
tools/rados: fix stdio/stream cleanup
2026-07-29 08:56:20 +05:30
SrinivasaBharathKanta
97cc3c8d93
Merge pull request #67023 from trociny/wip-74490
mon: allow getpoolstats for mgr modules
2026-07-29 08:55:52 +05:30
SrinivasaBharathKanta
44075f25c8
Merge pull request #69973 from ljflores/wip-tracker-77382
qa/suites/upgrade: ignore expected telemetry warning
2026-07-29 08:55:12 +05:30
Kefu Chai
86c46693c2
Merge pull request #70206 from sunyuechi/wip-dockerfile-sccache-dnf
Dockerfile.build: install sccache from distro packages when available

Reviewed-by: Zack Cerza <zack@redhat.com>
2026-07-29 11:22:01 +08:00
SrinivasaBharathKanta
a51414287f
Merge pull request #69325 from NitzanMordhai/wip-nitzan-mgr-memory-grow-debug-high-level
mgr/ClusterState: remove debug 30 memory spike
2026-07-29 05:24:49 +05:30
SrinivasaBharathKanta
33afffca75
Merge pull request #69099 from MaxKellermann/osd_SnapMapper__fmt_no_sprintf
osd/SnapMapper: use fmt::format() instead of fmt::sprintf()
2026-07-29 05:24:11 +05:30
SrinivasaBharathKanta
0718de9184
Merge pull request #69098 from MaxKellermann/common_options__long_desc__c_string
common/options: convert `long_desc` to C string
2026-07-29 05:23:55 +05:30
SrinivasaBharathKanta
33a2cbcd2d
Merge pull request #70231 from bill-scales/issue58417
osd: Fix race hazard causing duplicated message after OSD marked down
2026-07-29 05:13:48 +05:30
SrinivasaBharathKanta
15825ec7bf
Merge pull request #70233 from bill-scales/issue54932
osd: Fix PeeringState::proc_lease crash caused by race hazard
2026-07-29 05:13:18 +05:30
Radoslaw Zarzynski
6e2ec3160c
Merge pull request #70333 from bill-scales/issue76953
osd: Fix valgrind uninitialized variable issues in fast EC

Reviewed-by: Matty Williams <Matty.Williams@ibm.com>
Reviewed-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
2026-07-28 22:22:56 +02:00
J. Eric Ivancich
c3c4a139ad
Merge pull request #70505 from ivancich/wip-fix-ceph-spec-in
rgw: update rpm and debian builds

Reviewed-by: Thomas Serlin <tserlin@redhat.com>
2026-07-28 16:16:58 -04:00
Afreen Misbah
3a081d5cd0 mgr/dashboard: add text/javascript to gzip mime types
CherryPy's serve_file() uses Python's mimetypes module which returns
text/javascript for .js files (RFC 9239), but the gzip config only
listed application/javascript. This meant the main Angular bundle
was being served uncompressed. With Cheroot write timeouts,
the uncompressed transfer times out over slower networks, causing
ERR_CONTENT_LENGTH_MISMATCH in the browser.

Signed-off-by: Afreen Misbah <afreen@ibm.com>
2026-07-28 19:13:55 +05:30
Afreen Misbah
ff681c5884
Merge pull request #70544 from rhcs-dashboard/switcher
mgr/dashboard: rgw gateway switcher read-only for resource page

Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-28 19:03:46 +05:30
Xuehan Xu
c2a7345ca7
Merge pull request #70547 from xxhdx1985126/wip-crimson-recover-delete-fix
crimson/osd/pg_recovery: call on_global_recover on replica-recover-deleted objects only when it's not missing on the primary too

Reviewed-by: Kefu Chai <k.chai@proxmox.com>
2026-07-28 21:19:26 +08:00
Patrick Donnelly
e677c76f12
Merge PR #70581 into main
* refs/pull/70581/head:
	doc/governance: update CEC term length

Reviewed-by: Ilya Dryomov <idryomov@redhat.com>
2026-07-28 08:43:05 -04:00
Patrick Donnelly
af0017d0d0
Merge PR #70574 into main
* refs/pull/70574/head:
	.github/workflows: bump checkout action version
	.github/workflows/qa-symlink: sparse checkout verify-qa
	.github/workflows/qa-symlink: run only for active branches

Reviewed-by: Joseph Mundackal <jmundackal@bloomberg.net>
2026-07-28 08:40:32 -04:00
Patrick Donnelly
b44f03b373
Merge PR #70582 into main
* refs/pull/70582/head:
	doc/governance: add Redouane to CSC

Reviewed-by: Anthony D'Atri <anthony.datri@gmail.com>
Reviewed-by: Ilya Dryomov <idryomov@redhat.com>
2026-07-28 08:40:04 -04:00
Patrick Donnelly
aff8483b3e
Merge PR #70586 into main
* refs/pull/70586/head:
	.githubmap: add BBoozmen

Reviewed-by: Oguzhan Ozmen <oozmen@bloomberg.net>
2026-07-28 08:39:18 -04:00
Patrick Donnelly
e344300980
Merge PR #70598 into main
* refs/pull/70598/head:
	.githubmap: add mheler

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-28 08:36:50 -04:00
Vallari Agrawal
3c18e56570
Merge pull request #70614 from VallariAg/wip-nvmeof-upgrade-refresh
qa/suites/nvmeof/upgrade: use refresh True for wait_for_service
2026-07-28 16:03:38 +05:30
Alex Ainscow
7eaf1fb72f
Merge pull request #69662 from aainscow/truncate_and_write_tests
test/osd: Add truncate-then-write tests 

Reviewed-by: Bill Scales <bill_scales@uk.ibm.com>
2026-07-28 11:27:43 +01:00
Kefu Chai
a09c01ffb4
Merge pull request #69758 from tchaikov/wip-bumpup-seastar
crimson: bump seastar submodule and adapt to its new future API 

Reviewed-by: Matan Breizman <mbreizma@redhat.com>
2026-07-28 18:24:32 +08:00
Aashish Sharma
03df721ac7 mgr/dashboard: Add alerts doc url to active alert list
Add documentation link in Learn more column for every alert in the
active alerts list table

Fixes: https://tracker-origin.ceph.com/issues/78747

Signed-off-by: Aashish Sharma <aasharma@redhat.com>
2026-07-28 15:16:37 +05:30
Vallari Agrawal
5027b84eb3
qa/suites/nvmeof/upgrade: use refresh True for wait_for_service
Add refresh: True to upgrade tests, same as we added for
https://tracker.ceph.com/issues/73538

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

Co-authored-by: barakda <barak.davidov@gmail.com>
Signed-off-by: Vallari Agrawal <vallari.agrawal@ibm.com>
2026-07-28 14:05:23 +05:30
Kefu Chai
31ed48ac8f crimson: migrate off deprecated seastar::smp::count and all_cpus()
The updated seastar deprecates the global smp::count and smp::all_cpus() in
favour of the per-instance smp::shard_count() and smp::all_shards(). Under the
CI -Werror build these deprecation warnings are fatal.

Replace the uses with the reactor-local free functions
seastar::this_smp_shard_count() and seastar::this_smp_all_shards(), which read
the current smp instance's shard count and shard-id range. crimson runs a
single smp instance and every migrated site executes on a reactor thread (the
alienstore worker threads do not touch these), so the behaviour is unchanged.

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
2026-07-28 16:07:19 +08:00
Kefu Chai
dcbe48ff0b crimson: use the seastar span sink API and build at API level 10
At SEASTAR_API_LEVEL >= 9 seastar dropped output_stream::write(net::packet) in
favour of write(std::span<temporary_buffer<char>>). Convert Socket's writes to
the span form, writing the packet's released fragments and keeping them alive
across the write with do_with, then raise Seastar_API_LEVEL from 6 to 10 to
match the updated seastar. The span write overloads are unconditional, so the
Socket change is valid at every API level.

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
2026-07-28 16:05:39 +08:00
Kefu Chai
df181842f1 crimson: bump seastar submodule and adapt to its new future API
Update src/seastar to ceph-umbrella-25.05.0-1074-gcced0236, which is
scylladb/seastar master (fd71a5b4c7) with the ceph patches reapplied,
and adapt crimson to the future API changes the bump brings in:

  - interruptible_future.h: seastar split its single ready_future_marker into
    set_ready_future_marker and set_from_tuple_ready_future_marker; route
    futurize::from_tuple through the matching markers.
  - thread_pool.h: future_state::set() is now templated and get_value() is
    ref-qualified; pass seastar::internal::monostate{} for the void case and
    move the state before reading its value.

These crimson changes need the new seastar, so they share one commit with the
submodule bump. The build stays at Seastar_API_LEVEL 6 here; the level is
raised in the following commit.

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
2026-07-28 16:05:39 +08:00
Matan Breizman
5efd84b2ef
Merge pull request #70180 from Matan-B/wip-matanb-seastore-coll-batch
crimson/seastore: batch same-collection transactions

Reviewed-by: Josh Durgin <jdurgin@redhat.com>
Reviewed-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-28 10:13:32 +03:00
bluikko
6d7963b016
Merge pull request #70467 from bluikko/wip-doc-nginx-capitalization
doc: standardize capitalization of NGINX following the vendor
2026-07-28 14:04:30 +07:00
Hezko
aac1f3c478
Merge pull request #70209 from Hezko/warn-on-deprecated-param
mgr/dashboard: add deprecation warning on ns add cli command
2026-07-28 09:25:41 +03:00
Afreen Misbah
e4fec86961
Merge pull request #70560 from rhcs-dashboard/fix-gateway-readonly
Reviewed-by: Naman Munet <nmunet@redhat.com>
2026-07-28 11:48:23 +05:30
Afreen Misbah
60c64a4977
Merge pull request #70566 from rhcs-dashboard/service-form-helper-fix
Reviewed-by: Nizamudeen A <nia@redhat.com>
2026-07-28 11:48:18 +05:30
Pedro Gonzalez Gomez
a11f0e3d4e mgr/dashboard: fix snap schedule startDate
Fixes date time picker that was wrongly setting the form date

Fixes: https://tracker-origin.ceph.com/issues/78742
Signed-off-by: Pedro Gonzalez Gomez <pegonzal@ibm.com>
2026-07-28 08:05:53 +02:00
Venky Shankar
ed8939d940 Merge PR #70375 into main
* refs/pull/70375/head:
	src/pybind: fixing the test_invalid_client_id failure

Reviewed-by: Jos Collin <jcollin@redhat.com>
Reviewed-by: Venky Shankar <vshankar@redhat.com>
2026-07-28 11:25:58 +05:30
Kefu Chai
757d192b43
Merge pull request #69726 from tchaikov/wip-drop-bluestore-pmem
blk,build: drop BlueStore PMEM support

Reviewed-by: Igor Fedotov <igor.fedotov@croit.io>
2026-07-28 13:27:17 +08:00
Tomer Haskalovitch
c47b6f4e8d mgr/dashboard: add deprecation warning on ns add nvme cli command
Fixes: https://tracker.ceph.com/issues/78228
Signed-off-by: Tomer Haskalovitch <tomer.haska@ibm.com>
2026-07-28 07:30:40 +03:00
Kefu Chai
6f4345554d
Merge pull request #68209 from sunyuechi/riscv-bench-crc
test/common: add RISC-V CRC32C performance benchmark to unittest_crc32c

Reviewed-by: Kefu Chai <k.chai@proxmox.com>
2026-07-28 09:40:42 +08:00
Gil Bregman
0b5dfd5a80
Merge pull request #70578 from gbregman/main
mgr/cephadm: Add CNC fields to NVMEoF spec file
2026-07-28 02:04:26 +03:00
Matthew N. Heler
0ba95d1a87 .githubmap: add mheler
Signed-off-by: Matthew N. Heler <matthew.heler@hotmail.com>
2026-07-27 17:24:32 -05:00
Syed Ali Ul Hasan
b1be0f8d8f mgr/dashboard: rgw gateway switcher read-only for resource page
- Fixes: https://tracker.ceph.com/issues/78513

Signed-off-by: Syed Ali Ul Hasan <syedaliulhasan19@gmail.com>
2026-07-28 02:05:43 +05:30
Afreen Misbah
e781e5a1a5
Merge pull request #69790 from syedali237/dashboard/user-management
mgr/dashboard : migrated User Table tabs to resource pages

Reviewed-by: Afreen Misbah <afreen@ibm.com>
Reviewed-by: Abhishek Desai <abhishek.desai1@ibm.com>
2026-07-28 01:49:50 +05:30
Shilpa Jagannath
405b99064f qa/multisite: fix flaky test_bucket_sync_disable
rely on 'bucket sync status' instead of looking up sync-status object.
it reports that there are no sync sources once the bucket's disabled
flag has propagated. also add a meta checkpoint after disabling.

Signed-off-by: Shilpa Jagannath <smanjara@redhat.com>
2026-07-27 19:40:48 +00:00
Alex Ainscow
c95853db84 test/osd: cover truncate+write EC transaction behaviour
Add unit-tests to recreate the problems found by the IO Sequencer in the previous commit.

Some tests here rely on frameworks added in Umbrella and as such we are keeping them
independent (in their own PRs).

Signed-off-by: Alex Ainscow <aainscow@uk.ibm.com>
Signed-off-by: Matty Williams <Matty.Williams@ibm.com>
Assisted-by: IBM Bob:Claude/GPT
2026-07-27 18:47:37 +01:00
Gil Bregman
622feb2a72 mgr/cephadm: Add CNC fields to NVMEoF spec file
Fixes: https://tracker-origin.ceph.com/issues/78675

Signed-off-by: Gil Bregman <gbregman@il.ibm.com>
2026-07-27 20:40:04 +03:00
Patrick Donnelly
a51222647d
.githubmap: add BBoozmen
Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-27 13:23:31 -04:00
J. Eric Ivancich
855a5edf70 rgw: update build config to streamline builds
Some binaries and man pages were not included in rpm builds or debian
builds.  This adds those artifacts to ceph.spec.in
debian/ceph-common.install and debian/radosgw.install.

Signed-off-by: J. Eric Ivancich <ivancich@redhat.com>
2026-07-27 13:09:48 -04:00
Patrick Donnelly
66524970a1
Merge PR #70576 into main
* refs/pull/70576/head:
	script/ptl-tool: add more refs for main branch

Reviewed-by: Yuri Weinstein <yweins@redhat.com>
2026-07-27 13:06:57 -04:00
Syed Ali Ul Hasan
78a2d82cb1 mgr/dashboard: migrated user table tabs to resource pages
- Fixes: https://tracker.ceph.com/issues/77475

Signed-off-by: Syed Ali Ul Hasan <syedaliulhasan19@gmail.com>
2026-07-27 21:35:31 +05:30
Patrick Donnelly
0c139f2b83
doc/governance: update CEC term length
Fixes: https://tracker.ceph.com/issues/77966
Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-27 11:43:12 -04:00
Patrick Donnelly
1d3b2372e3
doc/governance: add Redouane to CSC
Fixes: https://tracker.ceph.com/issues/77965
Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-27 11:13:56 -04:00
Patrick Donnelly
ebc60e401f
script/ptl-tool: add more refs for main branch
Start with "upstream", then "origin", then finally the local main branch.

Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-27 09:45:28 -04:00
Redouane Kachach
0a6e4207e6
Merge pull request #69844 from kginonredhat/issue-77835-fail-fs-mds-upgrade-wait
mgr/cephadm: wait for active MDS during fail_fs upgrade

Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
2026-07-27 15:39:40 +02:00
Patrick Donnelly
841baf903e
.github/workflows: bump checkout action version
Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-27 09:36:03 -04:00
Patrick Donnelly
901aad681f
.github/workflows/qa-symlink: sparse checkout verify-qa
Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-27 09:36:03 -04:00
Patrick Donnelly
59d8a46d4b
.github/workflows/qa-symlink: run only for active branches
Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-27 09:35:56 -04:00
Patrick Donnelly
a8817bb61f
Merge PR #70259 into main
* refs/pull/70259/head:
	ptl-tool: keep .githubmap sorted when adding new contributors

Reviewed-by: Yuri Weinstein <yweins@redhat.com>
2026-07-27 09:34:04 -04:00
Oguzhan Ozmen
993f3f7c50
Merge pull request #70449 from BBoozmen/wip-oozmen-78572
qa/tasks/dnsmasq: set no-resolv on the systemd-resolved path
2026-07-27 09:22:26 -04:00
Afreen Misbah
c4a890a226
Merge pull request #70202 from rhcs-dashboard/fix-toast-length
Fix long toast notifications

Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-27 18:36:50 +05:30
Afreen Misbah
2e51b71146
Merge pull request #69189 from syedali237/pools-table
mgr/dashboard: converted pools list table tab to resource pages

Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-27 18:35:32 +05:30
Kefu Chai
a1582bdf64
Merge pull request #69862 from sunyuechi/wip-crimson-mon-fix-uaf-run-command
crimson/mon/MonClient: fix use-after-free in run_command

Reviewed-by: Kefu Chai <k.chai@proxmox.com>
2026-07-27 20:45:23 +08:00
Kefu Chai
cf2d42d48a
Merge pull request #70189 from sunyuechi/fix-sccache-dist-status-check
cmake: fix sccache job limits when dist is unavailable

Reviewed-by: Kefu Chai <k.chai@proxmox.com>
2026-07-27 20:37:59 +08:00
Kefu Chai
8131835af8
Merge pull request #69821 from sunyuechi/wip-rgw-inverted-checks
rgw: fix three inverted condition checks

Reviewed-by: Daniel Gryniewicz <dang1@ibm.com>
2026-07-27 20:27:46 +08:00
bluikko
6a2df53773
Merge pull request #70324 from bluikko/wip-doc-man-ceph-osd-pool-get
doc/man: sync osd pool get/set flags in 8/ceph.rst
2026-07-27 17:29:13 +07:00
Naman Munet
b4d5e0a7bb mgr/dashboard: Update certificate description field with proper help text
fixes: https://tracker-origin.ceph.com/issues/78698

Signed-off-by: Naman Munet <naman.munet@ibm.com>
2026-07-27 15:37:33 +05:30
pujashahu
0d29372b6b mgr/dashboard : Group name should be read only when user tries to edit existing nvmeof gateway
Fixes: https://tracker-origin.ceph.com/issues/78685

Signed-off-by: pujaoshahu <pshahu@redhat.com>
2026-07-27 14:44:48 +05:30
Avan
57074b5085
Merge pull request #70224 from avanthakkar/fix-smb-cluster-resource-resync
mgr/smb: only resync clusters that reference a changed resource


Reviewed-by: Anoop C S <anoopcs@cryptolab.net>
Reviewed-by: John Mulligan <jmulligan@redhat.com>
2026-07-27 14:35:46 +05:30
pujashahu
cbc41b07d8 mgr/dashboard : If user is selected auto-fetch option while creating subsystems then subnet-mask is mandatory param
Fixes: https://tracker.ceph.com/issues/78641

Signed-off-by: pujashahu <pshahu@redhat.com>
2026-07-27 14:01:06 +05:30
Radoslaw Zarzynski
c2709f56c0
Merge pull request #70151 from sunyuechi/fix-ec-slice-map-offset
osd/ECUtil: fix offset accumulation in slice_map

Reviewed-by: Kefu Chai <k.chai@proxmox.com>
Reviewed-by: Alex Ainscow <aainscow@uk.ibm.com>
2026-07-27 10:19:58 +02:00
Afreen Misbah
24f44a95a0
Merge pull request #70338 from rhcs-dashboard/cephfs-access-denied-issue
Reviewed-by: Nizamudeen A <nia@redhat.com>
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-27 12:35:11 +05:30
Afreen Misbah
90e7f65f41
Merge pull request #70341 from rhcs-dashboard/access-denied-issue-read-only-user
Reviewed-by: Nizamudeen A <nia@redhat.com>
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-27 12:35:07 +05:30
Afreen Misbah
44b87d90d5
Merge pull request #70420 from rhcs-dashboard/fix-favicon-issue-upstream
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-27 12:33:10 +05:30
Afreen Misbah
1ee4fb8384
Merge pull request #69981 from rhcs-dashboard/fix-77976-main
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-27 12:31:02 +05:30
Afreen Misbah
b653950fab
Merge pull request #70369 from rhcs-dashboard/logs-component-filter-shifting
Reviewed-by: Nizamudeen A <nia@redhat.com>
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-27 12:30:46 +05:30
Vallari Agrawal
a25d535bd1
Merge pull request #70399 from VallariAg/wip-submodule-192
mgr/dashboard: bump nvmeof submodule to 1.9.2
2026-07-27 12:23:12 +05:30
Afreen Misbah
8a1ded4890
Merge pull request #70251 from rhcs-dashboard/nfs-share-edit-issue
mgr/dashboard: Subvolume group and subvolume not listed in NFS Share form on edit.

Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-27 12:05:44 +05:30
Aviv Caro
3a8215d69c
Merge pull request #70461 from leonidc/fix-nvme-gw-show-all
nvmeofgw:  fix command nvme-gw show/show-all
2026-07-27 09:24:46 +03:00
Afreen Misbah
55f797ccd3
Merge pull request #70409 from rhcs-dashboard/add-alert-button
mgr/dashboard: Add alert button in data resiliency tab

Reviewed-by: Nizamudeen A <nia@redhat.com>
2026-07-27 11:54:44 +05:30
Ville Ojamo
aee2067e14 doc: standardize capitalization of NGINX following the vendor
The vendor stylizes it as NGINX.
Previously docs capitalized it as either NGINX, Nginx or nginx. nginx
was the preferred capitalization before commercialization of the
software.

Signed-off-by: Ville Ojamo <git2233+ceph@ojamo.eu>
2026-07-27 12:17:08 +07:00
Syed Ali Ul Hasan
1b4f9f10ca mgr/dashboard: migrated pool table tabs into resource pages
- Fixes:  https://tracker.ceph.com/issues/76713

Signed-off-by: Syed Ali Ul Hasan <syedaliulhasan19@gmail.com>
2026-07-26 18:37:32 +05:30
Xuehan Xu
6dab4b5034 crimson/osd/pg_recovery: call on_global_recover on replica-recover-deleted
objects only when it's not missing on the primary too

The issue was introduced by 60537bdd2f
which didn't fix the issue it was supposed to because of the same error
this commit tries to fix.

Fixes: https://tracker-origin.ceph.com/issues/78676
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-26 20:55:32 +08:00
Matan Breizman
cedad57aee crimson/os/seastore/omap_manager: count key length in the overwrite gap
ow_gap_from_last_entry() returns how much the node grows when the tail entry
is overwritten. However, it compared *value* lengths only.

overwriting pg-log key (31B) is longer than a _fastinfo key (9B) -
So the growth was under-counted by 22 bytes.

Also assert in _append()/_overwrite() that the write stays within capacity() to
avoid similar issues.

Signed-off-by: Matan Breizman <mbreizma@redhat.com>
2026-07-26 07:36:42 +00:00
Anthony D'Atri
72b684aaea
Merge pull request #69038 from zdover23/wip-doc-2026-05-21-mgr-prometheus-ceph-exporter
doc/mgr: document ceph-exporter
2026-07-25 11:55:06 -04:00
Laura Flores
165d47959c
Merge pull request #69684 from ljflores/wip-tracker-76927
qa/tasks: change collectl source to download.ceph.com

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
Reviewed-by: Radosław Zarzyński <Radoslaw.Adam.Zarzynski@ibm.com>
2026-07-24 16:59:29 -05:00
Shilpa Jagannath
90098a7027 qa/multisite: fixes multisite test: test_zonegroup_rename
period commit only triggers async push (RGWPeriodPusher)
from the a zone's gateway to the other zones. it doesn't block
until they've applied it. a reconfigure delay alone might not
be sufficient. add checkpoint retries to allow for lag.

Signed-off-by: Shilpa Jagannath <smanjara@redhat.com>
2026-07-24 20:39:30 +00:00
Shraddha Agrawal
72f3242b18
Merge pull request #70481 from shraddhaag/wip-shraddhaag-crimson-isa
src/crimson: statically link EC plugin, ISA, in crimson-osd
2026-07-24 23:27:11 +05:30
Adam Emerson
f4a2c0e7f3
Merge pull request #67732 from adamemerson/wip-policy-ux
rgw: Policy evalaution logging

Reviewed-by: Matthew N. Heler <matthew.heler@hotmail.com>
Reviewed-by: Oguzhan Ozmen <oozmen@bloomberg.net>
2026-07-24 12:42:31 -04:00
Afreen Misbah
9b679b2236
Merge pull request #70410 from syedali237/dashboard/images
mgr/dashboard: migrated images table tabs to resource pages

Reviewed-by: Afreen Misbah <afreen@ibm.com>
Reviewed-by: Abhishek Desai <abhishek.desai1@ibm.com>
2026-07-24 21:29:14 +05:30
Patrick Donnelly
1085687ac0
ptl-tool: keep .githubmap sorted when adding new contributors
Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-24 10:22:17 -04:00
Christopher Hoffman
0efbe10e14
Merge pull request #62342 from dparmar18/i62673
mgr/volumes: accept unit with subvolume resize

Reviewed-by: Rishabh Dave <ridave@redhat.com>
Reviewed-by: Neeraj Pratap Singh <neesingh@redhat.com>
Reviewed-by: Christopher Hoffman <choffman@redhat.com>
2026-07-24 09:28:15 -04:00
Kefu Chai
032c1a1c37
Merge pull request #69939 from tchaikov/wip-mgr-heap-asok
mgr: add heap admin socket command

Reviewed-by: Matthew N. Heler <matthew.heler@hotmail.com>
Reviewed-by: Ronen Friedman <rfriedma@redhat.com>
2026-07-24 21:16:05 +08:00
Christopher Hoffman
f0633dc430
Merge pull request #69880 from sunyuechi/client-fscrypt-fixes
client: fix fscrypt error-path bugs

Reviewed-by: Christopher Hoffman <choffman@redhat.com>
2026-07-24 09:15:20 -04:00
Vallari Agrawal
16f59e2b6f
Merge pull request #70281 from VallariAg/wip-nvmeof-allow-service-dump
mgr/cephadm: set mgr cap for NVMeoF to allow cmd "service dump"
2026-07-24 17:42:54 +05:30
Syed Ali Ul Hasan
d2e64ba6b4 mgr/dashboard: migrated images table tabs to resource pages
- Fixes: https://tracker.ceph.com/issues/78479

Signed-off-by: Syed Ali Ul Hasan <syedaliulhasan19@gmail.com>
2026-07-24 15:35:41 +05:30
Matty Williams
26f32cbab3 test: Add TruncateWrite ops to IO Sequencer and Sequences using them
current io exerciser sequences can model standalone truncates and writes,
but cannot generate a single transaction that truncates an object and
then writes sparse regions. Add SingleTruncateWriteOp, DoubleTruncateWriteOp,
and TripleTruncateWriteOp, wire them through IoSequence, ObjectModel, and
RadosIo, and extend EC sequences/tests so truncate+write transactions can
be reproduced and validated.

Signed-off-by: Matty Williams <Matty.Williams@ibm.com>
Assisted-by: IBM Bob:Claude/GPT
2026-07-24 10:08:18 +01:00
Shraddha Agrawal
93300b45c0 src/crimson/osd: statically link the ISA plugin in crimson-osd
Problem:
Before this change, when the ISA plugin (classic build, dlopen'd),
would try to log, it'd segfault due to null g_ceph_context.

We need a way to make logging work for EC plugins in crimson.

Solution:

By building the ISA plugin WITH_CRIMSON, its logging is
routed to seastar's logger, solving the issue.

It is not build separately and dlopen'd like in classic because
doing so would require the plugin to have its own seastar logger
copy, an undesirable outcome.

It is a statically built library in the crimson-osd binary, and thus
it shares the single seastar logger. The library is linked with
--whole-archive so the self-registration constructor is not dropped.

Signed-off-by: Shraddha Agrawal <shraddha.agrawal000@gmail.com>
2026-07-24 13:51:36 +05:30
Shraddha Agrawal
1462041bd9 src/erasure-code: support statically-linked (built-in) plugins
This commit adds the functionality in EC plugin registry to support
built in (statically linked) plugins. This is done by 2 main changes:

1. introducing a new map, builtin_plugins, where plugins can register
a factory for itself at startup.
2. load() now first checks if the plugin is builtin and instantiates it,
otherwise it falls back to dynamically linking the plugin.

Signed-off-by: Shraddha Agrawal <shraddha.agrawal000@gmail.com>
2026-07-24 13:51:36 +05:30
Vallari Agrawal
e12106a501
Merge pull request #70248 from VallariAg/wip-nvmeof-teuthology-mtls-improve
qa: Add cephadm-signed mtls test in nvmeof/mtls_test.sh
2026-07-24 12:33:48 +05:30
Guillaume Abrioux
9020d1dccd
ceph-volume: fix nvme preformat wiping VG on osds-per-device > 1
prepare_data_device() was calling nvme_utils.preformat() unconditionally
for every OSD slot. With --osds-per-device N, this means the second osd
reformats the device after the first OSD had already created its vg
on it which makes vgcreate fail with "device has a signature".

this commit fixes this issue by checking api.get_device_vgs() before
preformatting: if a ceph VG already exists on the device, skip the format.
This mirrors the logic create_lv() already uses to reuse an existing VG.

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

Signed-off-by: Guillaume Abrioux <gabrioux@ibm.com>
2026-07-24 09:02:09 +02:00
Neeraj Pratap Singh
af19eff6ed src/pybind: fixing the test_invalid_client_id failure
The test_invalid_client_id was failing due to the
incorrect returns by handle_command and in get_perf_data()
in mgr/ststs/fs/perf_stats.py
Introduced-by: f8f972182c
Fixes:https://tracker.ceph.com/issues/76162
Signed-off-by: Neeraj Pratap Singh <Neeraj.Pratap.Singh1@ibm.com>
2026-07-24 09:20:06 +05:30
Yuri Weinstein
5f026f27c7
Merge pull request #70120 from ceph/wip-yuriw-78149-fix-main
qa/tests: fix POOL_FULL ignorelist pattern in upgrade tests

Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
Reviewed-by: Laura Flores <lflores@redhat.com>
2026-07-23 15:31:27 -07:00
Yuri Weinstein
8b261cd505 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).

Non-code entries (reached quota, overall HEALTH_, slow request,
noscrub, nodeep-scrub, osds down, insufficient standby, etc.) are
unchanged.

Fixes: https://tracker.ceph.com/issues/78149
Signed-off-by: Yuri Weinstein <yweinste@redhat.com>
2026-07-23 12:32:51 -07:00
Daniel Gryniewicz
77f6a3b47e
Merge pull request #68291 from dang/wip-dang-standalone
RGW Standalone build
2026-07-23 13:07:04 -04:00
SrinivasaBharathKanta
a3a7111966
Merge pull request #68753 from pablodelara/isal_crypto_update
crypto/isa-l: update isa-l_crypto submodule to v2.26.1
2026-07-23 21:38:27 +05:30
SrinivasaBharathKanta
857f36715e
Merge pull request #69429 from tchaikov/wip-cmddesc
mon,common: correct typo in command desc and tighten the command desc formatter
2026-07-23 21:37:50 +05:30
SrinivasaBharathKanta
635a92806d
Merge pull request #69181 from stzuraski898/wip-sz-74693-perf_schema_no_counters
mgr/ActivePyModules: use RAII for perf schema section management
2026-07-23 21:37:23 +05:30
Vallari Agrawal
ab00786785
mgr/dashboard: bump nvmeof submodule to 1.9.2
Update gateway submodule and protobuf files.

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

Signed-off-by: Vallari Agrawal <vallari.agrawal@ibm.com>
2026-07-23 20:44:45 +05:30
Kautilya Tripathi
b385483049
Merge pull request #70418 from knrt10/fix-crimson-osd-abort-lba-tree
crimson/seastore: keep on-page checksum in sync after merge_content_to
2026-07-23 19:46:12 +05:30
Garry Drankovich
ad980c6b65 rgw/rados/rgw_sync: fix unintended uint64_t->int conversion
Fixes: https://tracker.ceph.com/issues/78491

Signed-off-by: Garry Drankovich <garry.drankovich@clyso.com>
2026-07-23 16:53:59 +03:00
Aashish Sharma
2f4a86c0a3 mgr/dashboard: carbonize Setup multi-site replication wizard
Fixes: https://tracker.ceph.com/issues/77976

Signed-off-by: Aashish Sharma <aasharma@redhat.com>
2026-07-23 18:30:32 +05:30
Matan Breizman
0836e417ba crimson/os/seastore/omap_manager: predict append (not overwrite) on initial_pending
An initial_pending LogNode always append_kv()s and never overwrites.

expect_overflow() was still called with can_ow=true whenever the tail entry is
_fastinfo. It then used only the overwrite gap while the append
itself consumed a full entryi - so the node rolled over far too late and
used_space() overran capacity().

This would result in `assert(capacity() >= used_space()`.

Gate can_ow on !is_initial_pending() so the append is predicted with the full
entry size and rolls over in time.

Signed-off-by: Matan Breizman <mbreizma@redhat.com>
2026-07-23 12:18:32 +00:00
Matan Breizman
9e87510be9 crimson/os/seastore/omap_manager: calculate the overwrite growth (gap)
The previous implementation computed ow_gap_from_last_entry() but never used
the result.
Use it to check only the additional space required when the tail
entry grows, which matches overwrite logic.

Note, this is a cleanup - behavior remains similar.

See 825c8f149c

Signed-off-by: Matan Breizman <mbreizma@redhat.com>
2026-07-23 12:12:53 +00:00
Kotresh HR
78b7fa265b qa/cephfs-mirror: Fix tests for ISO sync_time_stamp
Fixes: https://tracker.ceph.com/issues/76506
Signed-off-by: Kotresh HR <khiremat@redhat.com>
2026-07-23 17:16:42 +05:30
Kotresh HR
10e008aaca doc/cephfs-mirroring: document ISO-8601 sync timestamps
Fixes: https://tracker.ceph.com/issues/76506
Signed-off-by: Kotresh HR <khiremat@redhat.com>
2026-07-23 17:14:52 +05:30
Kotresh HR
f6d85aad99 cephfs_mirror: format sync timestamps as ISO-8601 local time
Show sync_time_stamp and metrics_updated_at as human-readable
local timestamps in peer_status and mgr status. Keep epoch in
omap and counter dump.

Fixes: https://tracker.ceph.com/issues/76506
Signed-off-by: Kotresh HR <khiremat@redhat.com>
2026-07-23 17:06:46 +05:30
Afreen Misbah
b891817d66
Merge pull request #70362 from rhcs-dashboard/Irrelevant-realmdescription
Reviewed-by: Nizamudeen A <nia@redhat.com>
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-23 15:54:26 +05:30
Vallari Agrawal
672b422cc9
qa: Add cephadm-signed mtls test in nvmeof/mtls_test.sh
Expand nvmeof mtls test to include cephadm-signed cert
(ssl=true + enable_auth=true, no certs)

Also improve wait_for_service() logic to assert all
gateways are running.

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

Signed-off-by: Vallari Agrawal <vallari.agrawal@ibm.com>
2026-07-23 15:44:21 +05:30
Hezko
267f0eb9d6
Merge pull request #70223 from Hezko/fix-list-hosts-empty
mgr/dashboard: fix list_hosts nvmeof cli commanad empty table bug
2026-07-23 12:55:14 +03:00
Afreen Misbah
4ecb4c8e70
Merge pull request #68845 from rhcs-dashboard/fix-14295
mgr/dashboard: [Dashboard] Incorrect action button label "Edit User" instead of "Save" in Edit User page

Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-23 15:18:56 +05:30
Afreen Misbah
805bd0d741
Merge pull request #70274 from rhcs-dashboard/fix-namespace
mgr/dashboard: Add RADOS Namespace Support in NVMe-oF UI

Reviewed-by: Afreen Misbah <afreen@ibm.com>
Reviewed-by: Nizamudeen A <nia@redhat.com>
Reviewed-by: Sagar Gopale <sagar.gopale@ibm.com>
2026-07-23 15:18:16 +05:30
Afreen Misbah
528e0fde60
Merge pull request #70278 from rhcs-dashboard/configuration-form-fix
mgr/dashboard: Edit should support setting one or more rgw service co…

Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-23 15:06:21 +05:30
Afreen Misbah
4083c6e78a
Merge pull request #70292 from rhcs-dashboard/fix-hw-dashboard-stale-metrics
mgr/dashboard: fix stale metrics in hardware dashboards

Reviewed-by: Aashish Sharma <aasharma@redhat.com>
2026-07-23 12:47:42 +05:30
Abhishek Desai
a3f425e4c0 mgr/dashboard : Favicon issue
fixes : https://tracker.ceph.com/issues/78530
Signed-off-by: Abhishek Desai <abhishek.desai1@ibm.com>
2026-07-23 12:20:23 +05:30
Leonid Chernin
b820cf5743 nvmeofgw: fix command nvme-gw show-all
add missing fields after merge show-all pr

fixes: https://tracker.ceph.com/issues/78593

Signed-off-by: Leonid Chernin <leonidc@il.ibm.com>
2026-07-23 07:53:23 +03:00
Aishwarya Mathuria
2b72c5bd0e
Merge pull request #70250 from amathuria/wip-amat-seastore-fix-pass-admin
crimson/os/seastore/rbm: fix pass_admin to pass admin command to ioctl
2026-07-23 10:19:50 +05:30
bluikko
d0f26bed0f
Merge pull request #69867 from bluikko/wip-fix-sts-rgw-yaml-in
common/options: fix invalid command for STS key generation
2026-07-23 11:21:55 +07:00
Kefu Chai
a4c43f6e50
Merge pull request #70146 from tchaikov/wip-mgr-logging-with-level
mgr: forward the root-logger fallback at the record's own level 

Reviewed-by: Matthew N. Heler <matthew.heler@hotmail.com>
2026-07-23 11:03:03 +08:00
Zac Dover
0295ffaed7
Merge pull request #70450 from zdover23/wip-doc-2026-07-23-releases-update
doc/releases: move reef from supported releases

Reviewed-by: Anthony D'Atri <anthony.datri@gmail.com>
2026-07-23 08:46:53 +10:00
Afreen Misbah
8321ca25d7 mgr/dashboard: fix stale metrics in hardware dashboards
Switch all stat panels in the hardware and hardware compression
dashboards from lastNotNull to last reduceFunction. When a host is
unreachable or node-proxy stops, metric silence is ambiguous — it
could mean host down, agent crash, or scrape failure. lastNotNull
freezes the last known value (e.g. 4 NVMe drives), causing
inconsistency with the global Overview which reflects live count
reductions.

Use last so panels show N/A when no current data arrives.

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

Signed-off-by: Afreen Misbah <afreen@ibm.com>
2026-07-23 01:43:38 +05:30
Afreen Misbah
59b6c5b829 mgr/dashboard: fix notification kebab menu e2e selector
Signed-off-by: Afreen Misbah <afreen@ibm.com>
2026-07-23 00:42:59 +05:30
Afreen Misbah
59cb51d1b8 mgr/dashboard: use descriptive name and type for alert filter param
Signed-off-by: Afreen Misbah <afreen@ibm.com>
2026-07-23 00:36:09 +05:30
Gabriel Benhanokh
3bfe0dfc62
Merge pull request #70210 from benhanokh/rgw-dedup-enable-threads-config
rgw: add rgw_enable_dedup_threads config to control per-RGW dedup par…
2026-07-22 19:51:01 +03:00
Oguzhan Ozmen
014487f584
Merge pull request #70299 from BBoozmen/wip-oozmen-78364
rgw/admin: guard bilog autotrim on non-exporting (archive) zones
2026-07-22 11:48:03 -04:00
Oguzhan Ozmen
9e160aa8f1
Merge pull request #70003 from BBoozmen/wip-oozmen-70858
rgw: fix bilog autotrim of stale bucket.instance metadata after peer deletion
2026-07-22 11:47:39 -04:00
Abhishek Desai
481d6e4699 mgr/dashboard : Access denied issue for settings icon
fixes : https://tracker.ceph.com/issues/78407

Signed-off-by: Abhishek Desai <abhishek.desai1@ibm.com>
2026-07-22 21:02:11 +05:30
Zac Dover
a3eea0c946 doc/releases: move reef from supported releases
Move the Reef release from the list of supported releases.

Signed-off-by: Zac Dover <zac.dover@clyso.com>
2026-07-23 01:26:22 +10:00
Kobi Ginon
474d8a70b2 mgr/cephadm: wait for active MDS during fail_fs upgrade
When fail_fs is enabled with max_mds > 1, _prepare_for_mds_upgrade()
issued fs fail and then continued unconditionally, skipping the
up:active wait. _complete_mds_upgrade() also set joinable=true without
waiting for in-rank MDS to recover.

Wait for all in-rank MDS to reach up:active before proceeding with the
upgrade and after re-joining the filesystem. Add fs.ready to the
mds_upgrade_sequence verify task so ceph-fuse teardown does not race
with MDS still in up:rejoin.

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

Signed-off-by: Kobi Ginon <kginon@redhat.com>
2026-07-22 18:20:24 +03:00
Oguzhan Ozmen
2a48100588 qa/tasks/dnsmasq: set no-resolv on the systemd-resolved path
On the systemd-resolved (debian) path, dnsmasq has only address= records
and no upstream, so queries it can't answer locally are forwarded via
/etc/resolv.conf which points back at systemd-resolved, which routes
the cname domains back to dnsmasq. The resulting loop burns a 5s
resolver retry per round trip which manifests itself in rgw s3tests
on Ubuntu running too slow hitting the job timeout.

Set no_resolv on that path so dnsmasq answers authoritatively and never
forwards. The rpm/NetworkManager path is unchanged, as dnsmasq there is
the system resolver and must forward upstream.

Fixes: https://tracker.ceph.com/issues/78572
Signed-off-by: Oguzhan Ozmen <oozmen@bloomberg.net>
2026-07-22 15:03:47 +00:00
Nathan Hoad
0f3412d97e
Merge pull request #68574 from nhoad/gc-shard-id
rgw: add support for --shard-id in gc process and gc list commands
2026-07-22 10:39:47 -04:00
Yuval Lifshitz
4b5506816b
Merge pull request #69666 from ShreeJejurikar/wip-rgw-kafka-4x-support
rgw: support kafka 4.x brokers
2026-07-22 17:26:53 +03:00
Abhishek Desai
281e220dbb mgr/dashboard : Access denied issue for cephfs-mgr role
fixes : https://tracker.ceph.com/issues/78414
Signed-off-by: Abhishek Desai <abhishek.desai1@ibm.com>

 Conflicts:
	src/pybind/mgr/dashboard/tests/test_access_control.py
        - conflict due to other access denied PRs
2026-07-22 19:53:04 +05:30
Jesse Williamson
4fab556e12
Merge pull request #70266 from chardan/jfw-rgw-libfdb-fixup
fixups for (EXPERIMENTAL) libfdb FoundationDB support
2026-07-22 06:31:25 -07:00
Afreen Misbah
0dd6849ee3 mgr/dashboard: fix notification back button stacking history
Signed-off-by: Afreen Misbah <afreen@ibm.com>
2026-07-22 18:31:33 +05:30
Casey Bodley
5dac2a7669
Merge pull request #69642 from lumir-sliva/rgw-lc-expiration-header-current-version
rgw/lc: report x-amz-expiration only for the current version

Reviewed-by: Casey Bodley <cbodley@redhat.com>
2026-07-22 08:53:36 -04:00
mohit84
95a007b9a0
Merge pull request #69824 from mohit84/backfill_stuck
crimson/osd: fix backfill deadlock in BackfillState::Waiting

BackfillState::Enqueuing unconditionally posts RequestWaiting{}
when budget available return false. Waiting can exit only via
ObjectPushed which requires an in-flight push. If the budget
is exhausted with no pushes in flight no objectPush will ever
arrive and the PG stalls permanently.

Solution: Introduce a dedicated BudgetBlocked state. When
budget_available() is false and tracked_objects_completed()==true
post RequestBudgetBlocked{} instead of RequestWaiting{}.
BudgetBlocked calls get_backfill_throttle() to suspend until a slots 
free up, then fires BudgetAvailable{} which transitions directly back
to Enqueuing to dispatch the next batch of pushes.

Fixes: https://tracker.ceph.com/issues/77804
2026-07-22 17:56:12 +05:30
Afreen Misbah
a1a70d06f4 mgr/dashboard: fix notification re-navigation when already on page
When a notification is clicked in the panel while the user is already
on the notifications page, the selected notification now updates
correctly by bypassing the preselect guard for query param changes.

Signed-off-by: Afreen Misbah <afreen@ibm.com>
2026-07-22 17:34:39 +05:30
Pedro Gonzalez Gomez
93703c3971
Merge pull request #69218 from rhcs-dashboard/77030-control-flow-fix-pool-creation-page
mgr/dashboard: Fixing control flow on submit button for pool creation page

Reviewed-by: Abhishek Desai <abhishek.desai1@ibm.com>
Reviewed-by: Puja Shahu <pshahu@redhat.com>
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-22 12:57:22 +02:00
Afreen Misbah
8e12637e36
Merge pull request #70419 from rhcs-dashboard/replace-gherkin-lint
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-22 16:01:28 +05:30
Afreen Misbah
191bc2ac95
Merge pull request #69958 from rhcs-dashboard/fix-access-denied-issue
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-22 15:59:17 +05:30
ShreeJejurikar
efe54523a4 rgw: support kafka 4.x brokers
librdkafka submodule

Vendors librdkafka v2.12.1 as a submodule (default) and teaches the
notification teuthology task to set up Kafka 4.x KRaft brokers. The
distro-shipped librdkafka 1.6.1 cannot SCRAM-auth against Kafka 4.x
brokers (#75900); the bundled version fixes that. Build with
WITH_SYSTEM_RDKAFKA=ON to opt back into the distro library (floor 2.6.1).
follwinf changes needed with teh submodule:
* build kafka_stub only in case of system librdkafka
* use the same header location in submodule and system
* supress compilation warning to avoid -WError issues

2.12.1 matches Fedora(44)'s current librdkafka-devel, so the vendored copy
tracks a version that distro packagers have already vetted rather than
whichever release happens to be latest upstream.

The teuthology version matrix picks one of {3.9.2, 4.1, 4.2, 4.3} per run.
3.9.2 covers the last Zookeeper-based release for the migration cohort.
4.1/4.2/4.3 track Apache's current three supported minor lines and are
resolved to the latest patch at test time via dlcdn.apache.org/kafka/, so
new patches within a supported minor need no PR update. A new minor line
(4.4) requires renaming one YAML.
* new java version (17) is needed for kafka 4.2 and up (we wil use it on
  all version)
* kerberos task need to run before the kafka install task

After pulling this branch, fetch the new submodule:

    git submodule update --init src/librdkafka

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

Signed-off-by: ShreeJejurikar <shreemj8@gmail.com>
Co-authored-by: Yuval Lifshitz <ylifshit@ibm.com>
2026-07-22 10:29:04 +00:00
Matan Breizman
6cae08dcc8 crimson/seastore: batch only txns with matching data_features
Transaction::append() asserts both transactions share data_features.
The per-collection batcher merged queued client txns unconditionally,
so a data_features mismatch would be asserted in build_next_batch().

Use diffrent data_features as a grouping boundary.

Signed-off-by: Matan Breizman <mbreizma@redhat.com>
2026-07-22 09:15:57 +00:00
Matan Breizman
b9e06d8e49 crimson/seastore: run pg-log trim txns solo, off the batched path
Per-collection batching merges many client txns into one seastore txn.
Batched OP_OMAP_RMKEYS is not stable yet, possibly due to an exposed
internal bug that is seen with the new behavior.
Avoid batching OMAP_RMKEYS for now.

Signed-off-by: Matan Breizman <mbreizma@redhat.com>
2026-07-22 09:15:57 +00:00
pujaoshahu
81feb0d1c9 mgr/dashboard: [Dashboard] Incorrect action button label "Edit User" instead of "Save" in Edit User page
Fixes: https://tracker.ceph.com/issues/76507

Signed-off-by: pujaoshahu <pshahu@redhat.com>

Summary: Updated submit button labels in edit forms to display "Save" instead of "Edit User", "Edit Pool", or "Edit Host" for better UX consistency, while keeping form titles unchanged.

Modified Files
role-form.component.ts: Added submitAction property to control submit button label by mode; edit mode uses Save changes, create mode uses Create Role.

role-form.component.html: Submit button now binds to submitAction instead of action/resource text.

role-form.component.spec.ts: Added tests for submitAction behavior in create and edit modes.

user-form.component.ts: Uses submitAction property; edit mode label updated to Save changes.

user-form.component.html: Submit button uses submitAction binding.

user-form.component.spec.ts: Added/updated tests covering submitAction behavior.

pool-form.component.ts: Uses submitAction property; edit mode label updated to Save changes.

pool-form.component.html: Submit button uses submitAction binding.

pool-form.component.spec.ts: Updated submit label test expectation for edit mode.

hosts.component.ts: Edit host modal submit button text changed to Save changes.

hosts.component.spec.ts: Updated test to match Save changes button text.

app.constants.ts: In the current workspace snapshot, there is no SAVE constant added under ActionLabelsI18n.

Signed-off-by: pujaoshahu <pshahu@redhat.com>
Signed-off-by: pujashahu <pshahu@redhat.com>
2026-07-22 14:34:06 +05:30
Jaya Prakash
091c0d01da
Merge pull request #70391 from Jayaprakash-ibm/wip-bluefs-spillover-config-validation
common/options: restrict spillover configuration options to valid ranges

Reviewed-by: Adam Kupczyk <akupczyk@ibm.com>
2026-07-22 14:18:46 +05:30
Hezko
12f33ad77c
Merge pull request #70035 from Hezko/fix-rbd-application
mgr/nvmeof: change pool application to nvmeof-meta instead of rbd
2026-07-22 11:42:13 +03:00
pujashahu
3ffe684ee1 mgr/dashboard: Add RADOS Namespace Support in NVMe-oF UI
Fixes: https://tracker.ceph.com/issues/78330

Signed-off-by: pujaoshahu <pshahu@redhat.com>
2026-07-22 14:09:39 +05:30
Tomer Haskalovitch
a419992330 mgr/dashboard: fix list_hosts and list_locations nvmeof cli commands empty table bug
Signed-off-by: Tomer Haskalovitch <tomer.haska@ibm.com>
2026-07-22 11:27:29 +03:00
Naman Munet
967e888682 mgr/dashboard: Edit should support setting one or more rgw service configuration individually, when multiple rgw service exist
fixes: https://tracker.ceph.com/issues/78332

Before
===
The configuration form had a TypeScript compilation error and could not properly support editing client-specific configurations. The form lacked the ability to:

- Configure different values for specific client entities (e.g., client.rgw.*, client.admin, client.radosgw-gateway)
- No way to Add/remove multiple client entity entries dynamically
- No way to provide autocomplete suggestions for existing client entities

After
===
Users can now edit configuration options individually for any client entity, with a clean UI that supports:

- Generic client entity support: Configure any client.* entity (RGW daemons, admin users, CephFS clients, etc.)
- Autocomplete with custom values: Select from existing client entities or enter custom ones (e.g., client.rgw.my-daemon, client.admin)
- Dynamic entry management: Add/remove multiple client configuration entries

Signed-off-by: Naman Munet <naman.munet@ibm.com>
2026-07-22 13:34:29 +05:30
Afreen Misbah
609d540833 mgr/dashboard: Fix spacings in donut chart in resiliency card
Fixes https://tracker.ceph.com/issues/78507

Signed-off-by: Afreen Misbah <afreen@ibm.com>
2026-07-22 13:33:07 +05:30
Afreen Misbah
7b29dcc7e6
Merge pull request #68495 from rhcs-dashboard/76169-inconsistant-tooltip-timestamp-format-performance-chart
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-22 13:25:57 +05:30
Afreen Misbah
d840b598ba
Merge pull request #69829 from rhcs-dashboard/77813-admin-user-permissions
mgr/dashboard: restricting admin user to revoke its own admin permissions

Reviewed-by: Afreen Misbah <afreen@ibm.com>
Reviewed-by: Sagar Gopale <sagar.gopale@ibm.com>
2026-07-22 13:21:15 +05:30
Afreen Misbah
df499f3134
Merge pull request #66607 from rhcs-dashboard/carbonized-import-modal
mgr/dashboard: carbonized-import-modal

Reviewed-by: Nizamudeen A <nia@redhat.com>
Reviewed-by: Devika Babrekar <devika.babrekar@ibm.com>
2026-07-22 13:20:35 +05:30
Afreen Misbah
37a9e87bfc
Merge pull request #70412 from rhcs-dashboard/disable-telemetry
mgr/dashboard: disable ibm telemetry on CI env

Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-22 13:04:07 +05:30
Dnyaneshwari Talwekar
1599d7fd50 mgr/dashboard: Subvolume group and subvolume not listed in NFS Share form on edit.
Signed-off-by: Dnyaneshwari Talwekar <dtalweka@redhat.com>

Fixes: https://tracker.ceph.com/issues/78281
2026-07-22 12:31:47 +05:30
Nizamudeen A
0cbf62c035 mgr/dashboard: replace gherkin-lint with prettier
I checked a couple of gherkin linters as an alternative but all of them
are not really well maintained. There are couple of new projeects but
even they are simply maintained by a single guy so i don't think it'll
get enough contributions later on. So instead, I am moving it to
prettier. Although we miss some functional validation, it'll take care
of some basic formatting.

Fixes: https://tracker.ceph.com/issues/78528
Signed-off-by: Nizamudeen A <nia@redhat.com>
2026-07-22 12:31:32 +05:30
Nizamudeen A
674605736a
Merge pull request #70361 from rhcs-dashboard/login-username-issue
mgr/dashboard: New dashboard user creation is successful with long characters > 256 but login fails


Reviewed-by: Nizamudeen A <nia@redhat.com>
2026-07-22 12:15:42 +05:30
Kautilya Tripathi
f7b898ab6c crimson/seastore: keep on-page checksum in sync after merge_content_to
When a rewrite transaction publishes via no-conflict handoff, merge_content_to
can update an already CRC-stamped initial-pending fixedkv page (copy-dest of a
concurrent split). It refreshed last_committed_crc but not the in-extent phy
checksum, so the page could be written with new content and a stale stamp.
Debug asserts only compare last_committed_crc to calc_crc32c(), so the mismatch
survived until a later cold read aborted with "fixedkv extent checksum
inconsistent".

Recalculate the CRC and call update_in_extent_chksum_field together in both
LBALeafNode and FixedKVInternalNode merge_content_to, matching
apply_delta_and_adjust_crc / update_lba_mappings.

Fixes: https://tracker.ceph.com/issues/77022
Signed-off-by: Kautilya Tripathi <kautilya.tripathi@ibm.com>
2026-07-22 11:32:25 +05:30
Nizamudeen A
0690deaa34 mgr/dashboard: disable ibm telemetry on CI env
looks like ibm telemetry is being run when you do `npm install` on CI
env. here's disabling that

Signed-off-by: Nizamudeen A <nia@redhat.com>
2026-07-22 09:21:50 +05:30
Kefu Chai
57f86c05a0
Merge pull request #69964 from sunyuechi/fix-crimson-pg-recovery-exception-scope
crimson/osd/pg_recovery: fix exception handler scope in recover_missing

Reviewed-by: Kefu Chai <k.chai@proxmox.com>
Reviewed-by: Xuehan Xu <xuxuehan@qianxin.com>
2026-07-22 09:04:46 +08:00
Yuri Weinstein
ccd0a90d4f
Merge pull request #70398 from yuriw/wip-yuriw-ptl-tool-auth-fail-fast
script/ptl-tool: fail fast and cleanly on invalid Redmine/GitHub credentials

Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
2026-07-21 16:56:30 -07:00
Yuri Weinstein
e04840b619
Merge pull request #70397 from yuriw/wip-yuriw-ptl-tool-new-qa-links
ptl-tool: add New QA Links to update-qa notification

Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
2026-07-21 16:39:59 -07:00
SrinivasaBharathKanta
4cb45f38b9
Merge pull request #70152 from sunyuechi/wip-osd-health-metrics-guard
osd: guard max_element end() deref in get_health_metrics
2026-07-22 04:41:48 +05:30
SrinivasaBharathKanta
d2003750cd
Merge pull request #70142 from sunyuechi/fix-ec-omap-iterator-invalidation
osd/ECBackend: fix iterator invalidation in omap_get
2026-07-22 04:41:04 +05:30
Adam C. Emerson
5a176d3f83
rgw/policy: Add rgw-policy-test command line tool
Annotated evaluation of a policy.

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
2026-07-21 17:55:08 -04:00
Adam C. Emerson
3a1686cf29
rgw: Add PrincipalIdentity for use in testing and utilities
This is an identity backed by a `Principal`, for use when we don't
have any sort of RGW driver.

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
2026-07-21 17:55:08 -04:00
Adam C. Emerson
7bdb627a85
rgw/policy: Allow logging policy evaluation
When the `rgw_copious_policy_logging` option is set to true, a
detailed trace of policy evaluation is logged.

Assisted-by: Claude Opus 4.6 <noreply@anthropic.com>
(I wanted to see how it performed on rebase conflict resolution.)
Assisted-by: Claude Fable 5 <noreply@anthropic.com>
(I figured I should have it look at the policy evaluation code for
bugs while it's included, and it found a few mistakes in output.)
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
2026-07-21 17:55:08 -04:00
Adam C. Emerson
7582c3200f
rgw: Make rgw::auth::Identity libfmt-able
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
2026-07-21 17:55:08 -04:00
Adam C. Emerson
05d82dab5f
rgw: Make ARNs libfmt-able
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
2026-07-21 17:55:08 -04:00
Adam C. Emerson
e885b11c1c
log: Add StringEntry to avoid using ostream
Create a log entry where we can fill a buffer with `format` instead of
needing to go through stringstream.

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
2026-07-21 17:55:08 -04:00
Adam C. Emerson
8191c81344
include/types: Add std::unordered_multimap support
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
2026-07-21 17:55:08 -04:00
Adam C. Emerson
c62ee110cf
rgw/policy: Add missing strings for actions
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
2026-07-21 17:55:08 -04:00
Adam C. Emerson
12d88e88b3
rgw/policy: Properly spell RemoveClientIdFromOIDCProvider in table
Typo in a lookup table.

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
2026-07-21 17:55:08 -04:00
Tomer Haskalovitch
a2057e2ea0 mgr/nvmeof: change pool application to nvmeof-meta instead of rbd
Signed-off-by: Tomer Haskalovitch <tomer.haska@ibm.com>
2026-07-21 23:04:58 +03:00
Afreen Misbah
0f2fd79457 mgr/dashboard: add view alerts button in data resiliency tab
Signed-off-by: Afreen Misbah <afreen@ibm.com>
2026-07-22 01:04:57 +05:30
Yuri Weinstein
f65b96c097 script/ptl-tool: add unit tests for the credential fail-fast fix
Extract the Redmine auth check added in the previous commit into a
standalone verify_redmine_auth(R) function so it can be unit tested
in isolation, and add src/script/test_ptl_tool.py covering:

- verify_redmine_auth(): invalid key (AuthError), a key that
  authenticates but lacks permission (ForbiddenError), a valid key,
  and confirming unrelated Redmine errors (ServerError) still
  propagate normally rather than being misreported as a credentials
  problem.
- AuditReport.post_consolidated_review(): logs success on 2xx, logs
  an error (rather than failing silently) on a non-2xx GitHub
  response, never calls out to GitHub under --dry-run, and is a
  no-op when the report has no issues to post.

No behavior change to verify_redmine_auth() itself -- this is a pure
extraction plus tests. ptl-tool.py has no existing test suite, so
these are self-contained (mocked Redmine/requests, no network access,
no real git checkout needed) and run with plain pytest; see the
module docstring for the exact invocation.

Signed-off-by: Yuri Weinstein <yweinste@redhat.com>
2026-07-21 09:58:00 -07:00
Yuri Weinstein
f7d688861a ptl-tool: use branch name as the QA link text, not a generic label
Signed-off-by: Yuri Weinstein <yweinste@redhat.com>
2026-07-21 16:55:11 +00:00
Yuri Weinstein
8bb99f9aee script/ptl-tool: fail fast and cleanly on invalid Redmine/GitHub credentials
Invalid credentials were handled inconsistently:

- A missing GitHub/Redmine token was caught with a clear error at
  startup, but an invalid or expired one was not: the Redmine
  client is constructed lazily by python-redmine, so a bad
  ~/.redmine_key was never actually exercised until
  manage_qa_tracker() called R.project.get() -- which runs *after*
  PRs have been merged and the integration branch/tag has already
  been pushed to ceph-ci. The result was an unhandled traceback
  well after real side effects had already happened, with no
  actionable message.

- post_consolidated_review() posted the consolidated audit review
  to GitHub without checking the response status at all, so a bad
  or under-scoped token would fail silently there while every other
  GitHub write call in the file already checks status_code.

Fix both:

- Immediately after constructing the Redmine client, make a cheap
  R.user.get('current') call and catch AuthError/ForbiddenError,
  exiting with a clear message before any merging or pushing
  happens.
- Check the response status in post_consolidated_review() and log
  an error on failure, matching the pattern already used by the
  other GitHub POST call sites in this file.

Verified with py_compile plus live --dry-run runs against
tracker.ceph.com: a deliberately invalid PTL_TOOL_REDMINE_API_KEY
now exits 1 immediately with a clear message and no git side
effects, while a valid key proceeds exactly as before.

Signed-off-by: Yuri Weinstein <yweinste@redhat.com>
2026-07-21 09:50:21 -07:00
Yuri Weinstein
7e5aa0a2c1 ptl-tool: add New QA Links to update-qa notification
Signed-off-by: Yuri Weinstein <yweinste@redhat.com>
2026-07-21 16:39:20 +00:00
Afreen Misbah
04cea032ec
Merge pull request #68075 from syedali237/tests-rbd
mgr/dashboard (test) : RBD snapshot mirroring toggle test

Reviewed-by: Afreen Misbah <afreen@ibm.com>
Reviewed-by: Dnyaneshwari Talwekar <dtalweka@redhat.com>
2026-07-21 22:04:39 +05:30
Afreen Misbah
a9a6255cd2 mgr/dashboard: Sanitize toast HTML and optimize notification service
- Escape user-controlled content before Carbon innerHTML rendering
- Whitelist localStorage deserialization keys, prune stale read map
- Replace deep equality with ID comparison in removeToast
- Gate ngAfterViewChecked DOM queries behind a dirty flag
- Deduplicate by title+type+message; show occurrences count
- Fix bell icon unread dot clearing on new occurrences
- Fix view more pre-selection via route queryParams observable
- Save individual notifications instead of HTML-merged messages
- Convert notifications bell component to signals with OnPush
- Add OnPush to notification-item and toast components
- Add e2e tests
- Fix styling of notification panel

Signed-off-by: Afreen Misbah <afreen@ibm.com>
2026-07-21 21:34:11 +05:30
Patrick Donnelly
091354ea59
Merge PR #70205 into main
* refs/pull/70205/head:
	script: s/Backports/Backport/

Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
2026-07-21 11:31:57 -04:00
Mykola Golub
ccd9d3e94b
Merge pull request #59902 from trociny/wip-68169
rgw_gc: don't fail when processing entry with nonexisting pool

Reviewed-by: Adam C. Emerson <aemerson@redhat.com>
Reviewed-by: Pritha Srivastava <prsrivas@redhat.com>
2026-07-21 18:23:36 +03:00
Jaya Prakash
793b757d3d common/options: restrict spillover configuration options to valid ranges
Fixes: https://tracker.ceph.com/issues/78492

Signed-off-by: Jaya Prakash <jayaprakash@ibm.com>
2026-07-21 15:21:47 +00:00
Alex Ainscow
f0c13de500
Merge pull request #68939 from aainscow/zero_sized_object
test/osd: Fix event loop context violations in test fixtures

Reviewed-by: Bill Scales <bill_scales@uk.ibm.com>
2026-07-21 16:13:58 +01:00
Yuri Weinstein
1cadb4cd14
Merge pull request #70350 from yuriw/wip-yuriw-ptl-tool-push-log
ptl-tool: log the ceph-ci push (and the equivalent git command)

Reviewed-by: Patrick Donnelly <pdonnell@redhat.com>
2026-07-21 07:48:50 -07:00
John Mulligan
d0bd301842
Merge pull request #70229 from Sodani/shsodani_exo_fix
mgr/smb: add support for RGW shares with external Ceph clusters

Reviewed-by: Avan Thakkar <athakkar@redhat.com>
Reviewed-by: Anoop C S <anoopcs@cryptolab.net>
Reviewed-by: John Mulligan <jmulligan@redhat.com>
2026-07-21 10:40:51 -04:00
Afreen Misbah
8cb0932382 mgr/dashboard: Add View more link to toasts
- adds view more link to toast which takes to view full toast message
- allow notifications to be clickable in notification panel taking user to the particular notification
- add routes to eahc notitification in notificatio page
- extend duration for error notifications - as per carbon error notifications should persist longer since users need time to read

Signed-off-by: Afreen Misbah <afreen@ibm.com>
2026-07-21 19:38:51 +05:30
Afreen Misbah
0834020077 mgr/dashboard: Truncate notification toasts
- truncated to 3 lines
- maximum 3 visible toasts
- duplicated toasts show "first maessage (+n more)"

Signed-off-by: Afreen Misbah <afreen@ibm.com>
2026-07-21 19:38:40 +05:30
Sridhar Seshasayee
b74a7f9db7
Merge pull request #70357 from sseshasa/wip-fix-ok-to-upgrade-min-pg-errmsg
mgr/DaemonServer: Make an ok-to-upgrade error message more generic

Reviewed-by: Nitzan Mordechai <nmordech@ibm.com>
2026-07-21 19:38:18 +05:30
Afreen Misbah
64e8dc794d
Merge pull request #69924 from syedali237/dashboard/notif-dest
mgr/dashboard : migrated notification destination tabs to resource pages

Reviewed-by: Afreen Misbah <afreen@ibm.com>
Reviewed-by: Abhishek Desai <abhishek.desai1@ibm.com>
2026-07-21 19:13:29 +05:30
Afreen Misbah
0077832b38
Merge pull request #70244 from rhcs-dashboard/fix-e2e
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-21 18:11:52 +05:30
Dnyaneshwari Talwekar
374e7a7796 mgr/dashboard: New dashboard user creation is successful with long characters > 256 but login fails
Signed-off-by: Dnyaneshwari Talwekar <dtalweka@redhat.com>

Fixes: https://tracker.ceph.com/issues/78439
2026-07-21 17:42:50 +05:30
Afreen Misbah
e197383c91
Merge pull request #70214 from rhcs-dashboard/fix-78232-main
Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-21 17:24:27 +05:30
Sagar Gopale
2c133a33f5 mgr/dashboard: carbonized-import-modal
Fixes: https://tracker.ceph.com/issues/74162

Signed-off-by: Sagar Gopale <sagar.gopale@ibm.com>
2026-07-21 17:12:52 +05:30
Abhishek Desai
0d0a241ba7 mgr/dashboard: grant hosts read to block-manager role
Block-manager users were denied access to the NVMe/TCP page because
host listing APIs require hosts read permission.

Fixes: https://tracker.ceph.com/issues/77952
Signed-off-by: Abhishek Desai <adesai@redhat.com>
2026-07-21 17:08:56 +05:30
Afreen Misbah
dde3f89434
Merge pull request #70344 from rhcs-dashboard/fix-78423-main
mgr/dashboard: fix rgw service form realm/zg/zone selection

Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-21 17:02:45 +05:30
Aashish Sharma
125bb2235e
Merge pull request #70216 from rhcs-dashboard/fix-78233-main
mgr/dashboard: set MOTD fails on FIPS enabled systems

Reviewed-by: Afreen Misbah <afreen@ibm.com>
2026-07-21 15:03:15 +05:30
Syed Ali Ul Hasan
6db9394d1a mgr/dashboard: fix nfs toggle test
Fixes: https://tracker.ceph.com/issues/75986
Signed-off-by: Syed Ali Ul Hasan <syedaliulhasan19@gmail.com>
2026-07-21 14:51:47 +05:30
Afreen Misbah
8d446a82e1
Merge pull request #69830 from rhcs-dashboard/77815-smb-rate-limiting
Reviewed-by: Afreen Misbah <afreen@ibm.com>
Reviewed-by: Pedro Gonzalez Gomez <pegonzal@redhat.com>
Reviewed-by: Sagar Gopale <sagar.gopale@ibm.com>
2026-07-21 14:41:23 +05:30
Afreen Misbah
8176a0ec08
Merge pull request #69430 from rhcs-dashboard/77369-ec-profile-creation-form-simplification
Reviewed-by: Afreen Misbah <afreen@ibm.com>
Reviewed-by: Sagar Gopale <sagar.gopale@ibm.com>
2026-07-21 14:41:15 +05:30
Afreen Misbah
5f0c1234dc
Merge pull request #69639 from rhcs-dashboard/77570-disabling-multisite-actions-dropdown-for-readonly-user
Reviewed-by: Afreen Misbah <afreen@ibm.com>
Reviewed-by: Sagar Gopale <sagar.gopale@ibm.com>
2026-07-21 14:41:07 +05:30
Syed Ali Ul Hasan
5293360de7 mgr/dashboard: migrated notif dest table tabs to resource pages
- Fixes: https://tracker.ceph.com/issues/77541

Signed-off-by: Syed Ali Ul Hasan <syedaliulhasan19@gmail.com>
2026-07-21 14:39:59 +05:30
Devika Babrekar
38a06d81f1 mgr/dashboard: moving filter under cluster and audit logs tab
Signed-off-by: Devika Babrekar <devika.babrekar@ibm.com>
2026-07-21 14:22:36 +05:30
Mykola Golub
73535b105d rgw_gc: don't fail when processing entry with nonexisting pool
Fixes: https://tracker.ceph.com/issues/68169
Signed-off-by: Mykola Golub <mykola.golub@clyso.com>
2026-07-21 10:50:45 +03:00
Dnyaneshwari Talwekar
8dbcc8e3db mgr/dashboard: Irrelevant description shown for the Realm field on the RGW service creation page.
Signed-off-by: Dnyaneshwari Talwekar <dtalweka@redhat.com>

Fixes: https://tracker.ceph.com/issues/78442
2026-07-21 13:01:08 +05:30
baum
c77c5eb8db
Merge pull request #69650 from baum/nvmeof-host-maintenance
cephadm: disable/enable NVMe-oF gateways during host maintenance
2026-07-21 14:09:24 +07:00
Naman Munet
3aa2b17a04 mgr/dashboard: fix dashboard cephadm e2e
fixes: https://tracker.ceph.com/issues/78279

Signed-off-by: Naman Munet <naman.munet@ibm.com>
2026-07-21 12:02:06 +05:30
Aashish Sharma
7927cf51e0 mgr/dashboard: set MOTD fails on FIPS enabled systems
Root cause: On FIPS-compliant systems, the OpenSSL provider rejects hashlib.md5() calls that lack the usedforsecurity=False flag, because MD5 is not an approved algorithm for security-sensitive use. This causes the MOTD set command — and the /api/motd create endpoint — to raise a ValueError and crash whenever a new MOTD is saved.

Fix: Pass usedforsecurity=False to hashlib.md5(). This tells the FIPS provider that MD5 is being used only as a non-cryptographic checksum (to detect whether a user has already dismissed a specific MOTD message), which is a legitimate use-case that FIPS allows.

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

Signed-off-by: Aashish Sharma <aasharma@redhat.com>
2026-07-21 11:48:28 +05:30
Avan Thakkar
ef160631a6 mgr/smb: only resync clusters that reference a changed resource
_find_modifications() regenerated every cluster whenever a JoinAuth,
UsersAndGroups, TLSCredential, or ExternalCephCluster changed, since
these can be shared across clusters. Use the existing lookup
helpers to resync only the clusters that actually reference it.

For rgw creds resync everything(just like old way), as narrowing
it scope means scanning every share in the store (which may not scale well),
so not worth a change.

Fixes: https://tracker.ceph.com/issues/78245
Signed-off-by: Avan Thakkar <athakkar@redhat.com>
2026-07-21 11:45:30 +05:30
Aashish Sharma
7dfb439308 mgr/dashboard: fix rgw service form realm/zg/zone selection
Fixes: https://tracker.ceph.com/issues/78423

Signed-off-by: Aashish Sharma <aasharma@redhat.com>
2026-07-21 11:04:38 +05:30
Sridhar Seshasayee
afd0b924e2 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)"

Fixes: https://tracker.ceph.com/issues/78425
Signed-off-by: Sridhar Seshasayee <sridhar.seshasayee@ibm.com>
2026-07-21 10:43:28 +05:30
Aashish Sharma
b6b591dcce python-common/rgw: fix get_realm_tokens returning empty result for realms with a secondary zone
Issue: The Export Multi-site Realm Token feature in the Dashboard showed no token and no realm details for any realm that had a secondary zone configured (i.e. the realm had been replicated to another cluster). The API endpoint GET /api/rgw/realm/get_realm_tokens returned an empty list or raised a 500 Internal Server Error.

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

Signed-off-by: Aashish Sharma <aasharma@redhat.com>
2026-07-21 10:33:08 +05:30
Yuri Weinstein
e820641861 ptl-tool: log the ceph-ci push (and the equivalent git command)
Previously, a real (non-dry-run) push of the integration branch/tag to
ceph-ci was silent -- only the "[DRY RUN] Would push ..." path logged
anything. Add matching log.info() calls on the real-push path, and
include the literal `git push <remote> <ref>` invocation in the message
so it can be copy-pasted and re-run manually if needed (e.g. after a
network blip, or to re-push without re-running the whole merge).

Signed-off-by: Yuri Weinstein <yweinste@redhat.com>
2026-07-20 17:44:47 -07:00
Abhishek Desai
21e7419557 mgr/dashboard : Fix access denied issue for readonly user and user role
fixes : https://tracker.ceph.com/issues/78418
Signed-off-by: Abhishek Desai <abhishek.desai1@ibm.com>
2026-07-20 20:37:06 +05:30
benhanokh
36374fc83f rgw: add rgw_enable_dedup_threads config to control per-RGW dedup participation
Add rgw_enable_dedup_threads (default true) and rgw_nfs_run_dedup_threads
(default false) config options to control whether a given RGW instance
participates in dedup background processing.

This follows the same pattern used by rgw_enable_gc_threads,
rgw_enable_lc_threads, and rgw_enable_restore_threads. The config is
evaluated at startup in init_dedup(); when disabled, the dedup Background
object is not created, the thread is not spawned, and the instance does
not register a RADOS watch on the dedup control object.

Disabled RGW instances are invisible to the dedup cluster coordination
mechanism -- they receive no notifications, cause no timeouts, and do
not grab shard tokens.

Signed-off-by: Gabriel BenHanokh <gbenhano@redhat.com>
Assisted-by: Cursor Opus-4.6 <cursoragent@cursor.com>
2026-07-20 17:25:52 +03:00
Bill Scales
401e0a4b8b osd: Fix Valgrind UninitCondition error in ECCommon::read_result_t::print()
omap_complete in read_result_t can be uninitialized if ECSubReadReply
contains an empty map of omap_complete information.

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

Signed-off-by: Bill Scales <bill_scales@uk.ibm.com>
2026-07-20 12:53:57 +01:00
Shweta Sodani
028b162d42 doc/mgr/smb: document manual RGW credentials for external cluster
Fixes: https://tracker.ceph.com/issues/77784
Signed-off-by: Shweta Sodani <ssodani@redhat.com>
2026-07-20 14:21:30 +05:30
Shweta Sodani
86f8616411 mgr/smb: Add test coverage for RGW share with external clusters
test cases include:
- RGW-only and mixed CephFS/RGW configurations
- Multiple shares and credential isolation

Fixes: https://tracker.ceph.com/issues/77784
Signed-off-by: Shweta Sodani <ssodani@redhat.com>
2026-07-20 14:14:28 +05:30
Shweta Sodani
a4b10fb820 mgr/smb: add support for RGW shares with external Ceph clusters
Implement support for creating RGW-backed SMB shares on external Ceph
clusters with user configuration.

Fixes: https://tracker.ceph.com/issues/77784
Signed-off-by: Shweta Sodani <ssodani@redhat.com>
2026-07-20 14:14:14 +05:30
Abhishek Desai
622483c52e mgr/dashboard: grant hosts read to smb-manager role
SMB cluster creation needs to list cluster hosts but the smb-manager
role lacked hosts read permission, causing Access Denied errors.

Fixes: https://tracker.ceph.com/issues/77952
Signed-off-by: Abhishek Desai <adesai@redhat.com>
2026-07-20 14:06:13 +05:30
Abhishek Desai
4bdd697d02 mgr/dashboard: grant pool read to cluster-manager role
Cluster-manager users were denied access to the CRUSH map page because
the underlying API requires pool read permission.

Fixes: https://tracker.ceph.com/issues/77952
Signed-off-by: Abhishek Desai <adesai@redhat.com>
2026-07-20 14:06:13 +05:30
Abhishek Desai
65034ed4e8 mgr/dashboard: exclude user scope from read-only system role
Read-only users could see the Settings icon but were denied access
to user management pages. Remove user read permission from the
read-only role so the administration menu stays hidden.

Fixes: https://tracker.ceph.com/issues/77952
Signed-off-by: Abhishek Desai <adesai@redhat.com>
2026-07-20 14:06:13 +05:30
Abhishek Desai
21c6df7d22 mgr/dashboard: hide Report an Issue for users without config-opt read
The Help menu option redirected read-only users to an Access Denied
page. Hide it when the user lacks config-opt read permission.

Fixes: https://tracker.ceph.com/issues/77952
Signed-off-by: Abhishek Desai <adesai@redhat.com>
2026-07-20 14:06:13 +05:30
Abhishek Desai
2fba7b733a mgr/dashboard: allow read-only users to view Silences page
Remove SilenceFormComponent from the silences list page, which
incorrectly required create permission and caused a blank page for
users with prometheus read access only.

Fixes: https://tracker.ceph.com/issues/77952
Signed-off-by: Abhishek Desai <adesai@redhat.com>

 Conflicts:
	src/pybind/mgr/dashboard/frontend/src/app/ceph/cluster/prometheus/prometheus-tabs/prometheus-tabs.component.html
        - Added permissions
2026-07-20 14:06:13 +05:30
Devika Babrekar
96ab03abe0 mgr/dashboard: Inconsistent tooltip timestamp format on performance card
Fixes: https://tracker.ceph.com/issues/76169

Signed-off-by: Devika Babrekar <devika.babrekar@ibm.com>
Co-authored-by: Aashish Sharma <Aashish.Sharma1@ibm.com>
2026-07-20 12:26:31 +05:30
Ville Ojamo
5b81b4eada doc/man: sync osd pool get/set flags in 8/ceph.rst
Add the flags listed for ceph osd pool set in ceph osd pool get.
Remove nonexistent flag debug_fake_ec_pool in ceph osd pool set.
Confirm the additions/removals from MonCommands.h.

Signed-off-by: Ville Ojamo <git2233+ceph@ojamo.eu>
2026-07-20 13:08:12 +07:00
Matan Breizman
271817bbb8 crimson/seastore: fix LogNode overflow from unsigned underflow in expect_overflow
The can_ow branch of LogManager's expect_overflow computed:
```
remain = capacity() - get_last_pos() - reserved_len
```
all uint32 operands, once the log leaf node is near full
(get_last_pos() + reserved_len >= capacity()) this subtraction underflows.

The node never rolls to a new leaf, instead it overflows the
16 KB block at commit-time delta replay.

Captured at the replay overflow point (per-collection batching, 4K randwrite):

```
  LogNode OVERFLOW at replay: pos=16641 size=58 reserved_len=3098
                              reserved_size=6 capacity=16328 LIMIT=16384

  log_node.h : In function 'void LogKVNodeLayout::set_last_pos(uint32_t)',
               ceph_assert(pos <= LOG_NODE_BLOCK_SIZE)
```

Here reserved_len (3098) is accurate: ~13543 committed + 3098 pending =
16641 = pos, i.e. the node was already ~13.5 KB full and the predictor
should have rolled over. Instead capacity - get_last_pos - reserved_len
went negative (16328 - ~13273 - 3098 < 0), wrapped in uint32, and the
check passed; pos reached 16641 > 16384 and set_last_pos asserted.

This was exposed by the per-coll batching where many overwrites append in
a single txn.

Signed-off-by: Matan Breizman <mbreizma@redhat.com>
2026-07-19 13:29:04 +00:00
Matan Breizman
32e28b9a70 crimson/seastore: cleanup collection-lock leftovers
Signed-off-by: Matan Breizman <mbreizma@redhat.com>
2026-07-19 13:29:04 +00:00
Matan Breizman
548f65f03e crimson/seastore: batch same-collection transactions
Previously, the per-collection ordering_lock provided both ordering and
single-holder exclusion, causing same-collection transactions to be serialized
one at a time.

Replace that with a per-collection queue and a single dispatch loop. When a
collection has a batch in flight, newly arriving transactions are queued.
The dispatch loop later drains the queue and merges transactions into one
SeaStore transaction (batch). Resulting in a one build, one ool_write and one journal record for the entire batch.

Only one batch is in flight per collection, so same-collection concurrency is
still prevented and ordering is preserved by the queue.

Callbacks are unchanged: FuturizedStore drains each caller's on_commit before
enqueueing, so only ops are merged. Each caller's promise is fulfilled when the
merged batch commits.

Signed-off-by: Matan Breizman <mbreizma@redhat.com>
2026-07-19 13:29:04 +00:00
Jesse Williamson
d21a73039a Fixup for (EXPERIMENTAL) FoundationDB support
Better-defined generator semantics; many internal improvements,
a couple found bug fixes, minor feature enhancements.

Considerable simplification that streamlines and improves the
baseline performance of library internals. Updates tests and
example documentation.

  - Add inclusive()/exclusive() selector endpoints.
  - default is still: select { a, b } == [a, b).
  - endpoint semantics work for reads, pagination,
    range-erase, split planning.
  - tests: selector endpoint combinations; endpoint handling; multiple
    value types from generators..
  - runtime byte-pointer helpers now actually just runtime

Assisted-by: Codex:GPT-5

Signed-off-by: Jesse Williamson <jfw@ibm.com>
2026-07-17 18:25:03 -07:00
Oguzhan Ozmen
1543a248a4 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.

Fixes: https://tracker.ceph.com/issues/78364
Signed-off-by: Oguzhan Ozmen <oozmen@bloomberg.net>
2026-07-17 19:26:46 +00:00
Bill Scales
9958e1399a osd: Fix Valgrind UninitCondition error in ECTransaction::Generate::Generate()
first_interval_in_write can be accessed before it has been initialized. This
is harmless as at worst it will just cause the 1st I/O to a FastEC PG to be
slightly slower than necessary by disabling some optimizations.

However it needs fixing so the teuthology Valgrind job can check for other
issues.

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

Signed-off-by: Bill Scales <bill_scales@uk.ibm.com>
2026-07-17 17:00:20 +01:00
Oguzhan Ozmen
80f203ee2a rgw/bilog/trim: (non-functional) set some bilog trim events to level 1
Raise a few low-frequency, high-signal bilog trim events so they are
visible at the default log level:

Trim pace is bounded by the rgw trim config options and these events
fire at most once per bucket or once per trim cycle, so they are not
expected to be chatty.

Signed-off-by: Oguzhan Ozmen <oozmen@bloomberg.net>
2026-07-17 14:24:16 +00:00
Oguzhan Ozmen
90f7bff07c rgw/bilog/trim: (non-functional) remove unused bucket_info from status shards CR
The peer -ENOENT handling in RGWReadRemoteStatusShardsCR no longer
consults the local bucket layout (whether Deleted flag set or not),
so its bucket_info member and the matching constructor arg are
not used anymore.

Signed-off-by: Oguzhan Ozmen <oozmen@bloomberg.net>
2026-07-17 14:24:16 +00:00
Oguzhan Ozmen
35135ceef5 rgw/bilog/trim: fix stale bucket.instance metadata after peer deletion
When a peer returns -ENOENT for a bucket's sync status, the old code only
purged the log if the local layout already carried BucketLogType::Deleted.
That flag may never arrive once the deleting zone removes its own instance
(#70858), so trim aborted with -EINVAL and left bucket.instance metadata
orphaned.

But an all-peer -ENOENT is also ambiguous: a live bucket whose sync status is
not yet initialized looks the same. The Deleted flag is unreliable here,
and the local entrypoint is not authoritative during creation (the
instance syncs to peers before the entrypoint). So on all-peer -ENOENT,
confirm the bucket is really gone by reading its entrypoint from the
metadata master, which is authoritative and available immediately on
creation; if this zone is the metadata master its local read already
suffices. Only on confirmed deletion remove the orphaned instance
directly; on any failure, skip and retry on the next trim cycle.

Fixes: https://tracker.ceph.com/issues/70858
Signed-off-by: Oguzhan Ozmen <oozmen@bloomberg.net>
2026-07-17 14:24:16 +00:00
Oguzhan Ozmen
6cc8ee2043 rgw/test/multisite: tests for bilog autotrim -ENOENT interpretation
An all-peer -ENOENT does not by itself mean a bucket is deleted: a live
bucket whose sync status is not yet initialized returns -ENOENT too. Add
two testcases that verifies we do not accidentally delete instance of a
live bucket:

- test_bucket_log_trim_live_empty_bucket_not_removed: a data-less bucket
  never gets sync status, so every peer reports -ENOENT; autotrim must not
  remove its instance.
- test_bucket_log_trim_new_bucket_entrypoint_not_synced: a new bucket
  whose instance has synced to the secondary before its entrypoint must
  survive autotrim. A delay_meta_sync_bucket_entrypoint_store injection
  forces that window.

Tests: https://tracker.ceph.com/issues/70858
Signed-off-by: Oguzhan Ozmen <oozmen@bloomberg.net>
2026-07-17 14:24:16 +00:00
Oguzhan Ozmen
43518e2f3e rgw/test/multisite: test for bilog autotrim -ENOENT race after secondary reshard
Adds test_bucket_log_trim_enoent_race_after_reshard to reproduce the
exact failure from tracker #70858: when autotrim runs on the primary
zone first and fully cleans up (including removing its own bucket.instance
metadata), then an autotrim on the secondary zone asks the primary
and receives -ENOENT.

The secondary hasn't received the BucketLogType::Deleted
flag yet (metadata sync is stalled via delay injection), so the current code
left StatusShards{generation=0, shards=[]} which caused take_min_status()
to fail with -EINVAL, leaving the bucket.instance metadata permanently
orphaned.

Tests: https://tracker.ceph.com/issues/70858
Signed-off-by: Oguzhan Ozmen <oozmen@bloomberg.net>
2026-07-17 14:24:15 +00:00
Devika Babrekar
c36c33a4d1 mgr/dashboard: updating SMB rate limiting form fields
Fixes: https://tracker.ceph.com/issues/77815
Signed-off-by: Devika Babrekar <devika.babrekar@ibm.com>
2026-07-17 17:05:53 +05:30
Devika Babrekar
31a3023ad6 mgr/dashboard:EC Profile creation form simplification and improvement
Fixes: https://tracker.ceph.com/issues/77369

Signed-off-by: Devika Babrekar <devika.babrekar@ibm.com>

 Conflicts:
	src/pybind/mgr/dashboard/frontend/src/app/ceph/pool/erasure-code-profile-form/erasure-code-profile-form-modal.component.html
-removed Directory field, as it is no longer needed in form
2026-07-17 17:05:35 +05:30
Devika Babrekar
bed41f0cb1 mgr/dashboard: Disable multisite Action dropdown for read-only user
Fixes: https://tracker.ceph.com/issues/77570
Signed-off-by: Devika Babrekar <devika.babrekar@ibm.com>

Conflicts:
	src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html
- added disabled property on table component to disable the table
	src/pybind/mgr/dashboard/frontend/src/app/shared/datatable/table-actions/table-actions.component.html
- added disabled property on table component to disable the table
2026-07-17 17:04:50 +05:30
Vallari Agrawal
6020010ca1
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)

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

Signed-off-by: Vallari Agrawal <vallari.agrawal@ibm.com>
2026-07-17 16:57:01 +05:30
Matthew N. Heler
18da8c4b90 s3tests: add tests for CopyObject tagging-directive
Add tests to validate that CopyObject honors x-amz-tagging-directive.

New tests:
- test_object_copy_retaining_tagging: default copy keeps the source tags
- test_object_copy_tagging_directive_copy: COPY keeps the source tags
- test_object_copy_tagging_ignored_without_directive: a tagging header is ignored without a REPLACE directive
- test_object_copy_replacing_metadata_and_copying_tagging: metadata REPLACE keeps the source tags
- test_object_copy_replacing_tagging: REPLACE applies the new tag set
- test_object_copy_replacing_tagging_with_none: REPLACE with no tags clears them
- test_object_copy_to_itself_replacing_tagging: retag onto the same key
- test_copy_object_replacing_tagging: replaced tags replicate across zones (multisite)

Signed-off-by: Matthew N. Heler <matthew.heler@hotmail.com>
2026-07-16 18:32:09 -05:00
Matthew N. Heler
e63f8d1aff rgw: honor CopyObject tagging-directive
CopyObject ignored x-amz-tagging-directive, so REPLACE never took
effect and copies kept the source object's tags. Honor the directive
independent of the metadata directive: REPLACE applies the given tags
(or clears them), COPY keeps the source tags.

Signed-off-by: Matthew N. Heler <matthew.heler@hotmail.com>
2026-07-16 18:32:09 -05:00
Aishwarya Mathuria
614860f320 crimson/os/seastore/rbm: fix pass_admin to pass admin command to ioctl
The coroutine conversion accidentally passed nullptr to NVME_IOCTL_ADMIN_CMD,
so Identify always failed and SeaStore fell back to st_blksize (e.g. 128K),
breaking journal roll_start alignment on mkfs.

Signed-off-by: Aishwarya Mathuria <amathuri@redhat.com>
2026-07-16 17:32:33 +05:30
Devika Babrekar
22e6ac309a mgr/dashboard: Fixing control flow on submit button for pool creation page
Fixes: https://tracker.ceph.com/issues/77030
Signed-off-by: Devika Babrekar <devika.babrekar@ibm.com>

Conflicts:
	src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-storage-class-form/rgw-storage-class-form.component.html
- updated conditions to render ui
2026-07-16 11:34:31 +05:30
Devika Babrekar
31565e1d39 mgr/dashboard: disabling role clearning button for admin user
Signed-off-by: Devika Babrekar <devika.babrekar@ibm.com>
2026-07-16 10:29:32 +05:30
Devika Babrekar
95a096f2c6 mgr/dashboard: restricting admin user to revoke its own admin permissions
Fixes: https://tracker.ceph.com/issues/77813

Signed-off-by: Devika Babrekar <devika.babrekar@ibm.com>

Conflicts:
	src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-form/user-form.component.html
-conflict while rebasing for SSO related parameters
	src/pybind/mgr/dashboard/frontend/src/app/core/auth/user-form/user-form.component.ts
-conflict while rebasing for SSO related variables
2026-07-16 10:29:32 +05:30
Sun Yuechi
517f9ce8f4 test/crimson/omap: enlarge values under ASan to shrink depth-driven tests
innernode_split_merge_balancing, omap_iterate, list and monotonic_inc grow
the tree to a fixed depth, so under ASan a larger value reaches the same
depth (same split/merge paths) with far fewer keys. It stays below the
per-kv limit so inserts keep the normal path.

Scale the extent-count bound in innernode_split_merge_balancing with the
value size accordingly.

Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-15 08:54:33 -07:00
Bill Scales
12b57e0254 osd: Fix PeeringState::proc_lease crash caused by race hazard
Fix race hazard in PeeringState::proc_lease where it read
a std::optional value which could be modified by another
thread at the same time causing an abort.

There is already a lock to protect accesses to this state
to make them thread safe, but the code wasn't using it.

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

Assisted-by: IBM Bob 2.0.1
Signed-off-by: Bill Scales <bill_scales@uk.ibm.com>
2026-07-15 16:15:28 +01:00
Bill Scales
b5ed9812f3 osd: Fix race hazard that caused duplicated message after OSD marked down
After an OSD that has not crashed is marked down there is a race hazard
where a message can be deliever to the OSD a second time. Different
asserts are hit depending on which message is duplicated.

This issue is seen in tests which mark osds down as an error inject
and very occasionally in the field where there are other issues
(e.g. network problems) that are causing osds which have not
crashed to be marked down.

The fix is to change the order in which the OSD processes a
new epoch and OSDMap which marks the OSD as down, it must
first consume the map so that old messages will be filtered
out and then call rebind to reset all the connections.

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

Assisted-by: IBM Bob 2.0.1
Signed-off-by: Bill Scales <bill_scales@uk.ibm.com>
2026-07-15 14:54:56 +01:00
Sun Yuechi
d440950eff client: don't use uninitialized keyid in fscrypt_dummy_encryption
When add_fscrypt_key() failed it jumped to the err label, which then
read the uninitialized keyid buffer into a key specifier and issued a
key removal for it. add_fscrypt_key() only populates keyid on success,
so this read uninitialized stack memory. Return the error directly
instead, since no key was added and there is nothing to remove.

Also stop overwriting the original error with remove_fscrypt_key()'s
return value on the policy-set failure path, so the real failure is
reported to the caller.

Fixes: https://tracker.ceph.com/issues/78246
Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-15 21:28:52 +08:00
Sun Yuechi
5985acca83 client: fix _wrap_name reporting success on encryption failure
_wrap_name() returns bool, but two encryption error paths did "return r"
with r < 0, which converts to true. Callers then treated the failure as
success and used the unencrypted name. Return false instead.

Fixes: https://tracker.ceph.com/issues/78246
Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-15 21:28:45 +08:00
Sun Yuechi
4a6e51c51a client: fix double unlock of client_lock in mount()
mount() holds client_lock through a unique_lock (cl), but the dummy
encryption path unlocked and relocked the underlying mutex directly,
bypassing cl. On fscrypt_dummy_encryption() failure it returns early
without relocking, so cl's destructor then unlocks an already-unlocked
mutex, which is undefined behavior. Only reachable when
client_fscrypt_dummy_encryption is enabled.

Unlock/relock through cl so its ownership state stays consistent.

Fixes: https://tracker.ceph.com/issues/78246
Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-15 21:28:09 +08:00
Sun Yuechi
e25810d879 Dockerfile.build: install sccache from distro packages when available
Prefer the distro-packaged sccache (installed via dnf) over downloading a
release tarball with curl. Fall back to the curl download when the package
is absent or on non-dnf distros, so existing behavior is unchanged.

Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-15 11:53:53 +08:00
Kefu Chai
c98598d388 script: s/Backports/Backport/
when referencing the "Backport" field in tracker.ceph.com, we
used "Backports". but the field is named "Backport" not "Backports".
in this change, we replace "Backports" with "Backport" when it
references this field.

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
2026-07-15 11:31:11 +08:00
Laura Flores
8926e0cce3 qa/suites/upgrade: ignore expected telemetry warning
We already re-opt into telemetry immediately after upgrading,
but this warning still sometimes comes up and is detected
by the badness check. Since we are following the normal
procedure to silence the warning, the next step is to
just ignore this.

Fixes: https://tracker.ceph.com/issues/77382
Signed-off-by: Laura Flores <lflores@ibm.com>
2026-07-14 16:34:28 -05:00
Kotresh HR
0bb27c7de1 tools/cephfs-mirror: report epoch time in last snap sync time
Store sync completion time (last_synced_snap.sync_time_stamp)
as utime_t (Unix epoch) instead of coarse monotonic time so
the metric is meaningful to operators.

Fixes: https://tracker.ceph.com/issues/76506
Signed-off-by: Kotresh HR <khiremat@redhat.com>
2026-07-14 20:37:04 +05:30
Sun Yuechi
ae789567a2 cmake: fix sccache job limits when dist is unavailable
The "disabled" search only matches sccache's Disabled("disabled")
payload, not "dist-client feature not selected" or the NotConnected
states. Those reach the success branch, so the job counts become
SchedulerStatus-NOTFOUND, JOB_POOLS is never defined, and ninja
rejects the manifest. Key off the JSON lookup's error instead to
cover every non-dist state.

Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-14 06:15:35 -07:00
Alex Ainscow
84fc350a1f test/osd: check the offset cache after slice_map()
Recompute ro_start and ro_end with compute_ro_range() and compare them
against the cached values, and cover single-shard maps.

Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-14 02:08:02 -07:00
Sun Yuechi
0d1b69a32c osd/ECUtil: fix slice bounds in slice_map()
slice_map() accumulated the slice bounds against the wrong operands,
and included parity shards in ro_start and ro_end, which only track
data.

Introduced by 9e2841ab16 ("osd: Introduce optimized EC").

Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-14 02:08:02 -07:00
Mohit Agrawal
1aa027d8f1 test/crimson: Add request_budget_retry in test_backfill.cc
Signed-off-by: Mohit Agrawal <mohit84.agrawal@gmail.com>
2026-07-14 10:28:56 +05:30
Mohit Agrawal
c6782dce47 crimson/osd: fix backfill deadlock in BackfillState::Waiting
BackfillState::Enqueuing unconditionally posts RequestWaiting{}
when budget available return false. Waiting can exit only via
ObjectPushed which requires an in-flight push. If the budget
is exhausted with no pushes in flight no objectPush will ever
arrive and the PG stalls permanently.

Solution: Introduce a dedicated BudgetBlocked state. When budget_available()
is false and tracked_objects_completed()==true post RequestBudgetBlocked{}
instead of RequestWaiting{}.BudgetBlocked calls get_backfill_throttle()
to suspend until a slots free up, then fires BudgetAvailable{} which
transitions directly back to Enqueuing to dispatch the next batch of pushes.

Fixes: https://tracker.ceph.com/issues/77804
Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
2026-07-14 10:28:03 +05:30
Sun Yuechi
068b27cac8 osd: guard max_element end() deref in get_health_metrics
slow_op_pools can be empty (all poolids 0/out-of-range) while
slow_op_types is not, making max_element return end(); dereferencing
it is UB.

Fixes: https://tracker.ceph.com/issues/78184
Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-13 20:10:42 +08:00
Sun Yuechi
1dd8cb8bd5 osd/ECBackend: fix iterator invalidation in omap_get
The removed_ranges erase loop in omap_get() called erase(out_it->first),
which invalidates out_it, then did ++out_it on the dead iterator (UB).
When adjacent keys were erased this skipped keys that should have been
removed:

    Expected: { "k01", "k05", "k06" }
    Actual:   { "k01", "k03", "k05", "k06" }

Extract the loop into a static remove_keys_in_ranges() helper so it can
be unit tested without an ObjectStore, and rewrite it as a range erase:
removed_ranges is a sorted map of non-overlapping [start, end) ranges.

Fixes: https://tracker.ceph.com/issues/78177
Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-13 14:45:15 +08:00
Kefu Chai
e61de15ddb mgr: forward the root-logger fallback at the record's own level
ceph_module.mgr_log() emitted every record at dout(0): a record either
passed the Python-side gate and went unconditionally to both the log
file and the in-memory recent buffer, or never reached the C++ log at
all.  The two-level debug_mgr semantics (file level / memory level)
never applied, so capturing third-party DEBUG logs meant sending each
record to the log file and a log_max_recent slot; with the kubernetes
client logging multi-megabyte HTTP response bodies at DEBUG, the
recent buffer alone could grow to tens of gigabytes.

Pass the record's level through mgr_log() and emit at the mapped ceph
level: CRITICAL/ERROR at 0, WARNING at 1, INFO at 2, DEBUG at 20.
INFO maps to 2 so it stays visible in the log file at the default
debug_mgr=2/5; DEBUG maps to 20 so floods are dropped there, while
debug_mgr=2/20 captures third-party DEBUG in the in-memory buffer
without touching the log file.  The Python-side gate follows the
higher of the two debug_mgr levels so memory-only records still
reach the C++ side.

Fixes: https://tracker.ceph.com/issues/77633
Signed-off-by: Kefu Chai <k.chai@proxmox.com>
2026-07-13 10:18:21 +08:00
Kefu Chai
3705db8974 mgr: route the root-logger fallback through a module-independent sink
MgrRootHandler captures third-party logs from the Python root logger
and emits them through the _ceph_log method of whichever mgr module
last configured logging.  A handler on the root logger outlives any
single module, so once that module unloads the handler emits through
a stale pointer until another module reconfigures logging.

Add a free mgr_log() function to the ceph_module binding, emitting
via dout() like PyModuleRunner::log but with no PyModule involved,
and rewrite MgrRootHandler to route through it.  The handler no
longer references a module instance, so it cannot go stale.

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
2026-07-13 10:12:04 +08:00
Yuri Weinstein
c9ac93fdbb 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).

Fixes: https://tracker.ceph.com/issues/78149
Signed-off-by: Yuri Weinstein <yweinste@redhat.com>
2026-07-10 08:53:36 -07:00
Kefu Chai
4af78378a9 qa/tasks/mgr: bounce the mgrs once per test class
The dashboard backend API suite occasionally fails in CI on the job's
7200 second timeout alone, with every test passing. Suite runtime
varies with builder load: identical runs of the same 311 tests took
anywhere from about 5400 to over 7000 seconds, and teardown needs
roughly another 180 seconds on top. On the runs that landed at the
high end, only 60 to 80 seconds of margin were left before the
timeout fired. Cutting setup overhead gives the suite that margin
back.

DashboardTestCase.setUpClass() restarted every mgr twice: once in
MgrTestCase.setup_mgrs(), and again right after in _assign_ports(),
whose only job is to set the per-mgr dashboard port, which has to
happen while the mgrs are down.

Let subclasses declare their module ports in a MODULE_PORTS class
attribute instead. setup_mgrs() assigns them while the daemons are
already stopped, so the single restart it performs picks them up and
the second stop/fail/restart cycle disappears.

The assignment loop moves to _assign_module_ports(). _assign_ports()
keeps its old stop/assign/restart contract for callers that reassign
ports outside class setup (test_prometheus, test_dashboard,
test_module_selftest) and delegates to the shared helper.

With 66 dashboard test classes per API suite run this removes one
full mgr bounce per class, roughly 10 to 15 minutes of wall clock in
the CI runs examined.

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
2026-07-10 13:54:32 +08:00
Daniel Gryniewicz
5f01d5c058 RGW - Standalone - Add a standalone build target and RPM
Add a build target that builds standalone RGW in addition to normal RGW,
and add an RPM for it that only installs the necessary bits.

Signed-off-by: Daniel Gryniewicz <dang@fprintf.net>
2026-07-06 11:19:42 -04:00
Daniel Gryniewicz
9a0e3c70c1 Fix tools/tests link with bluestore disabled
Signed-off-by: Daniel Gryniewicz <dang@fprintf.net>
2026-07-06 11:19:42 -04:00
Sun Yuechi
2c736cf70e crimson/osd/pg_recovery: fix exception handler scope in recover_missing
Member access binds tighter than ?:, so the handler attached only to the
recover_object() branch and exceptions from recover_object_with_throttle()
escaped unhandled. Parenthesize the ternary to cover both branches.

Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-06 22:44:35 +08:00
Kefu Chai
80b9067286 blk,build: drop BlueStore PMEM support
BlueStore's PMEMDevice backend targets byte-addressable persistent
memory exposed as a DAX device, in practice Intel Optane DC persistent
memory. Intel Optane has been discontinued since 2021 and there is no
mainstream replacement, so the backend has effectively no hardware left
to run on. It was always experimental and has seen no functional change
since the DML/DSA offload landed in 2022; every commit to it since has
been a formatting sweep.

Keeping it builds in a chain of dependencies that nothing else needs:
libpmem, libndctl and libdaxctl, plus dml for the DSA offload that only
works on a Sapphire Rapids CPU. Remove the backend and everything tied
to it.

RBD persistent write-back cache (WITH_RBD_RWL) still uses PMDK's
libpmemobj, so the pmdk submodule, WITH_SYSTEM_PMDK, Buildpmdk and
Findpmdk stay. WITH_SYSTEM_PMDK now depends on WITH_RBD_RWL alone, and
Buildpmdk no longer builds ndctl support.

- remove the WITH_BLUESTORE_PMEM option, HAVE_BLUESTORE_PMEM and
  HAVE_LIBDML
- delete src/blk/pmem/PMEMDevice.{cc,h} and the pmem block_device_t
- drop the pmem value from the bdev_type option
- remove the --bluestore-pmem vstart flag
- drop the libpmem, libndctl and libdaxctl build deps from debian and
  rpm, keeping libpmemobj for RWL
- delete the Finddml, Findndctl and Finddaxctl cmake modules
- remove the DSA/DML and ndctl documentation

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
2026-07-05 08:37:21 +08:00
Kefu Chai
d8dde402b6 mgr: add heap admin socket command
the mon, osd and mds register a "heap" asok command that forwards to
ceph_heap_profiler_handle_command, but the mgr never did, so
`ceph daemon mgr.<id> heap stats` returns "no valid command found".
that leaves no way to tcmalloc-profile a leaking mgr through its admin
socket, which is what chasing mgr memory growth needs.

register the same command on MgrStandby's admin socket. its hook lives
for the whole process, so it works on both the standby and the active
mgr. heap output goes to the bufferlist, as on the other daemons, while
status keeps using the formatter.

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
2026-07-04 20:41:57 +08:00
Edwin Rodriguez
c4472c0f9c cephfs-tool: wait for async callbacks before freeing contexts
bench_async_write_worker destroyed AsyncIOContext while the finisher
still ran async_io_callback after setting completed. Track in-flight
callbacks per worker and drain before tearing down the io_queue.

Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
2026-07-02 14:40:22 -04:00
Sun Yuechi
f988cd91e3 tools/rados: do not close stdout after 'export' to '-'
'export' sets file_fd to STDOUT_FILENO for '-', but cleanup guarded
close() on STDIN_FILENO (always true), closing stdout. Guard on
STDOUT_FILENO instead, matching the 'import' path.

Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-01 09:46:24 -07:00
Sun Yuechi
0ea4eb19b0 tools/rados: fix leaked/unflushed output stream in 'ls'
`if (!stdout)` tested the libc FILE* (never null) instead of the
use_stdout flag, so the ofstream was never deleted when writing to
a file, leaking it and leaving its buffer unflushed. Test use_stdout.

Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-01 09:46:24 -07:00
Sun Yuechi
ef0b9f339f tools/rados: do not close stdin after put/append from '-'
do_put()/do_append() set fd to STDIN_FILENO for '-', but cleanup
guarded close() on STDOUT_FILENO (always true), closing stdin.
Guard on STDIN_FILENO instead.

Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-01 09:46:24 -07:00
Sun Yuechi
e9750006d3 test/common: add RISC-V CRC32C performance benchmark to unittest_crc32c
Signed-off-by: Yuechi Sun <sunyuechi@gmail.com>
2026-07-01 21:38:27 +08:00
Edwin Rodriguez
18179111ba cephfs-tool: Add support for --async-write-fsync and --shared-file options
Add --async-write-fsync and --shared-file benchmark options.

--async-write-fsync sets ceph_ll_io_info.fsync on each async write to model
Ganesha-style write+commit and skips the post-phase ceph_ll_fsync when enabled.
--shared-file directs all worker threads at one file to stress client_lock
contention on a single inode.  Both options are recorded in JSON/text output.

Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
2026-07-01 09:11:15 -04:00
Edwin Rodriguez
eb107111d6 cephfs-tool: add stdout output support for JSON benchmark results
Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
2026-07-01 09:11:15 -04:00
Edwin Rodriguez
9c0f43e7da doc/cephfs: document new benchmark options and features
Fixes: https://tracker.ceph.com/issues/76183
Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
2026-07-01 09:11:15 -04:00
Edwin Rodriguez
c8d115ee5d cephfs-tool: Add filesystem statistics reporting before and after benchmark runs
Added filesystem stats reporting to cephfs-tool.cc.

Helper functions
• fetch_statvfs() — uses ceph_ll_statfs on the root inode when --async-io
  is set, otherwise ceph_statfs on mount_root
• report_fs_stats() — prints and optionally JSON-encodes:
  • Total / free blocks
  • File count

When it runs
• Before the iteration loop (after the bench directory is created)
• After all iterations finish (before the final report and optional cleanup)

Console output example

Filesystem statistics (before iterations):
  Total blocks:      ...
  Free blocks:       ...
  Files:             ...

JSON output (when --json is used) adds a filesystem_stats section with before
and after objects containing the same fields.

Fixes: https://tracker.ceph.com/issues/76183
Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
2026-07-01 09:11:15 -04:00
Edwin Rodriguez
d9dbfde2b7 cephfs-tool: add explanatory comments for benchmark features
Add inline comments documenting each benchmark enhancement and its CLI
flag. Remove duplicate ceph_pthread_setname calls accidentally introduced
in sync read/write workers.

Fixes: https://tracker.ceph.com/issues/76183
Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
2026-07-01 09:11:15 -04:00
Edwin Rodriguez
d96e5b148f cephfs-tool: set thread names for read/write workers
Set pthread names on all benchmark worker threads (wr-worker-N, rd-worker-N)
via ceph_pthread_setname so they are visible in top, perf, and lockstat
output during profiling.

Fixes: https://tracker.ceph.com/issues/76183
Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
2026-07-01 09:11:15 -04:00
Edwin Rodriguez
51f9de8d34 cephfs-tool: add async I/O support with configurable queue depth
Add --async-io to use ceph_ll_nonblocking_readv_writev for read and write
workers instead of synchronous ceph_read/ceph_write. Add --queue-depth to
limit outstanding async I/Os per thread via a counting semaphore and
pre-allocated AsyncIOContext pool. Async write uses ceph_ll_create; async
read uses ceph_ll_walk + ceph_ll_open and defers inode release until all
async ops including readahead complete. Reject --async-io with
--per-thread-mount since async workers require a shared mount.

Fixes: https://tracker.ceph.com/issues/76183
Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
2026-07-01 09:11:15 -04:00
Edwin Rodriguez
47f7475545 cephfs-tool: add lockstat collection and dumping support
When built with CEPH_LOCKSTAT, add --lockstat-dump and --lockstat-threshold
to collect lock contention data during benchmark phases. Start collection
at benchmark begin, reset counters before each read/write phase, and dump
per-iteration/per-phase JSON files (e.g. base_iter1_write.json). Requires
a lockstat-instrumented libcephfs build.

Fixes: https://tracker.ceph.com/issues/76183
Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
2026-07-01 09:11:15 -04:00
Edwin Rodriguez
f6b2f5fee9 cephfs-tool: Add support for overriding 'ms_async_op_threads' configuration
Add --msgr-workers to override ms_async_op_threads before mount (1-24;
0 keeps the ceph.conf default). Controls async messenger I/O threads
independently of benchmark worker thread count. Validate the range at
startup and include the resolved value in console and JSON output.

Fixes: https://tracker.ceph.com/issues/76183
Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
2026-07-01 09:11:15 -04:00
Edwin Rodriguez
50fc43d006 cephfs-tool: Add progress tracking support for benchmarking phases
Add --progress and --progress-interval to display live bandwidth, IOPS,
and ETA during read/write phases. A background progress_reporter thread
aggregates per-thread stats every 100ms and prints a single updating
status line. Progress percentage is based on elapsed time when --duration
is set, otherwise on files completed. Make ThreadStats fields atomic so
workers and the reporter can access them concurrently.

Fixes: https://tracker.ceph.com/issues/76183
Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
2026-07-01 09:11:15 -04:00
Edwin Rodriguez
75b0084f52 cephfs-tool: Add support for overriding the 'client_oc' options
Add --client-oc and --client-oc-size to override libcephfs object cacher
settings before ceph_init. Enables benchmarking with the object cacher
enabled or disabled and with a configurable cache size. Resolved values
are shown in console and JSON output.

Fixes: https://tracker.ceph.com/issues/76183
Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
2026-07-01 09:11:15 -04:00
Edwin Rodriguez
e565a2b06d cephfs-tool: Add support for dumping performance counters
Add --perf-dump to write libcephfs client performance counters to a file
at the end of the benchmark. Uses ceph_get_perf_counters() while the
mount is still active so counters reflect the full benchmark run.

Fixes: https://tracker.ceph.com/issues/76183
Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
2026-07-01 09:11:15 -04:00
Edwin Rodriguez
71cd5806a8 cephfs-tool: Add duration-based phase limit for benchmarking
Add --duration to cap each read and write phase at N seconds instead of
running until all files are processed. Workers loop until the time limit
expires, cycling through their per-thread file set in duration mode.
Pass phase start time into worker threads for consistent cross-thread
duration checks. Only count each unique file once in stats even when
filenames are reused across cycles.

Fixes: https://tracker.ceph.com/issues/76183
Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
2026-07-01 09:11:15 -04:00
Edwin Rodriguez
c1ef8e868a cephfs-tool: Add JSON output support for benchmarking results
Add --json to write structured benchmark results (configuration,
per-iteration read/write metrics, and cross-iteration summary statistics)
to a file using JSONFormatter. Extend print_statistics() to optionally
mirror mean, stddev, min, and max into the JSON document. Improve
parse_size() to accept both SI (1000-based, e.g. "4MB") and binary
(1024-based, e.g. "4MiB") size suffixes.

Fixes: https://tracker.ceph.com/issues/76183
Signed-off-by: Edwin Rodriguez <edwin.rodriguez1@ibm.com>
2026-07-01 09:11:15 -04:00
Sun Yuechi
439534ab9b rgw/sts: fix inverted tokenCode length validation
validate_input() rejected the valid TOKEN_CODE_SIZE length and accepted
all others. Compare with != so only a wrong length is rejected.

Fixes: https://tracker.ceph.com/issues/77872
Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-01 20:20:20 +08:00
Sun Yuechi
93febadb4f rgw/posix: fix inverted If-None-Match check allowing overwrite
If-None-Match: * must fail when the object exists, but the posix writer
did the opposite, disabling overwrite protection. Return
PRECONDITION_FAILED when the object exists.

Fixes: https://tracker.ceph.com/issues/77871
Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-01 20:19:10 +08:00
Sun Yuechi
b703ec465f rgw: fix inverted MFA check in DeleteMultiObj
A versioned delete carries a non-empty version-id, but the MFA guard
flagged the empty case: versioned deletes bypassed MFA while plain
deletes wrongly required it. Test !instance.empty().

Fixes: https://tracker.ceph.com/issues/77869
Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-01 20:17:09 +08:00
Sun Yuechi
11c48eb547 crimson/mon/MonClient: fix use-after-free in run_command
run_command() captured a reference to the just-emplaced mon_commands
element into the send_message() continuation. mon_commands is a
std::vector, so a concurrent run_command() could reallocate it and
invalidate the reference before the continuation ran, dereferencing
freed memory.

No caller issues concurrent commands today, but the pattern is unsafe.

Take the result future before issuing the message, then coroutinize
the method so it is awaited directly instead of being captured into a
continuation lambda.

Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-01 19:13:32 +08:00
Sun Yuechi
2601725fbf mds/Server: return after responding on error paths
handle_client_symlink (-ENAMETOOLONG), reclaim_session (-EPERM) and
handle_client_readdir_snapdiff (-EINVAL) each sent an error reply on a
failure path but fell through, replying to the same MDRequest a second
time. reclaim_session additionally went on to bind reclaiming_from,
bypassing the auth_name check. Return right after sending the reply.

Fixes: https://tracker.ceph.com/issues/77862
Signed-off-by: Sun Yuechi <sunyuechi@iscas.ac.cn>
2026-07-01 19:07:59 +08:00
Ville Ojamo
276da74687 common/options: fix invalid command for STS key generation
Config rgw_sts_key expects a 16-character hexadecimal key. The option
long_desc has an example with openssl rand -hex 16 which generates
16 hexadecimal bytes that consist of 32 characters rendered in ASCII.
Modify the example openssl command to output 8 bytes that matches the
required length of 16 characters.

Remove a space after a slash.

Raised in the doc bugs pad.

Signed-off-by: Ville Ojamo <git2233+ceph@ojamo.eu>
2026-07-01 16:19:15 +07:00
Alex Ainscow
bcc26ce6f2 test/osd: Fix event loop context violations in test fixtures
Refactored test fixture code to properly execute object context operations
within event loop context, fixing ceph_assert(osd != -1) failures.

Key changes:
- Split functions calling get_object_context() into implementation and
  wrapper functions that schedule work on the primary OSD via event loop
- Added accessor functions (set_object_context, clear_object_contexts)
  to encapsulate per-OSD object_contexts map access
- Fixed lambda capture bug in PGBackendTestFixture::update_osdmap()
- Refactored run_parallel_recovery_and_verify_callbacks() to execute
  within proper event loop context

All object context operations now execute within the correct OSD context,
with get_object_context() as the single point querying the current OSD.

Added test ZeroSizeObjectWithAttributesRecovery to verify recovery of
zero-size objects with attributes after primary failover, ensuring
attributes are properly recovered on the failed shard.

Signed-off-by: Alex Ainscow <aainscow@uk.ibm.com>
Assisted-by: IBM-Bob:Claude-Sonnet

# Conflicts:
#	src/test/osd/ECPeeringTestFixture.cc
2026-06-29 16:20:13 +01:00
Mykola Golub
a4b7a658c1 mon: allow getpoolstats for mgr modules
Fixes: https://tracker.ceph.com/issues/74490
Signed-off-by: Mykola Golub <mykola.golub@clyso.com>
2026-06-28 20:45:50 +03:00
Nitzan Mordechai
0bac6af3c1 mgr/ClusterState: remove debug 30 memory spike
Remove the full pg_map JSON dump at dout(30) which was flooding the
log queue with multi-MB entries on every tick. The much smaller
incremental dump is retained for debugging.

Fixes: https://tracker.ceph.com/issues/64082
Signed-off-by: Nitzan Mordechai <nmordech@ibm.com>
2026-06-28 10:54:42 +00:00
Pablo de Lara
a273687273 crypto/isa-l: use new API added in v2.25
New API with parameter checking was added in v2.25,
deprecating the original API used in this module.

Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
2026-06-24 06:20:31 +00:00
Pablo de Lara
ff5970bb5b crypto/isa-l: update isa-l_crypto submodule to v2.26.1
Signed-off-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
2026-06-24 06:18:27 +00:00
Laura Flores
5475faaddf qa/tasks: change collectl source to download.ceph.com
Getting it from our own service avoids exposing us to
supply chain attacks in our QA infrastructure.

Fixes: https://tracker.ceph.com/issues/76927
Signed-off-by: Laura Flores <lflores@ibm.com>
2026-06-23 15:13:33 -05:00
Nathan Hoad
59bf2dad24 rgw: For consistency with C++ core guidelines, make these out-params pass-by-reference instead of pointers.
Signed-off-by: Nathan Hoad <nhoad@bloomberg.net>
AI-Assisted: I used AI to make this change. I reviewed and tested it manually.
2026-06-23 10:35:11 -04:00
Nathan Hoad
12efa485f5 rgw: Implement support for --shard-id in radosgw-admin's gc process and gc list commands
This allows operators to do targeted GC work against specific shards, instead of working on all of them.

Signed-off-by: Nathan Hoad <nhoad@bloomberg.net>
AI-Assisted: Used AI to generate the initial implementation.
2026-06-23 10:31:27 -04:00
Alexander Indenbaum
048d2534a6 cephadm: disable/enable NVMe-oF gateways during host maintenance
Automatically run nvme-gw disable before stopping daemons on maintenance
enter and nvme-gw enable after daemons restart on maintenance exit so
gateways fail over in a controlled way.

Signed-off-by: Alexander Indenbaum <aindenba@redhat.com>
2026-06-22 22:04:10 +03:00
lizhipeng
aed96f7a2f rgw:adding bucket index Indexless check when bi list
fixes:https://tracker.ceph.com/issues/73861

Signed-off-by: lizhipeng <qiuxinyidian@gmail.com>
Co-authored-by: lizhipeng <lizhipeng@kylinos.cn>
2026-06-23 00:00:07 +08:00
Lumir Sliva
960b330d87 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:

  const LCExpiration& rule_expiration =
    (obj_key.instance.empty()) ? expiration : noncur_expiration;

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).

Tracker: https://tracker.ceph.com/issues/77564
Reported-by: Saravanan Palanisamy
Signed-off-by: Lumir Sliva <61183145+lumir-sliva@users.noreply.github.com>
2026-06-22 17:28:45 +02:00
stzuraski898
078b140ad1 mgr/ActivePyModules: refactor perf schema section management to use RAII
Refactor get_perf_schema_python() and get_unlabeled_perf_schema_python() to use Formatter::ObjectSection and Formatter::ArraySection RAII helpers instead of manual close_section() calls. Manual closes have have led to crashes when close_section() calls were left unguarded, for example when an OSD with no perf counters had it's perf counters queried.

Fixes: https://tracker.ceph.com/issues/74693
Signed-off-by: stzuraski898 <steven.zuraski@ibm.com>
2026-06-15 21:19:09 +00:00
Kefu Chai
8dfb7b10f9 common/cmdparse: tighten the check for positional and req in desc
we encode the description of a certain command, with comma-separated
values, which are represented in "key=value" form. the keys are a set of
configuration names, and their values' types are known. among them,
"positional" and "req" are of boolean type. before this change, we
consider "true" and "True" as true, otherwise we consider the value as
false. but this setting leads to confusion and could be a headache for
maintainers.

since all commands are determined at compile-time, and all commands'
descs use "req=true" or "req=false" if "req" is specified, we are
allowed to tighten the check to enforce that these values are "true"
or "false".

this change serves as part of a sanity check of all command
descriptions, as all command descriptions are formatted into JSON
with the "get_command_description" asok command and the mon command
with the same name. and it does not change the runtime behavior.

Signed-off-by: Kefu Chai <k.chai@proxmox.com>
2026-06-12 14:25:31 +08:00
Kefu Chai
1f43c35096 mon: correct typo in command desc
in 46586b22, we introduced the "osd pool application get" command, but
in this command's desc field, we had a typo: "req=fasle". this didn't
cause any issue, because we always consider "true" or "True" as true,
and false otherwise when formatting a command desc into JSON.

but it's still not correct. let's fix this typo.

Fixes: https://tracker.ceph.com/issues/77251
Signed-off-by: Kefu Chai <k.chai@proxmox.com>
2026-06-12 14:25:31 +08:00
senol.colak
ec59888070 mgr: preserve reported hostname when CRUSH host is unavailable
The previous patch only injected hostname into the metadata map for OSDs
that were placed under a CRUSH host bucket. For mds/mgr/mon daemons and
for OSDs absent from CRUSH, the original 'state->hostname = ...' line
was removed without a replacement, so update_metadata received a map
with no 'hostname' key. DaemonState::set_metadata only updates
state->hostname when the map carries it, so a daemon restarting on a
different host would be re-inserted in by_server under its stale
hostname.

Always seed m["hostname"] from the metadata-reported hostname, then
prefer the CRUSH host when available. Apply the same shape to the
new-daemon branch so set_metadata uniformly drives state->hostname,
removing the redundant direct assignment.

Reported-by: code review on PR #66757
Signed-off-by: senol.colak <senol.colak@sap.com>
2026-05-29 11:33:36 +02:00
senol.colak
dcd9c5bac5 mgr: override OSD hostname with CRUSH physical host in all metadata paths
In containerized deployments (e.g. Rook), OSD daemons report the
pod/container hostname. The CRUSH map records the physical host.
This mismatch causes 'ceph device ls' to show pod names instead of
physical hosts, breaking host-based device correlation.

Fix by deriving the CRUSH host bucket name for each OSD and substituting
it as the canonical hostname in all three metadata paths:
- MetadataUpdate::finish (async mon metadata fetch, primary path)
- Mgr::load_all_metadata OSD bulk-load (startup/failover)
- DaemonServer::fetch_missing_metadata (via MetadataUpdate)

The override is a no-op when the OSD is absent from CRUSH or when the
OSD map is not yet available.

Fixes: https://tracker.ceph.com/issues/73080
Signed-off-by: senol.colak <senol.colak@sap.com>
2026-05-27 22:43:27 +02:00
Max Kellermann
adfbcec205 osd/SnapMapper: use fmt::format() instead of fmt::sprintf()
fmt::sprintf() is a legacy API and cannot use custom formatters.

Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
2026-05-26 13:12:43 +02:00
Max Kellermann
fdf82a5d8d common/options: convert long_desc to C string
All parameters are C strings (either C literals, except for
MgrMonitor::update_from_paxos()) and there's no point in copying all
of them onto the heap during startup.

Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
2026-05-26 13:02:27 +02:00
Zac Dover
4f0bec39bf doc/mgr: document ceph-exporter
Add stub-level information for the documentation of ceph-exporter. Explicit configuration instructions are still missing from this documentation, and should in the future be supplied.

Signed-off-by: Zac Dover <zac.dover@clyso.com>
2026-05-26 20:45:15 +10:00
Dhairya Parmar
4e7c5b11bb doc/cephfs: document resizing subvolumes using units
Fixes: https://tracker.ceph.com/issues/62673
Signed-off-by: Dhairya Parmar <dparmar@redhat.com>
2026-02-19 10:16:02 +05:30
Dhairya Parmar
839355f700 qa: test resizing subvolumes with various valid and invalid sizes
Fixes: https://tracker.ceph.com/issues/62673
Signed-off-by: Dhairya Parmar <dparmar@redhat.com>
2026-02-19 10:16:02 +05:30
Dhairya Parmar
15e5a9dc0b mgr/volumes: simplify comaparison
Signed-off-by: Dhairya Parmar <dparmar@redhat.com>
2026-02-19 10:16:02 +05:30
Dhairya Parmar
efe11565b8 mgr/volumes: accept unit with subvolume resize
Specifying the quota or resize for a subvolume requires the value in bytes.
This value can now be accepted as <num><unit>. Also allows floating point numbers.

Fixes: https://tracker.ceph.com/issues/62673
Signed-off-by: Dhairya Parmar <dparmar@redhat.com>
2026-02-19 10:16:02 +05:30
705 changed files with 28336 additions and 9492 deletions

View File

@ -1,6 +1,12 @@
---
name: "Check for Incompatible Licenses"
on: [pull_request]
on:
pull_request_target:
branches:
- main
- umbrella
- tentacle
- squid
permissions:
contents: read

View File

@ -38,7 +38,7 @@ jobs:
# Backport checks need to be run ONLY on the main branch on ceph/ceph (not forks)
if: github.ref == 'refs/heads/main' && github.repository == 'ceph/ceph'
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
sparse-checkout: |
src/script/backport-create-issue

View File

@ -25,7 +25,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout main branch for pull_request_target
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: 'refs/heads/main'
path: ceph

View File

@ -1,17 +1,22 @@
---
name: "Pull Request Checklist"
on:
pull_request:
pull_request_target:
branches:
- main
types:
- edited
- opened
- reopened
# https://docs.github.com/en/actions/reference/workflows-and-actions/workflow-syntax#defining-access-for-the-github_token-scopes
permissions:
pull-requests: read
jobs:
pr_checklist:
runs-on: ubuntu-latest
name: Verify
name: Verify Checklist
steps:
- name: Sleep for 30 seconds
run: sleep 30s

View File

@ -1,11 +1,15 @@
---
name: "Check for missing .qa links"
on:
pull_request:
pull_request_target:
branches:
- main
- umbrella
- tentacle
- squid
types:
- opened
- synchronize
- edited
- reopened
permissions:
contents: read
@ -15,18 +19,21 @@ jobs:
runs-on: ubuntu-latest
if: github.repository == 'ceph/ceph'
steps:
- name: Checkout main branch for pull_request_target
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Checkout verify-qa script from main branch
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: 'refs/heads/main'
path: main
sparse-checkout: |
src/script/verify-qa
sparse-checkout-cone-mode: false
- name: Checkout PR HEAD
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: ${{ github.event.pull_request.head.sha }}
path: pull_request
- name: verify .qa links
run: ../main/src/script/verify-qa
working-directory: pull_request/
- name: Run verification script
run: |
./main/src/script/verify-qa ./pull_request

View File

@ -41,7 +41,7 @@ jobs:
steps:
- name: Checkout main branch for pull_request_target
if: github.event_name == 'pull_request_target'
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
ref: 'refs/heads/main'
path: 'ceph'
@ -49,7 +49,7 @@ jobs:
- name: Checkout default branch for other events
if: github.event_name != 'pull_request_target'
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
path: 'ceph'
fetch-depth: 0

View File

@ -38,6 +38,8 @@ baergj Joshua Baergen <jbaergen@digitalocean.com>
baruza Barbora Ančincová <bara@redhat.com>
bassamtabbara Bassam Tabbara <bassam.tabbara@quantum.com>
batrick Patrick Donnelly <pdonnell@ibm.com>
baum Alexander Indenbaum <aindenba@redhat.com>
BBoozmen Oguzhan Ozmen <oozmen@bloomberg.net>
benhanokh Gabriel Benhanokh <gbenhano@redhat.com>
bigjust Justin Caratzas <jcaratza@redhat.com>
bill-scales Bill Scales <bill_scales@uk.ibm.com>
@ -59,7 +61,7 @@ cloudbehl Ankush Behl <cloudbehl@gmail.com>
CourtneyCCaldwell Courtney Caldwell <ccaldwel@redhat.com>
Daniel-Pivonka Daniel Pivonka <dpivonka@redhat.com>
ddiss David Disseldorp <ddiss@suse.de>
devikab25 Devika Babrekar <devika.babrekar@ibm.com>
devikab25 Devika Babrekar <devika.babrekar@ibm.com>
Devp00l Stephan MĂĽller <smueller@suse.com>
dillaman Jason Dillaman <dillaman@redhat.com>
djgalloway David Galloway <dgallowa@redhat.com>
@ -123,6 +125,7 @@ mchangir Milind Changire <mchangir@redhat.com>
mctaggatart Sage McTaggart <sagemct@ibm.com>
melissa-kun-li Melissa Li <melissali@redhat.com>
mgfritch Michael Fritch <mfritch@suse.com>
mheler Matthew Heler <matthew.heler@hotmail.com>
mikechristie Mike Christie <mchristi@redhat.com>
mkogan1 Mark Kogan <mkogan@redhat.com>
mmgaggle Kyle Bader <kbader@ibm.com>

3
.gitmodules vendored
View File

@ -85,3 +85,6 @@
[submodule "src/lss"]
path = src/lss
url = https://chromium.googlesource.com/linux-syscall-support
[submodule "src/librdkafka"]
path = src/librdkafka
url = https://github.com/confluentinc/librdkafka.git

View File

@ -117,13 +117,13 @@ if(WITH_SCCACHE)
ERROR_VARIABLE sccache_dist_status_error
GET "${sccache_dist_status}" SchedulerStatus 1 num_cpus
)
string(FIND "${sccache_dist_status}" "disabled" find_result)
if(find_result EQUAL -1)
if(sccache_dist_status_error)
message(WARNING "Using sccache, but it is not configured for distributed "
"compilation: ${sccache_dist_status_error}")
else()
message(STATUS "Using sccache with distributed compilation. Effective cores: ${sccache_cores}")
set(NINJA_MAX_COMPILE_JOBS ${sccache_cores})
set(NINJA_MAX_LINK_JOBS ${sccache_cores})
else()
message(WARNING "Using sccache, but it is not configured for distributed complilation")
endif()
else()
message(WARNING "Using sccache, but cannot determine maximum job value since cmake version is <3.19")
@ -223,7 +223,6 @@ if(LINUX)
elseif(FREEBSD)
set(HAVE_UDEV OFF)
set(HAVE_LIBAIO OFF)
set(HAVE_LIBDML OFF)
set(HAVE_BLKID OFF)
set(HAVE_KEYUTILS OFF)
else()
@ -304,13 +303,6 @@ if(WITH_LIBURING)
endif()
endif()
CMAKE_DEPENDENT_OPTION(WITH_BLUESTORE_PMEM "Enable PMDK libraries" OFF
"WITH_BLUESTORE" OFF)
if(WITH_BLUESTORE_PMEM)
find_package(dml)
set(HAVE_LIBDML ${DML_FOUND})
endif()
CMAKE_DEPENDENT_OPTION(WITH_RBD_MIRROR "Enable build for rbd-mirror daemon executable" OFF
"WITH_RBD" OFF)
@ -325,7 +317,7 @@ CMAKE_DEPENDENT_OPTION(WITH_RBD_SSD_CACHE "Enable librbd persistent write back c
"WITH_RBD" OFF)
CMAKE_DEPENDENT_OPTION(WITH_SYSTEM_PMDK "Require and build with system PMDK" OFF
"WITH_RBD_RWL OR WITH_BLUESTORE_PMEM" OFF)
"WITH_RBD_RWL" OFF)
CMAKE_DEPENDENT_OPTION(WITH_RBD_UBBD "Enable ubbd support for rbd device utility" OFF
"WITH_RBD" OFF)
@ -335,10 +327,6 @@ if(WITH_RBD_UBBD)
build_ubbd()
endif()
if(WITH_BLUESTORE_PMEM)
set(HAVE_BLUESTORE_PMEM ON)
endif()
CMAKE_DEPENDENT_OPTION(WITH_SPDK "Enable SPDK" OFF
"CMAKE_SYSTEM_PROCESSOR MATCHES i386|i686|amd64|x86_64|AMD64|aarch64|riscv64" OFF)
option(WITH_SYSTEM_SPDK "Require a system SPDK instead of building bundled src/spdk" OFF)
@ -356,10 +344,10 @@ if(WITH_SPDK)
endif(WITH_SPDK)
if(WITH_BLUESTORE)
if(NOT AIO_FOUND AND NOT HAVE_POSIXAIO AND NOT WITH_SPDK AND NOT WITH_BLUESTORE_PMEM)
if(NOT AIO_FOUND AND NOT HAVE_POSIXAIO AND NOT WITH_SPDK)
message(SEND_ERROR "WITH_BLUESTORE is ON, "
"but none of the bluestore backends is enabled. "
"Please install libaio, or enable WITH_SPDK or WITH_BLUESTORE_PMEM (experimental)")
"Please install libaio, or enable WITH_SPDK")
endif()
endif()
@ -587,12 +575,15 @@ option(WITH_RADOSGW "RADOS Gateway is enabled" ON)
option(WITH_RADOSGW_BEAST_OPENSSL "RADOS Gateway's Beast frontend uses OpenSSL" ON)
option(WITH_RADOSGW_AMQP_ENDPOINT "RADOS Gateway's pubsub support for AMQP push endpoint" ON)
option(WITH_RADOSGW_KAFKA_ENDPOINT "RADOS Gateway's pubsub support for Kafka push endpoint" ON)
option(WITH_SYSTEM_RDKAFKA "build against system librdkafka instead of the bundled submodule" OFF)
option(WITH_RADOSGW_LUA_PACKAGES "RADOS Gateway's support for dynamically adding lua packagess" ON)
option(WITH_RADOSGW_FDB "FoundationDB support for RADOS Gateway (experimental)" OFF)
option(WITH_RADOSGW_DBSTORE "DBStore backend for RADOS Gateway" ON)
option(WITH_RADOSGW_MOTR "CORTX-Motr backend for RADOS Gateway" OFF)
option(WITH_RADOSGW_DAOS "DAOS backend for RADOS Gateway" OFF)
option(WITH_RADOSGW_D4N "D4N wrapper for RADOS Gateway" ON)
option(WITH_RADOSGW_FDB "FoundationDB support for RADOS Gateway (experimental)" OFF)
option(WITH_RADOSGW_POSIX "POSIX backend for RADOS Gateway" ON)
cmake_dependent_option(WITH_RADOSGW_STANDALONE "Standalone RADOS Gateway" ON WITH_RADOSGW_POSIX OFF)
option(WITH_RADOSGW_RADOS "RADOS backend for Rados Gateway" ON)
option(WITH_RADOSGW_SELECT_PARQUET "Support for s3 select on parquet objects" ON)
option(WITH_RADOSGW_ARROW_FLIGHT "Build arrow flight when not using system-provided arrow" OFF)

View File

@ -36,7 +36,9 @@ RUN DISTRO=$DISTRO \
FOR_MAKE_CHECK=${FOR_MAKE_CHECK} \
bash -x ${CEPH_CTR_SRC}/buildcontainer-setup.sh
RUN \
if [ $(uname -m) != ppc64le ]; then \
if rpm --quiet --query sccache 2>/dev/null || { command -v dnf >/dev/null 2>&1 && dnf install -y sccache 2>/dev/null; }; then \
echo "sccache provided by distro packages"; \
elif [ $(uname -m) != ppc64le ]; then \
SCCACHE_ARCH="$(uname -m)"; \
if [ "$SCCACHE_ARCH" = riscv64 ]; then SCCACHE_ARCH=riscv64gc; fi; \
SCCACHE_URL="${SCCACHE_REPO}/releases/download/${SCCACHE_VERSION}/sccache-${SCCACHE_VERSION}-${SCCACHE_ARCH}-unknown-linux-musl.tar.gz"; \

View File

@ -36,6 +36,8 @@
- The `rgw default data log backing` option is removed and it is no longer
possible to create clusters with an omap based datalog.
- `radosgw-admin datalog type` will only accept `--log_type=fifo`.
* RGW: iam:RemoveClientIdFromOIDCProvider is now a recognized action for
policy, corrected from a typo of iam:RemoveCientIdFromOIDCProvider
* MGR: The default values of ``mon_target_pg_per_osd`` and ``mon_max_pg_per_osd``
have been increased from 100 and 250 to 200 and 500, respectively. These values
@ -267,6 +269,22 @@
rather rigid and also challenging to disseminate in some environments. The
key can be embedded in the migration spec or just referenced from there while
stored in the MON config-key store.
* RBD: `Group::list_images` python API will now correctly raise an ObjectNotFound
error when invoked on a non-existent group. The C APIs `rbd_group_image_list`,
`rbd_snap_list`, `rbd_group_snap_list` and C++ API `group_image_list` will now
return ENOENT instead of masking the error and returning 0.
* BlueStore: The experimental PMEM device backend has been removed, together
with the ``pmem`` value of the ``bdev_type`` option and the DML/DSA offload
path. The hardware it targeted, Intel Optane DC persistent memory, was
discontinued in 2022. The RBD persistent write-back cache, which also uses
PMDK, is unaffected.
Existing OSDs backed by persistent memory in fsdax mode (a block device such
as ``/dev/pmem0``) keep working on the default ``aio`` backend over the same
data. Remove any explicit ``bdev_type = pmem`` from their configuration. OSDs
on a devdax namespace (a character device such as ``/dev/dax0.0``) will no
longer start, because no remaining backend can open one; reconfigure the
namespace to fsdax with ``ndctl`` or re-provision them before upgrading.
>=20.0.0

View File

@ -125,6 +125,7 @@
# not x86_64
%bcond_with system_qat
%endif
%bcond_with system_rdkafka
%if 0%{?fedora} || 0%{?suse_version} || 0%{?rhel} || 0%{?openEuler}
%global weak_deps 1
%endif
@ -338,7 +339,11 @@ BuildRequires: pkgconfig(yaml-cpp) >= 0.6
BuildRequires: pkgconfig(librabbitmq)
%endif
%if 0%{with kafka_endpoint}
BuildRequires: pkgconfig(rdkafka) >= 1.1.0
%if 0%{with system_rdkafka}
BuildRequires: librdkafka-devel >= 2.11
%else
BuildRequires: cyrus-sasl-devel
%endif
%endif
%if 0%{with lua_packages}
Requires: lua-devel
@ -379,13 +384,6 @@ BuildRequires: pkgconfig(nlohmann_json)
BuildRequires: pkgconfig(libevent)
%endif
%if 0%{with system_pmdk}
%if 0%{?suse_version}
BuildRequires: pkgconfig(libndctl) >= 63
%else
BuildRequires: pkgconfig(libndctl) >= 63
BuildRequires: pkgconfig(libdaxctl) >= 63
%endif
BuildRequires: pkgconfig(libpmem)
BuildRequires: pkgconfig(libpmemobj) >= 1.8
%endif
%if 0%{with system_arrow}
@ -1163,12 +1161,28 @@ Requires: mailcap
%if 0%{?weak_deps}
Recommends: gawk
%endif
%if 0%{with kafka_endpoint} && !0%{with system_rdkafka}
Provides: bundled(librdkafka) = 2.12.1
%endif
%description radosgw
RADOS is a distributed object store used by the Ceph distributed
storage system. This package provides a REST gateway to the
object store that aims to implement a superset of Amazon's S3
service as well as the OpenStack Object Storage ("Swift") API.
%package rgw-standalone
Summary: Rados REST gateway for filesystems
%if 0%{?suse_version}
Group: System/Filesystems
%endif
Conflicts: ceph-common
Conflicts: radosgw
%description rgw-standalone
This package provides an Object REST gateway (S3 and Swift) on
top of a filesystem that aims to implement a superset of Amazon's S3
service as well as the OpenStack Object Storage ("Swift") API.
It does not require or provide any of the rest of the Ceph services.
%package -n cephfs-top
Summary: top(1) like utility for Ceph Filesystem
BuildArch: noarch
@ -1822,6 +1836,9 @@ cmake .. \
%if 0%{with system_pmdk}
-DWITH_SYSTEM_PMDK:BOOL=ON \
%endif
%if 0%{with system_rdkafka}
-DWITH_SYSTEM_RDKAFKA:BOOL=ON \
%endif
%if 0%{without jaeger}
-DWITH_JAEGER:BOOL=OFF \
%endif
@ -2099,6 +2116,7 @@ exit 0
%{_bindir}/ceph-authtool
%{_bindir}/ceph-conf
%{_bindir}/ceph-dencoder
%{_bindir}/ceph-diff-sorted
%{_bindir}/ceph-rbdnamer
%{_bindir}/ceph-syn
%{_bindir}/cephfs-data-scan
@ -2619,9 +2637,19 @@ fi
%{_bindir}/radosgw-token
%{_bindir}/radosgw-es
%{_bindir}/radosgw-object-expirer
%{_bindir}/rgw-gap-list
%{_bindir}/rgw-gap-list-comparator
%{_bindir}/rgw-orphan-list
%{_bindir}/rgw-policy-check
%{_bindir}/rgw-policy-test
%{_bindir}/rgw-restore-bucket-index
%{_mandir}/man8/ceph-diff-sorted.8*
%{_mandir}/man8/radosgw.8*
%{_mandir}/man8/rgw-gap-list.8*
%{_mandir}/man8/rgw-orphan-list.8*
%{_mandir}/man8/rgw-policy-check.8*
%{_mandir}/man8/rgw-policy-test.8*
%{_mandir}/man8/rgw-restore-bucket-index.8*
%dir %{_localstatedir}/lib/ceph/radosgw
%{_unitdir}/ceph-radosgw@.service
%{_unitdir}/ceph-radosgw.target
@ -2661,6 +2689,19 @@ if [ $1 -ge 1 ] ; then
fi
fi
%files rgw-standalone
%dir %{_docdir}/ceph
%doc %{_docdir}/ceph/sample.ceph.conf
%dir %{_libdir}/ceph
%{_libdir}/ceph/libceph-common.so.*
%{_bindir}/rgw-standalone
%{_bindir}/rgw-standalone-admin
%dir %{_localstatedir}/lib/ceph/radosgw
%post rgw-standalone -p /sbin/ldconfig
%postun rgw-standalone -p /sbin/ldconfig
%files osd
%{_bindir}/ceph-clsinfo
%{_bindir}/ceph-erasure-code-tool

View File

@ -1,4 +1,4 @@
function(build_pmdk enable_ndctl)
function(build_pmdk)
include(FindMake)
find_make("MAKE_EXECUTABLE" "make_cmd")
@ -15,12 +15,6 @@ function(build_pmdk enable_ndctl)
endif()
set(LIBPMEM_INTERFACE_LINK_LIBRARIES Threads::Threads)
if(${enable_ndctl})
set(ndctl "y")
list(APPEND LIBPMEM_INTERFACE_LINK_LIBRARIES ndctl::ndctl daxctl::daxctl)
else()
set(ndctl "n")
endif()
# Use debug PMDK libs in debug lib/rbd builds
if(CMAKE_BUILD_TYPE STREQUAL Debug)
@ -34,7 +28,7 @@ function(build_pmdk enable_ndctl)
ExternalProject_Add(pmdk_ext
${source_dir_args}
CONFIGURE_COMMAND ""
BUILD_COMMAND ${make_cmd} CC=${CMAKE_C_COMPILER} "EXTRA_CFLAGS=${pmdk_cflags}" NDCTL_ENABLE=${ndctl} BUILD_EXAMPLES=n BUILD_BENCHMARKS=n DOC=n
BUILD_COMMAND ${make_cmd} CC=${CMAKE_C_COMPILER} "EXTRA_CFLAGS=${pmdk_cflags}" NDCTL_ENABLE=n BUILD_EXAMPLES=n BUILD_BENCHMARKS=n DOC=n
BUILD_IN_SOURCE 1
BUILD_BYPRODUCTS "<SOURCE_DIR>/src/${PMDK_LIB_DIR}/libpmem.a" "<SOURCE_DIR>/src/${PMDK_LIB_DIR}/libpmemobj.a"
INSTALL_COMMAND "")

View File

@ -1,42 +0,0 @@
# - Find libdaxctl
# Find the daxctl libraries and includes
#
# daxctl_INCLUDE_DIR - where to find libdaxctl.h etc.
# daxctl_LIBRARIES - List of libraries when using daxctl.
# daxctl_FOUND - True if daxctl found.
find_path(daxctl_INCLUDE_DIR daxctl/libdaxctl.h)
if(daxctl_INCLUDE_DIR AND EXISTS "${daxctl_INCLUDE_DIR}/libdaxctl.h")
foreach(ver "MAJOR" "MINOR" "RELEASE")
file(STRINGS "${daxctl_INCLUDE_DIR}/libdaxctl.h" daxctl_VER_${ver}_LINE
REGEX "^#define[ \t]+daxctl_VERSION_${ver}[ \t]+[0-9]+[ \t]+.*$")
string(REGEX REPLACE "^#define[ \t]+daxctl_VERSION_${ver}[ \t]+([0-9]+)[ \t]+.*$"
"\\1" daxctl_VERSION_${ver} "${daxctl_VER_${ver}_LINE}")
unset(${daxctl_VER_${ver}_LINE})
endforeach()
set(daxctl_VERSION_STRING
"${daxctl_VERSION_MAJOR}.${daxctl_VERSION_MINOR}.${daxctl_VERSION_RELEASE}")
endif()
find_library(daxctl_LIBRARY daxctl)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(daxctl
REQUIRED_VARS daxctl_LIBRARY daxctl_INCLUDE_DIR
VERSION_VAR daxctl_VERSION_STRING)
mark_as_advanced(daxctl_INCLUDE_DIR daxctl_LIBRARY)
if(daxctl_FOUND)
set(daxctl_INCLUDE_DIRS ${daxctl_INCLUDE_DIR})
set(daxctl_LIBRARIES ${daxctl_LIBRARY})
if(NOT (TARGET daxctl::daxctl))
add_library(daxctl::daxctl UNKNOWN IMPORTED)
set_target_properties(daxctl::daxctl PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${daxctl_INCLUDE_DIRS}"
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION "${daxctl_LIBRARIES}"
VERSION "${daxctl_VERSION_STRING}")
endif()
endif()

View File

@ -1,58 +0,0 @@
# - Find libdml
# Find the dml and dmlhl libraries and includes
#
# DML_INCLUDE_DIR - where to find dml.hpp etc.
# DML_LIBRARIES - List of libraries when using dml.
# DML_HL_LIBRARIES - List of libraries when using dmlhl.
# DML_FOUND - True if DML found.
find_path(DML_INCLUDE_DIR
dml/dml.hpp
PATHS
/usr/include
/usr/local/include)
find_library(DML_LIBRARIES NAMES dml libdml PATHS
/usr/local/
/usr/local/lib64
/usr/lib64
/usr/lib)
find_library(DML_HL_LIBRARIES NAMES dmlhl libdmlhl PATHS
/usr/local/
/usr/local/lib64
/usr/lib64
/usr/lib)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(dml DEFAULT_MSG
DML_LIBRARIES
DML_INCLUDE_DIR
DML_HL_LIBRARIES)
mark_as_advanced(
DML_LIBRARIES
DML_INCLUDE_DIR
DML_HL_LIBRARIES)
if(DML_FOUND)
if(NOT (TARGET dml::dml))
add_library(dml::dml UNKNOWN IMPORTED)
set_target_properties(dml::dml PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${DML_INCLUDE_DIR}"
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION "${DML_LIBRARIES}")
endif()
if(NOT (TARGET dml::dmlhl))
add_library(dml::dmlhl UNKNOWN IMPORTED)
set_target_properties(dml::dmlhl PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${DML_INCLUDE_DIR}"
INTERFACE_LINK_LIBRARIES ${CMAKE_DL_LIBS}
INTERFACE_COMPILE_FEATURES cxx_std_17
INTERFACE_COMPILE_DEFINITIONS "DML_HW"
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
IMPORTED_LOCATION "${DML_HL_LIBRARIES}")
endif()
endif()

View File

@ -1,42 +0,0 @@
# - Find libndctl
# Find the ndctl libraries and includes
#
# ndctl_INCLUDE_DIR - where to find libndctl.h etc.
# ndctl_LIBRARIES - List of libraries when using ndctl.
# ndctl_FOUND - True if ndctl found.
find_path(ndctl_INCLUDE_DIR ndctl/libndctl.h)
if(ndctl_INCLUDE_DIR AND EXISTS "${ndctl_INCLUDE_DIR}/libndctl.h")
foreach(ver "MAJOR" "MINOR" "RELEASE")
file(STRINGS "${ndctl_INCLUDE_DIR}/libndctl.h" ndctl_VER_${ver}_LINE
REGEX "^#define[ \t]+ndctl_VERSION_${ver}[ \t]+[0-9]+[ \t]+.*$")
string(REGEX REPLACE "^#define[ \t]+ndctl_VERSION_${ver}[ \t]+([0-9]+)[ \t]+.*$"
"\\1" ndctl_VERSION_${ver} "${ndctl_VER_${ver}_LINE}")
unset(${ndctl_VER_${ver}_LINE})
endforeach()
set(ndctl_VERSION_STRING
"${ndctl_VERSION_MAJOR}.${ndctl_VERSION_MINOR}.${ndctl_VERSION_RELEASE}")
endif()
find_library(ndctl_LIBRARY ndctl)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(ndctl
REQUIRED_VARS ndctl_LIBRARY ndctl_INCLUDE_DIR
VERSION_VAR ndctl_VERSION_STRING)
mark_as_advanced(ndctl_INCLUDE_DIR ndctl_LIBRARY)
if(ndctl_FOUND)
set(ndctl_INCLUDE_DIRS ${ndctl_INCLUDE_DIR})
set(ndctl_LIBRARIES ${ndctl_LIBRARY})
if(NOT (TARGET ndctl::ndctl))
add_library(ndctl::ndctl UNKNOWN IMPORTED)
set_target_properties(ndctl::ndctl PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${ndctl_INCLUDE_DIRS}"
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION "${ndctl_LIBRARIES}"
VERSION "${ndctl_VERSION_STRING}")
endif()
endif()

View File

@ -23,6 +23,7 @@ usr/bin/rgw-gap-list
usr/bin/rgw-gap-list-comparator
usr/bin/rgw-orphan-list
usr/bin/rgw-policy-check
usr/bin/rgw-policy-test
usr/bin/rgw-restore-bucket-index
usr/bin/rbd
usr/bin/rbdmap
@ -44,6 +45,7 @@ usr/share/man/man8/mount.ceph.8
usr/share/man/man8/rados.8
usr/share/man/man8/radosgw-admin.8
usr/share/man/man8/rgw-policy-check.8
usr/share/man/man8/rgw-policy-test.8
usr/share/man/man8/rgw-gap-list.8
usr/share/man/man8/rbd.8
usr/share/man/man8/rbdmap.8

6
debian/control vendored
View File

@ -76,13 +76,11 @@ Build-Depends: automake,
libgrpc++-dev,
protobuf-compiler-grpc,
libutf8proc-dev (>= 2.2.0),
librdkafka-dev (>= 1.1.0),
librdkafka-dev (>= 2.11) <pkg.ceph.system-rdkafka>,
libsasl2-dev <!pkg.ceph.system-rdkafka>,
libthrift-dev (>= 0.13.0),
libyaml-cpp-dev (>= 0.6),
libzstd-dev <pkg.ceph.check>,
libdaxctl-dev (>= 63) <pkg.ceph.pmdk>,
libndctl-dev (>= 63) <pkg.ceph.pmdk>,
libpmem-dev <pkg.ceph.pmdk>,
libpmemobj-dev (>= 1.8) <pkg.ceph.pmdk>,
libprotobuf-dev,
libxsimd-dev <!pkg.ceph.arrow>,

3
debian/rules vendored
View File

@ -18,6 +18,9 @@ endif
ifneq ($(filter pkg.ceph.crimson,$(DEB_BUILD_PROFILES)),)
extraopts += -DWITH_CRIMSON=ON
endif
ifneq ($(filter pkg.ceph.system-rdkafka,$(DEB_BUILD_PROFILES)),)
extraopts += -DWITH_SYSTEM_RDKAFKA=ON
endif
extraopts += -DWITH_JAEGER=ON
extraopts += -DWITH_SYSTEM_JERASURE=ON

View File

@ -149,6 +149,7 @@ packages that provide the ``cephadm`` command, run the following commands:
#. Add the repository:
.. prompt:: bash #
:substitutions:
./cephadm add-repo --release |stable-release|

View File

@ -8,10 +8,10 @@ Deploying mgmt-gateway
======================
In Ceph releases beginning with Tentacle, the ``mgmt-gateway`` service introduces a new design for Ceph applications
based on a modular, service-based architecture. This service, managed by cephadm and built on top of nginx
based on a modular, service-based architecture. This service, managed by cephadm and built on top of NGINX
(an open-source, high-performance web server), acts as the new front-end and single entry point to the
Ceph cluster. The ``mgmt-gateway`` provides unified access to all Ceph applications, including the Ceph dashboard
and monitoring stack. Employing nginx enhances security and simplifies access management due to its robust
and monitoring stack. Employing NGINX enhances security and simplifies access management due to its robust
community support and high-security standards. The ``mgmt-gateway`` service acts as a reverse proxy that routes
requests to the appropriate Ceph application instances.
@ -28,10 +28,10 @@ consolidated behind the new service endpoint: ``https://<node-ip>:<port>``.
Benefits of the mgmt-gateway service
====================================
* ``Unified Access``: Consolidated access through nginx improves security and provides a single entry point to services.
* ``Unified Access``: Consolidated access through NGINX improves security and provides a single entry point to services.
* ``Improved user experience``: Users no longer need to know where each application is running (IP/host).
* ``High Availability for dashboard``: nginx HA mechanisms are used to provide high availability for the Ceph dashboard.
* ``High Availability for monitoring``: nginx HA mechanisms are used to provide high availability for monitoring.
* ``High Availability for dashboard``: NGINX HA mechanisms are used to provide high availability for the Ceph dashboard.
* ``High Availability for monitoring``: NGINX HA mechanisms are used to provide high availability for monitoring.
Security enhancements
=====================
@ -42,7 +42,7 @@ Ceph dashboard.
High availability enhancements
==============================
nginx HA mechanisms are used to provide high availability for all the Ceph management applications including the Ceph dashboard
NGINX HA mechanisms are used to provide high availability for all the Ceph management applications including the Ceph dashboard
and monitoring stack. In case of the Ceph dashboard, users no longer need to know where the active manager is running.
``mgmt-gateway`` handles manager failover transparently and redirects the user to the active manager. In case of the
monitoring ``mgmt-gateway`` takes care of handling HA when several instances of Prometheus, Alertmanager or Grafana are
@ -58,7 +58,7 @@ even if certain core components for the service fail, including the ``mgmt-gatew
Multiple ``mgmt-gateway`` instances can be deployed in an active/standby configuration using keepalived
for seamless failover. The ``oauth2-proxy`` service can be deployed as multiple stateless instances,
with nginx acting as a load balancer across them using a round-robin strategy. This setup removes
with NGINX acting as a load balancer across them using a round-robin strategy. This setup removes
single points of failure and enhances the resilience of the entire system.
In this setup, the underlying internal services follow the same high availability mechanism. Instead of
@ -188,7 +188,7 @@ Limitations
Default images
~~~~~~~~~~~~~~
The ``mgmt-gateway`` service internally makes use of nginx reverse proxy. The following container image is used by default:
The ``mgmt-gateway`` service internally makes use of NGINX reverse proxy. The following container image is used by default:
::

View File

@ -43,7 +43,7 @@ a secure and flexible authentication mechanism.
High availability
=================
In general, `oauth2-proxy` is used in conjunction with the `mgmt-gateway`. The `oauth2-proxy` service can be deployed as multiple
stateless instances, with the `mgmt-gateway` (nginx reverse-proxy) handling load balancing across these instances using a round-robin strategy.
stateless instances, with the `mgmt-gateway` (NGINX reverse-proxy) handling load balancing across these instances using a round-robin strategy.
Since oauth2-proxy integrates with an external identity provider (IDP), ensuring high availability for login is managed externally
and not the responsibility of this service.

View File

@ -376,7 +376,7 @@ values until the new owning daemon writes an updated entry.
* - ``metrics_updated_at``
- Yes
- No
- Wall-clock time of the last omap write; exposed only by
- Wall-clock time of the last omap write (ISO-8601 in mgr CLI); exposed only by
``ceph fs snapshot mirror status`` (not ``fs mirror peer status``)
**Omap cleanup**
@ -660,7 +660,7 @@ command parameter is of format ``filesystem-name@filesystem-id peer-uuid``::
"crawl_duration": "2s",
"datasync_queue_wait_duration": "1s",
"sync_duration": "33s",
"sync_time_stamp": "274900.558797s",
"sync_time_stamp": "2026-07-15T12:00:00.558797+0530",
"sync_bytes": "149.94 MiB",
"sync_files": 5000
},
@ -750,11 +750,14 @@ Plain unsigned integers with no unit suffix.
Timestamp
---------
Field: ``sync_time_stamp``.
Field: ``sync_time_stamp`` (and ``metrics_updated_at`` in mgr status).
Monotonic clock time in seconds (since daemon startup) when the snapshot sync finished,
printed with sub-second precision and an ``s`` suffix (for example, ``274900.558797s``). This
is not a wall-clock or epoch timestamp.
Wall-clock time printed as an ISO-8601 local timestamp with sub-second precision
and timezone offset (for example, ``2026-07-15T12:00:00.558797+0530``).
``sync_time_stamp`` is when the snapshot sync finished;
``metrics_updated_at`` is when omap was last written for that directory and peer.
Omap persistence and ``counter dump`` (``last_sync_timestamp``) still store Unix
epoch seconds.
``snaps_synced``, ``snaps_deleted``, and ``snaps_renamed`` are
:ref:`per-session counters<cephfs_mirroring_sync_metric_fields>`: they count
@ -923,7 +926,7 @@ E.g., adding a regular file for synchronization would result in failed status::
"crawl_duration": "2s",
"datasync_queue_wait_duration": "1s",
"sync_duration": "44s",
"sync_time_stamp": "500900.600797s",
"sync_time_stamp": "2026-07-15T12:05:33.600797+0530",
"sync_bytes": "149.94 MiB",
"sync_files": 5000
},
@ -972,7 +975,7 @@ In the remote filesystem::
"crawl_duration": "2s",
"datasync_queue_wait_duration": "1s",
"sync_duration": "33s",
"sync_time_stamp": "274900.558797s",
"sync_time_stamp": "2026-07-15T12:00:00.558797+0530",
"sync_bytes": "149.94 MiB",
"sync_files": 5000
},
@ -1227,7 +1230,7 @@ Counters are not updated on every file read or write. Behavior differs by field
- Durations in seconds; bytes are raw counts
* - ``last_sync_timestamp``
- ``last_synced_snap.sync_time_stamp``
- ``utime_t`` (seconds since epoch), not the monotonic string shown in admin JSON
- Perf counter is Unix epoch seconds; admin/mgr JSON show ISO-8601 local time
* - ``snaps_synced`` / ``snaps_deleted`` / ``snaps_renamed``
- Same field names at directory level
- Reset on daemon restart or directory reassignment (same as admin socket)

View File

@ -15,6 +15,10 @@ Key features include:
* Configurable block sizes, file counts, and fsync intervals.
* Detailed statistical reporting (Mean, Std Dev, Min/Max) for throughput and IOPS.
* Support for specific CephFS user/group impersonation (UID/GID) via ``ceph_mount_perms_set``.
* Optional JSON output and libcephfs perf counter dumps.
* Optional progress reporting during benchmark phases.
* Optional asynchronous I/O benchmarking with configurable queue depth.
* Optional overrides for selected client configuration settings such as object cache and messenger worker threads.
Building
========
@ -60,7 +64,7 @@ General Options
Path to keyring file
.. option:: --filesystem <name>
.. option:: --filesystem, --fs <name>
CephFS filesystem name to mount
@ -72,6 +76,19 @@ General Options
Group ID to mount as (default: ``-1``)
.. option:: --client-oc <0|1>
Override the ``client_oc`` setting for the benchmark mount
.. option:: --client-oc-size <value>
Override the ``client_oc_size`` setting for the benchmark mount
.. option:: --msgr-workers <n>
Override ``ms_async_op_threads`` for the benchmark mount. Valid values are
``1`` to ``24``; ``0`` keeps the configured default.
Benchmark Options
-----------------
@ -121,6 +138,40 @@ These options are used with the ``bench`` command.
Disable cleanup of files
.. option:: --json <path>
Write structured benchmark results to a JSON file. Use ``-`` to output to stdout.
.. option:: --duration <seconds>
Limit each write and read phase to ``N`` seconds. A value of ``0`` means the
benchmark processes all files.
.. option:: --perf-dump <path>
Dump libcephfs performance counters to the specified file after the benchmark
.. option:: --progress
Show live progress, bandwidth, file rate, and ETA during benchmark phases
.. option:: --progress-interval <percent>
Minimum percentage increment between progress updates (default: ``10``;
valid range: ``1`` to ``100``)
.. option:: --async-io
Use asynchronous I/O via ``ceph_ll_nonblocking_readv_writev`` for read and
write phases
.. option:: --queue-depth <n>
Maximum number of outstanding async I/Os per worker thread (default:
``16``; valid range: ``1`` to ``1024``). This option is only meaningful with
``--async-io`` and ``--async-io`` cannot be combined with
``--per-thread-mount``.
Examples
========

View File

@ -476,6 +476,15 @@ This command resizes the subvolume quota, using the size specified by
``new_size``. The ``--no_shrink`` flag prevents the subvolume from shrinking
below the current "used size" of the subvolume.
Resizing can also be done using human-friendly units::
ceph fs subvolume resize foo subvol1 100KiB
ceph fs subvolume resize foo subvol1 200.45KiB
ceph fs subvolume resize foo subvol1 300KB
.. note:: Values will be strictly cast to IEC units even when SI units
are input, i.e. 1{K|KB|Ki|KiB} all translate to 1024 bytes.
The subvolume can be resized to an unlimited (but sparse) logical size by
passing ``inf`` or ``infinite`` as ``<new_size>``.

View File

@ -358,11 +358,14 @@ Each omap value includes metadata fields written by ``cephfs-mirror``:
persist cadence and Manager caching (``snapshot_mirror_metrics_cache_enabled``
and ``snapshot_mirror_metrics_cache_ttl``).
Omap entries are removed when a directory is removed from mirroring. All metric
fields are written to omap; on daemon restart only ``last_synced_snap`` metadata
is loaded back. Per-session counters (``snaps_synced``, ``snaps_deleted``,
``snaps_renamed``) are persisted but not loaded and therefore start at zero each
session.
Omap entries for a directory are removed when that directory is removed from
mirroring. Entries for a peer (all of its directories) are removed when the peer
is removed, and all entries for a file system are removed when mirroring is
disabled for that file system. Internal blocklist/failure restarts of a mirror
instance preserve omap so sync can resume. All metric fields are written to
omap; on daemon restart only ``last_synced_snap`` metadata is loaded back.
Per-session counters (``snaps_synced``, ``snaps_deleted``, ``snaps_renamed``)
are persisted but not loaded and therefore start at zero each session.
See :ref:`Directory snapshot sync metrics<cephfs_mirroring_mgr_snapshot_status>`
and :ref:`Snapshot sync metric fields<cephfs_mirroring_sync_metric_fields>` in
@ -444,7 +447,7 @@ status. Commands of this kind take the form ``filesystem-name@filesystem-id peer
"crawl_duration": "2s",
"datasync_queue_wait_duration": "1s",
"sync_duration": "33s",
"sync_time_stamp": "274900.558797s",
"sync_time_stamp": "2026-07-15T12:00:00.558797+0530",
"sync_bytes": "149.94 MiB",
"sync_files": 5000
},
@ -548,7 +551,7 @@ status:
"crawl_duration": "2s",
"datasync_queue_wait_duration": "1s",
"sync_duration": "33s",
"sync_time_stamp": "274900.558797s",
"sync_time_stamp": "2026-07-15T12:00:00.558797+0530",
"sync_bytes": "149.94 MiB",
"sync_files": 5000
},

View File

@ -206,9 +206,7 @@ libzbd
packages `libzbd`_ . The upstream libzbd includes debian packaging already.
libpmem
packages `pmdk`_ . Please note, ``ndctl`` is one of the build dependencies of
pmdk, for an updated debian packaging, please see
https://github.com/ceph/ceph-ndctl .
packages `pmdk`_ .
.. note::

View File

@ -101,7 +101,7 @@ run::
$ MDS=0 MON=1 OSD=1 MGR=1 taskset -ac '0-95' /ceph/src/vstart.sh --new -x \
--localhost --without-dashboard --redirect-output --seastore --osd-args \
"--seastore_max_concurrent_transactions=128 --seastore_cachepin_type=LRU \
--seastore_main_device_type=RANDOM_BLOCK_SSD" --seastore-devs /dev/nvme0n1 \
--seastore_hot_device_type=RANDOM_BLOCK_SSD" --seastore-devs /dev/nvme0n1 \
--crimson --crimson-smp 1 --no-restart
Another SeaStore example::

View File

@ -204,7 +204,7 @@ Metadata Structures
Device Types
------------
Configured via the ``seastore_main_device_type`` option, the device types are
Configured via the ``seastore_hot_device_type`` option, the device types are
separated into **Segmented** and **RBM** backend types as follows:

View File

@ -0,0 +1,85 @@
=====================================
The Logical Bucket Cache in SeaStore
=====================================
This document introduces the LogicalBucketCache machinery which is
mainly for using SSDs as non-volatile cache for the relatively slow
HDD devices. Specifically, it serves to:
#. Load frequently accessed data from the cold tier to the Logical
Bucket Cache.
#. Evict relatively cold data from the Logical Bucket Cache to the
cold tier based on the heat of both data read and write.
The Logical Bucket Cache is enabled when there is at least one cold
tier.
General Approach
================
#. Cache line: a range of continuous laddr address space, which we
call logical bucket. For now, that continuous laddr range is the
scope of a RADOS object.
#. Extents are loaded to the cache device when: 1) they are newly
written by clients and don't trigger the write_through machinery.
For now, the write_through machinery is triggered when the newly
written data is larger than a specific threshold; 2) they are on
the slow cold device and read to or evicted from the in-memory Cache.
#. Extents are evicted from the cache device in units of logical buckets,
that is, extents of the same logical bucket are evicted from the cache
device altogether.
#. The process that write extents evicted from Cache down to the cache
device is called promotion.
#. The process that evict extents from the cache device to the cold device
is called demotion.
#. Extents that are loaded from the cold tier to the Logical Bucket Cache
are NOT removed from the cold tier, which means they'd have two paddrs,
one in the Logical Bucket Cache, the other in the cold tier, and the
promoted data is stored twice. This is designed to make the demote process
cheap. We call paddrs corresponding to the cold tier shadow paddrs.
So lba mappings have two paddrs now, the primary paddr and the shadow
paddr.
Promotion
=========
Promotion is the process that load the extents in the cold tier to the
Logical Bucket Cache.
Extents that are read from the cold tier are first added to the in-memory
cache; when evicted from the in-memory cache, they are added to the Promoter.
The Promoter write its extents down to the Logical Bucket Cache when the size
of its extents grows larger than ``seastore_cache_promotion_size``.
Demotion
========
Demotion happens when:
#. The usage of the Logical Bucket Cache reaches ``seastore_multiple_tiers_fast_evict_ratio``.
#. The in-memory data index of the Logical Bucket Cache reaches ``seastore_logical_bucket_capacity``.
Demoting extents that are live in both the Logical Bucket Cache and the
cold tier only involves setting the shadow paddr to the primary paddr and
removing the shadow paddr itself.
Demoting extents that are only live in the Logical Bucket Cache would involve
rewriting the extents to the cold tier.
WriteThrough
============
When the newly written data is larger than ``seastore_write_through_size``,
it would be written directly to the cold tier.
Internal Test Workload
=======================
To test the correctness of the whole Logical Bucket Cache machinery, we also
implemented an internal stress test workload. When turned on, SeaStore would
aggressively load the extents from the cold tier to the Logical Bucket Cache,
and demote extents back to the cold tier. The newly written data may also be
written directly to the cold tier based on ``seastore_test_workload_write_through_probability``.
The internal test workload is turned on by ``crimson_test_workload``.

View File

@ -41,8 +41,7 @@ Make sure X (and, ideally, X+1) is defined:
Github Actions
~~~~~~~~~~~~~~
- [ ] .github/workflows/redmine-upkeep.yml add release branch to pull_request_target trigger
- [ ] .github/workflows/releng-audit.yml add release branch to pull_request_target trigger
- [ ] `.github/workflows/*.yml' add release branch to pull_request_target trigger
Scripts
~~~~~~~
@ -137,6 +136,8 @@ After dev freeze
- [ ] open the Branch Protection settings of the Ceph repo. Duplicate settings to the new release branch.
- [ ] create vX.3.0 annotated tag on ``main`` so upgrades from new release to main are not wrongly considered downgrades.
- [ ] remove ``doc/releases/*.rst``. This should leave behind ``doc/releases/releases.yml`` which is used for doc building purposes. See also commit 33d63c3 ("doc: remove release notes for release branch") for details.
- [ ] remove ``.github/workflows``. ``main`` is authoritative for workflows; avoid possible confusion/conflicts.
- [ ] remove ``.github/pull_request_template.md``. Backports do not use it.
- [ ] cherry-pick 8cf9ad62949516666ad0f2c0bb7726ef68e4d666 ("doc: add releases links to toc"). There will be trivial conflicts.
- [ ] add redirect for new major release at `RTD <https://readthedocs.org/dashboard/ceph/redirects/>`_.
- [ ] add release name to redmine (using https://tracker.ceph.com/custom_fields/16/edit)

View File

@ -38,8 +38,7 @@ Membership
* Candidates self-nominate or are nominated by other members
* Discussion of how roles/responsibilities may be delegated
* Ranked-choice vote by the steering committee
* 2 year terms, with one member being elected in even years, and the
other two in odd years
* 1 year terms with all members elected yearly
* Members may resign at any time, and the steering committee may vote
to appoint a replacement for the rest of their term
* members must involve >1 employer
@ -111,6 +110,7 @@ Current Members
* Neha Ojha <nojha@redhat.com>
* Patrick Donnelly <pdonnell@ibm.com>
* Radoslaw Zarzynski <rzarzyns@redhat.com>
* Redouane Kachach <rkachach@redhat.com>
* Venky Shankar <vshankar@redhat.com>
* Vikhyat Umrao <vikhyat@ibm.com>
* Xie Xingguo <xie.xingguo@zte.com.cn>

View File

@ -42,13 +42,13 @@ repository and execute the following::
cd build
ninja
See `Installing a Build`_ to install a build in user space and `Ceph README.md`_
See :ref:`install-storage-cluster-build` to install a build in user space and `Ceph README.md`_
doc for more details on build.
Build Ceph Packages
===================
To build packages, you must clone the `Ceph`_ repository. You can create
To build packages, you must clone the :ref:`Ceph repository <install-clone-source>`. You can create
installation packages from the latest code using ``dpkg-buildpackage`` for
Debian/Ubuntu or ``rpmbuild`` for the RPM Package Manager.
@ -61,7 +61,7 @@ Advanced Package Tool (APT)
---------------------------
To create ``.deb`` packages for Debian/Ubuntu, ensure that you have cloned the
`Ceph`_ repository, installed the `Build Prerequisites`_ and installed
:ref:`Ceph repository <install-clone-source>`, installed the `Build Prerequisites`_ and installed
``debhelper``::
sudo apt-get install debhelper
@ -76,7 +76,7 @@ For multi-processor CPUs use the ``-j`` option to accelerate the build.
RPM Package Manager
-------------------
To create ``.rpm`` packages, ensure that you have cloned the `Ceph`_ repository,
To create ``.rpm`` packages, ensure that you have cloned the :ref:`Ceph repository <install-clone-source>`,
installed the `Build Prerequisites`_ and installed ``rpm-build`` and
``rpmdevtools``::
@ -104,6 +104,4 @@ Build the RPM packages::
For multi-processor CPUs use the ``-j`` option to accelerate the build.
.. _Ceph: ../clone-source
.. _Installing a Build: ../install-storage-cluster#installing-a-build
.. _Ceph README.md: https://github.com/ceph/ceph#building-ceph

View File

@ -1,3 +1,5 @@
.. _install-clone-source:
=========================================
Cloning the Ceph Source Code Repository
=========================================

View File

@ -123,7 +123,7 @@ For RPMs::
The major releases of Ceph are summarized at: :ref:`Releases <ceph-releases-index>`
.. tip:: For non-US users: There might be a mirror close to you where
to download Ceph from. For more information see: `Ceph Mirrors`_.
to download Ceph from. For more information see: :ref:`install-mirrors`.
Debian Packages
~~~~~~~~~~~~~~~
@ -168,7 +168,7 @@ of Debian and Ubuntu releases supported.
echo deb https://download.ceph.com/debian-testing/ $(lsb_release -sc) main | sudo tee /etc/apt/sources.list.d/ceph.list
.. tip:: For non-US users: There might be a mirror close to you where
to download Ceph from. For more information see: `Ceph Mirrors`_.
to download Ceph from. For more information see: :ref:`install-mirrors`.
RPM Packages
@ -234,7 +234,7 @@ You can download the RPMs directly from
https://download.ceph.com/rpm-testing
.. tip:: For non-US users: There might be a mirror close to you where
to download Ceph from. For more information see: `Ceph Mirrors`_.
to download Ceph from. For more information see: :ref:`install-mirrors`.
openSUSE Leap 15.1
^^^^^^^^^^^^^^^^^^
@ -389,4 +389,3 @@ line to get the short codename.
.. _the testing Debian repository: https://download.ceph.com/debian-testing/dists
.. _the shaman page: https://shaman.ceph.com
.. _Ceph Mirrors: ../mirrors

View File

@ -7,8 +7,7 @@ source code. You may download source code tarballs for Ceph releases here:
`Ceph Release Tarballs`_
.. tip:: For international users: There might be a mirror close to you where download Ceph from. For more information see: `Ceph Mirrors`_.
.. tip:: For international users: There might be a mirror close to you where download Ceph from. For more information see: :ref:`install-mirrors`.
.. _Ceph Release Tarballs: https://download.ceph.com/tarballs/
.. _Ceph Mirrors: ../mirrors

View File

@ -53,6 +53,4 @@ Windows
~~~~~~~
For Windows installations, consult this document:
`Windows installation guide`_.
.. _Windows installation guide: ./windows-install
:ref:`install-windows`.

View File

@ -1,3 +1,5 @@
.. _install_storage_cluster:
==============================
Install Ceph Storage Cluster
==============================
@ -79,6 +81,7 @@ Once you have added either release or development packages, or added a
sudo yum install ceph
.. _install-storage-cluster-build:
Installing a Build
==================

View File

@ -1,3 +1,5 @@
.. _install-mirrors:
=============
Ceph Mirrors
=============

View File

@ -1,5 +1,7 @@
:orphan:
.. _install-windows-basic-config:
===========================
Windows basic configuration
===========================

View File

@ -1,5 +1,7 @@
:orphan:
.. _install-windows:
==========================
Installing Ceph on Windows
==========================
@ -15,7 +17,7 @@ Supported platforms
-------------------
.. note::
Please see the `OS recommendations`_ regarding client package support.
Please see the :ref:`os-recommendations` regarding client package support.
Windows Server 2019 and Windows Server 2016 are supported. Previous Windows
Server versions, including Windows client versions such as Windows 10, might
@ -66,7 +68,7 @@ https://github.com/ceph/ceph/blob/master/README.windows.rst
Configuration
=============
Please check the `Windows configuration sample`_ to get started.
Please check the :ref:`Windows configuration sample <install-windows-basic-config>` to get started.
You'll also need a keyring file. The `General CephFS Prerequisites`_ page provides a
simple example, showing how a new CephX user can be created and how its secret
@ -80,12 +82,8 @@ Further reading
* `RBD Windows documentation`_
* :ref:`CephFS Windows documentation <ceph-dokan>`
* `Windows troubleshooting`_
* :ref:`install-windows-troubleshooting`
.. _Windows configuration sample: ../windows-basic-config
.. _RBD Windows documentation: ../../rbd/rbd-windows/
.. _Windows troubleshooting: ../windows-troubleshooting
.. _General CephFS Prerequisites: ../../cephfs/mount-prerequisites
.. _Client Authentication: ../../cephfs/client-auth
.. _Windows testing: ../dev/tests-windows
.. _OS recommendations: ../../start/os-recommendations

View File

@ -1,5 +1,7 @@
:orphan:
.. _install-windows-troubleshooting:
===============================
Troubleshooting Ceph on Windows
===============================

View File

@ -61,6 +61,7 @@ if(WITH_RADOSGW)
rgw-orphan-list.rst
rgw-gap-list.rst
rgw-policy-check.rst
rgw-policy-test.rst
ceph-diff-sorted.rst
rgw-restore-bucket-index.rst)
endif()

View File

@ -1196,7 +1196,8 @@ Subcommand ``get`` gets pool parameter <var>.
Usage::
ceph osd pool get <poolname> size|min_size|pg_num|pgp_num|crush_rule|write_fadvise_dontneed
ceph osd pool get <poolname> size|min_size|pg_num|pgp_num|crush_rule|hashpspool|
nodelete|nopgchange|nosizechange|write_fadvise_dontneed
Only for tiered pools::
@ -1249,7 +1250,7 @@ Usage::
ceph osd pool set <poolname> size|min_size|pg_num|
pgp_num|crush_rule|hashpspool|nodelete|nopgchange|nosizechange|
hit_set_type|hit_set_period|hit_set_count|hit_set_fpp|debug_fake_ec_pool|
hit_set_type|hit_set_period|hit_set_count|hit_set_fpp|
target_max_bytes|target_max_objects|cache_target_dirty_ratio|
cache_target_dirty_high_ratio|
cache_target_full_ratio|cache_min_flush_age|cache_min_evict_age|

View File

@ -639,7 +639,7 @@ Options
.. option:: --shard-id=<shard-id>
Optional for mdlog list, bi list, data sync status. Required for ``mdlog trim``.
Optional for mdlog list, bi list, data sync status, gc list, gc process. Required for ``mdlog trim``.
.. option:: --max-entries=<entries>

View File

@ -0,0 +1,65 @@
:orphan:
===================================================
rgw-policy-test -- test evaluation of bucket policy
===================================================
.. program:: rgw-policy-test
Synopsis
========
| **rgw-policy-test**
[-e *key*=*value*]... [-t *tenant*] [-R resource] [-I identity] *action* *filename*
Description
===========
This utility reads a policy from a file or stdin and evaluates it
against the supplied identity, resource, action, and request context
(the key/value pairs evaluated by conditions.) The utility will print
a trace of evaluating the policy and the effect of its evaluation.
On error it will print a message and return non-zero.
Options
=======
.. option:: -t *tenant*, --tenant *tenant*
Specify *tenant* as the tenant. If not provided, the default
(empty) tenant is used.
.. option:: -e *key*=*value*, --environment *key*=*value*
Add (*key*, *value*) to the environment for evaluation. May be
specified multiple times.
.. option:: -I *SCHEMA:STRING*, --identity *SCHEMA:STRING*
Specify *identity* as the identity whose access is to be checked.
.. option:: -R *ARN*, --resource *ARN*
Specify *ARN* as the resource for which to check access.
.. option:: *action*
Use *action* as the action to check.
.. option:: *filename*
Read the policy from *filename*, or - for standard input.
Availability
============
**rgw-policy-test** is part of Ceph, a massively scalable, open-source,
distributed storage system. Please refer to the Ceph documentation at
https://docs.ceph.com/ for more information.
See also
========
:doc:`radosgw <radosgw>`\(8)

View File

@ -48,4 +48,5 @@
man/8/ceph-immutable-object-cache
man/8/ceph-diff-sorted
man/8/rgw-policy-check
man/8/rgw-policy-test
man/8/rgw-restore-bucket-index

View File

@ -1176,7 +1176,8 @@ The list of system roles are:
- **cluster-manager**: allows full permissions for the *hosts*, *osd*,
*monitor*, *manager*, and *config-opt* scopes.
- **pool-manager**: allows full permissions for the *pool* scope.
- **cephfs-manager**: allows full permissions for the *cephfs* scope.
- **cephfs-manager**: allows full permissions for the *cephfs* scope, and
*read* permission for the *hosts* and *pool* scopes.
The list of available roles can be retrieved with the following command:

View File

@ -24,6 +24,19 @@ Enable the ``prometheus`` module by running the below command :
ceph mgr module enable prometheus
ceph-exporter
=============
``ceph-exporter`` works alongside the Prometheus manager module. The two
components have distinct responsibilities:
- The **Prometheus manager module** exposes all cluster-level metrics by
default other than Ceph daemon performance counters. However, these metrics
may be exported by the Prometheus manager module by setting the module option
:confval:`mgr/prometheus/exclude_perf_counter` to `false`.
- The **ceph-exporter daemon** exposes only Ceph daemon performance counters
as Prometheus metrics, running on each host in the cluster.
Configuration
-------------

View File

@ -1567,14 +1567,122 @@ fsid
mon_host
String. The ``mon_host`` string (as sourced from a ceph.conf file)
cephfs_user
Object. Fields:
Optional object. Required if the cluster will host CephFS-backed shares.
Fields:
name
String. A ceph user name indicating the cephx user that will
String. A Ceph user name indicating the CephX user that will
access the CephFS volume(s) on the external cluster
key
String. The Base64 encoded key value corresponding to the cephx
String. The Base64 encoded key value corresponding to the CephX
user name provided
rgw_user
Optional object. Required if the cluster will host RGW-backed shares.
Fields:
name
String. A Ceph user name indicating the CephX user that will
access the RGW bucket(s) on the external cluster
key
String. The Base64 encoded key value corresponding to the CephX
user name provided
.. note::
At least one of ``cephfs_user`` or ``rgw_user`` must be configured.
Configure only the user(s) needed for your share types:
- CephFS-only clusters: Configure only ``cephfs_user``
- RGW-only clusters: Configure only ``rgw_user``
- Mixed clusters: Configure both ``cephfs_user`` and ``rgw_user``
Examples
~~~~~~~~
External cluster with CephFS support only:
.. code-block:: yaml
resource_type: ceph.smb.ext.cluster
external_ceph_cluster_id: external-cephfs
cluster:
fsid: "12345678-1234-1234-1234-123456789abc"
mon_host: "10.0.1.10:6789,10.0.1.11:6789"
cephfs_user:
name: "client.external-cephfs"
key: "AQC1234567890abcdefghijklmnopqrstuvwxyz=="
External cluster with RGW support only:
.. code-block:: yaml
resource_type: ceph.smb.ext.cluster
external_ceph_cluster_id: external-rgw
cluster:
fsid: "12345678-1234-1234-1234-123456789abc"
mon_host: "10.0.1.10:6789,10.0.1.11:6789"
rgw_user:
name: "client.external-rgw"
key: "AQD9876543210zyxwvutsrqponmlkjihgfedcba=="
External cluster with both CephFS and RGW support:
.. code-block:: yaml
resource_type: ceph.smb.ext.cluster
external_ceph_cluster_id: external-mixed
cluster:
fsid: "12345678-1234-1234-1234-123456789abc"
mon_host: "10.0.1.10:6789,10.0.1.11:6789"
cephfs_user:
name: "client.external-cephfs"
key: "AQC1234567890abcdefghijklmnopqrstuvwxyz=="
rgw_user:
name: "client.external-rgw"
key: "AQD9876543210zyxwvutsrqponmlkjihgfedcba=="
.. important::
**RGW Shares on External Clusters Require Manual Credentials**
When creating RGW shares on external clusters, you **must** manually define
RGW credentials using the ``ceph.smb.rgw.credential`` resource. Unlike local
clusters where credentials can be auto-fetched, external clusters cannot
automatically retrieve S3 access keys.
Example configuration with manual RGW credentials:
.. code-block:: yaml
resources:
# Define the external cluster with rgw_user
- resource_type: ceph.smb.ext.cluster
external_ceph_cluster_id: external-rgw
cluster:
fsid: "12345678-1234-1234-1234-123456789abc"
mon_host: "10.0.1.10:6789,10.0.1.11:6789"
rgw_user:
name: "client.external-rgw"
key: "AQD9876543210zyxwvutsrqponmlkjihgfedcba=="
# Define RGW credentials manually (REQUIRED for external clusters)
- resource_type: ceph.smb.rgw.credential
rgw_credential_id: my-s3-creds
user_id: s3-user
access_key_id: AKIAIOSFODNN7EXAMPLE
secret_access_key: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# RGW share referencing the manual credentials
- resource_type: ceph.smb.share
cluster_id: my-cluster
share_id: s3-share
name: "S3 Share"
rgw:
bucket: my-bucket
credential_ref: my-s3-creds
The ``rgw_user`` in the external cluster definition provides the CephX
credentials for accessing the RGW service, while the ``ceph.smb.rgw.credential``
resource provides the S3 access key and secret key for bucket operations.
A Declarative Configuration Example

View File

@ -80,21 +80,66 @@ Example output:
{
"Files Migrated": [
...
"db.wal/000052.log size=0x24cd21 migrated=0x1200000 from dev=2->1 ts=2026-06-02T12:44:25.488250+0000",
"db.wal/000053.log size=0x3696ad migrated=0x1200000 from dev=2->1 ts=2026-06-02T12:44:25.833014+0000",
"db.wal/000054.log size=0x1571f61 migrated=0x2400000 from dev=2->1 ts=2026-06-02T12:44:26.134245+0000",
"db.wal/000055.log size=0x1b2b508 migrated=0x2400000 from dev=2->1 ts=2026-06-02T12:44:26.550633+0000"
"db/000084.sst size=0xf8cd6 migrated=0x100000 from dev=2->1 ts=2026-07-22T18:49:42.555723+0000",
"db/000086.sst size=0xfdd34 migrated=0x100000 from dev=2->1 ts=2026-07-22T18:49:42.595349+0000",
"db.wal/000078.log size=0x19de2e2 migrated=0x2400000 from dev=2->1 ts=2026-07-22T18:49:42.694700+0000",
"db.wal/000079.log size=0x19d32f7 migrated=0x2400000 from dev=2->1 ts=2026-07-22T18:49:43.424059+0000",
"db.wal/000080.log size=0xd1a637 migrated=0x1200000 from dev=2->1 ts=2026-07-22T18:49:44.204353+0000",
"db.wal/000081.log size=0xcbeaf5 migrated=0x1200000 from dev=2->1 ts=2026-07-22T18:49:44.618457+0000",
"db.wal/000082.log size=0xd6737 migrated=0x1200000 from dev=2->1 ts=2026-07-22T18:49:44.892949+0000",
"db.wal/000083.log size=0x696fe8 migrated=0x1200000 from dev=2->1 ts=2026-07-22T18:49:45.279432+0000"
],
"pending_files": [
"db.wal/000056.log",
"db.wal/000057.log",
"db.wal/000058.log",
"db.wal/000059.log",
"db.wal/000060.log",
"db.wal/000091.log",
"db.wal/000092.log",
"db.wal/000093.log",
"db.wal/000094.log",
"db.wal/000095.log",
...
]
],
"active_files": [
"db.wal/000085.log num_writers=1",
"db.wal/000087.log num_writers=1",
"db.wal/000088.log num_writers=1",
"db.wal/000089.log num_writers=1",
"db.wal/000090.log num_writers=1"
],
"last_scan_time": "2026-07-22T18:51:15.895644+0000"
}
Interpreting Cleaner Stats
==========================
The spillover cleaner operates in repeated scan cycles of alternating Active and Idle phases.
The output of ``ceph tell osd.N bluefs spillover cleaner stats`` shows the
current cycle state and migration history of spillover cleaner.
``Files Migrated``
Contains a list of entries for files that have been recently migrated from the slow device
to the DB device.
Example entry::
db/000084.sst size=0xf8cd6 migrated=0x100000 from dev=2->1 ts=2026-07-22T18:49:42.555723+0000
``pending_files``
At the beginning of each cycle, the spillover cleaner scans for files on the slow device and adds them to ``pending_files``.
These files are later processed one by one.
- Successfully migrated files are removed from ``pending_files`` and added
to ``Files Migrated``.
- Files open for write are removed from ``pending_files`` and reported
in ``active_files`` for that cycle.
A new scan is performed at the beginning of the next cycle.
``active_files``
Contains files that have active writers when the cleaner attempted to
migrate them. Migration of these files are skipped during the current cycle.
``last_scan_time``
Shows the time of the most recent cleaner scan.
Testing
=======

View File

@ -535,24 +535,3 @@ were deployed under older releases or with other settings.
.. confval:: bluestore_min_alloc_size_hdd
.. confval:: bluestore_min_alloc_size_ssd
.. confval:: bluestore_use_optimal_io_size_for_min_alloc_size
DSA (Data Streaming Accelerator) Usage
======================================
If you want to use the DML library to drive the DSA device for offloading
read/write operations on persistent memory (PMEM) in BlueStore, you need to
install `DML`_ and the `idxd-config`_ library. This will work only on machines
that have a SPR (Sapphire Rapids) CPU.
.. _DML: https://github.com/intel/DML
.. _idxd-config: https://github.com/intel/idxd-config
After installing the DML software, configure the shared work queues (WQs) with
reference to the following WQ configuration example:
.. prompt:: bash $
accel-config config-wq --group-id=1 --mode=shared --wq-size=16 --threshold=15 --type=user --name="MyApp1" --priority=10 --block-on-fault=1 dsa0/wq0.1
accel-config config-engine dsa0/engine0.1 --group-id=1
accel-config enable-device dsa0
accel-config enable-wq dsa0/wq0.1

View File

@ -152,6 +152,14 @@ thread running:
.. confval:: rgw_enable_gc_threads
Dedup Settings
==============
At least one RGW in each zone must have the dedup background thread running
for dedup operations to function:
.. confval:: rgw_enable_dedup_threads
Multisite Settings
==================

View File

@ -172,6 +172,10 @@ HTTP
Kafka
~~~~~
Supported broker versions: Kafka 3.9 and Kafka 4.x. Both Zookeeper-based
(3.x) and KRaft (4.x) brokers are supported.
After recovering from a broker failure, a persistent topic will try
to resend all notifications in batches. If the topic is configured on
the broker with a segment size smaller than our default (1MB), sending

View File

@ -8,10 +8,10 @@ RGW Data Caching and CDN
.. contents::
This feature adds to RGW the ability to securely cache objects and offload the workload from the cluster, using Nginx.
After an object is accessed the first time it will be stored in the Nginx cache directory.
This feature adds to RGW the ability to securely cache objects and offload the workload from the cluster, using NGINX.
After an object is accessed the first time it will be stored in the NGINX cache directory.
When data is already cached, it need not be fetched from RGW. A permission check will be made against RGW to ensure the requesting user has access.
This feature is based on the Nginx modules ``ngx_http_auth_request_module`` and `nginx-aws-auth-module <https://github.com/kaltura/nginx-aws-auth-module>`_, and OpenResty for Lua capabilities.
This feature is based on the NGINX modules ``ngx_http_auth_request_module`` and `nginx-aws-auth-module <https://github.com/kaltura/nginx-aws-auth-module>`_, and OpenResty for Lua capabilities.
Currently this feature will cache only AWSv4 requests (only S3 requests), caching-in the output of the first GET request
and caching-out on subsequent GET requests, passing through transparently PUT, POST, HEAD, DELETE and COPY requests.
@ -27,9 +27,9 @@ New APIs
There are 2 new APIs for this feature:
- **Auth API:** The cache uses this to validate that a user can access the cached data.
- **Cache API:** Adds the ability to override the ``Range`` header securely so that Nginx can use its own `smart cache <https://www.nginx.com/blog/smart-efficient-byte-range-caching-nginx/>`_ on top of S3.
- **Cache API:** Adds the ability to override the ``Range`` header securely so that NGINX can use its own `smart cache <https://www.nginx.com/blog/smart-efficient-byte-range-caching-nginx/>`_ on top of S3.
Using this API gives the ability to read ahead objects when client is asking a specific range from the object.
On subsequent accesses to the cached object, Nginx will satisfy requests for already-cached ranges from the cache. Uncached ranges will be read from RGW (and cached).
On subsequent accesses to the cached object, NGINX will satisfy requests for already-cached ranges from the cache. Uncached ranges will be read from RGW (and cached).
Auth API
~~~~~~~~
@ -58,7 +58,7 @@ If both checks succeed it will use the ``X-Amz-Cache`` to revalidate that the us
During this flow the RGW will override the ``Range`` header.
Using Nginx with RGW
Using NGINX with RGW
--------------------
Download the source of OpenResty:
@ -67,7 +67,7 @@ Download the source of OpenResty:
wget https://openresty.org/download/openresty-1.15.8.3.tar.gz
Use git to clone the Nginx AWS authentication module:
Use git to clone the NGINX AWS authentication module:
.. prompt:: bash $
@ -90,9 +90,9 @@ Compile OpenResty, make sure that you have ``pcre`` library and ``openssl`` libr
sudo gmake install
sudo ln -sf /usr/local/openresty/bin/openresty /usr/bin/nginx
Put in-place your Nginx configuration files and edit them according to your environment:
Put in-place your NGINX configuration files and edit them according to your environment:
Example Nginx configuration files are available at
Example NGINX configuration files are available at
https://github.com/ceph/ceph/tree/main/examples/rgw/rgw-cache
- ``nginx.conf`` should go to ``/etc/nginx/nginx.conf``.
@ -123,16 +123,16 @@ And modify the example ``server`` values to point to the RGWs URIs:
radosgw-admin user create --uid=cacheuser --display-name="cache user" --caps="amz-cache=read" --access-key <access> --secret <secret>
It is possible to use `Nginx slicing <https://docs.nginx.com/nginx/admin-guide/content-cache/content-caching/#byte-range-caching>`_ which is suitable for streaming purposes.
It is possible to use `NGINX slicing <https://docs.nginx.com/nginx/admin-guide/content-cache/content-caching/#byte-range-caching>`_ which is suitable for streaming purposes.
To enable slicing you should use ``nginx-slicing.conf`` instead of ``nginx-default.conf``.
If you do not want to use prefetch caching, it is possible to replace ``nginx-default.conf`` with ``nginx-noprefetch.conf``.
If prefetch caching is disabled Nginx will cache each range request separately and possible overlap in the range requests will be fetched more than once. For example, if a client is sending a range request of 0-4095 and then 0-4096 both requests are fetched completely from RGW.
If prefetch caching is disabled NGINX will cache each range request separately and possible overlap in the range requests will be fetched more than once. For example, if a client is sending a range request of 0-4095 and then 0-4096 both requests are fetched completely from RGW.
Run Nginx (OpenResty):
Run NGINX (OpenResty):
.. prompt:: bash #

View File

@ -68,6 +68,24 @@ are treated as comments. Whitespace is ignored. The file must contain at least
one valid name; an empty or all-comment file is rejected.
Configuration
=============
The dedup background thread must be enabled on at least one RGW daemon in each
zone for dedup operations to function. Having the thread enabled on multiple
RGW processes within the same zone spreads the dedup work between them.
.. confval:: rgw_enable_dedup_threads
This setting is evaluated at RGW startup. Changing it requires a daemon
restart.
When running RGW as an NFS-Ganesha gateway (librgw), the dedup thread is
disabled by default. To enable it in NFS mode, also set:
.. confval:: rgw_nfs_run_dedup_threads
Skipped Objects
===============

View File

@ -39,7 +39,7 @@ Crashed ``radosgw`` process
===========================
If the ``radosgw`` process dies, you will normally see a 500 error
from the web server (apache, nginx, etc.). In that situation, simply
from the web server (Apache, NGINX, etc.). In that situation, simply
restarting radosgw will restore service.
To diagnose the cause of the crash, check the log in ``/var/log/ceph``

View File

@ -23,7 +23,6 @@ security fixes.
Tentacle (v20.2.*) <tentacle>
Squid (v19.2.*) <squid>
Reef (v18.2.*) <reef>
.. ceph_releases:: releases.yml current
@ -40,6 +39,7 @@ receive bug fixes or backports).
:maxdepth: 1
:hidden:
Reef (v18.2.*) <reef>
Quincy (v17.2.*) <quincy>
Pacific (v16.2.*) <pacific>
Octopus (v15.2.*) <octopus>

View File

@ -44,6 +44,7 @@ releases:
reef:
target_eol: 2026-03-31
actual_eol: 2025-03-31
releases:
- version: 18.2.8
released: 2026-03-31

View File

@ -692,14 +692,14 @@ Cephadm
* A new cephadm-managed ``mgmt-gateway`` service provides a single, TLS-terminated
entry point for Ceph management endpoints such as the Dashboard and the monitoring
stack. The gateway is implemented as an nginx-based reverse proxy that fronts Prometheus,
stack. The gateway is implemented as an NGINX-based reverse proxy that fronts Prometheus,
Grafana, and Alertmanager, so users no longer need to connect to those daemons directly or
know which hosts they run on. When combined with the new ``oauth2-proxy`` service, which
integrates with external identity providers using the OpenID Connect (OIDC) / OAuth 2.0
protocols, the gateway can enforce centralized authentication and single sign-on (SSO) for
both the Ceph Dashboard and the rest of the monitoring stack.
* High availability for the Ceph Dashboard and the Prometheus-based monitoring stack is now
provided via the cephadm-managed ``mgmt-gateway``. nginx high-availability mechanisms allow
provided via the cephadm-managed ``mgmt-gateway``. NGINX high-availability mechanisms allow
the mgmt-gateway to detect healthy instances of the Dashboard, Prometheus, Grafana, and Alertmanager,
route traffic accordingly, and handle manager failover transparently. When deployed with a virtual
IP and multiple ``mgmt-gateway`` instances, this architecture keeps management access available

View File

@ -137,7 +137,7 @@ build_dashboard_frontend() {
cd src/pybind/mgr/dashboard/frontend
. $TEMP_DIR/bin/activate
NG_CLI_ANALYTICS=false timeout 1h npm ci
NG_CLI_ANALYTICS=false IBM_TELEMETRY_DISABLED=true timeout 1h npm ci
echo "Building ceph-dashboard frontend with build:localize script";
# we need to use "--" because so that "--configuration production"
# survives accross all scripts redirections inside package.json

View File

@ -78,7 +78,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='Health',
unit='short',
datasource='$datasource',
gridPosition={ h: 4, w: 4, x: 0, y: 1 }
gridPosition={ h: 4, w: 4, x: 0, y: 1 },
reducerFunction='last',
noValue='N/A',
)
.addTarget($.addTargetSchema(
'max(ceph_hardware_health)',
@ -92,6 +94,7 @@ local g = import 'grafonnet/grafana.libsonnet';
{ type: 'value', options: { '0': { color: 'green', index: 0, text: 'OK' } } },
{ type: 'range', options: { from: 1, to: 999, result: { color: 'semi-dark-red', index: 1, text: 'NOT OK' } } },
],
noValue: 'N/A',
thresholds: {
mode: 'absolute',
steps: [{ color: 'green' }, { color: 'red', value: 1 }],
@ -219,7 +222,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='Hosts',
unit='short',
datasource='$datasource',
gridPosition={ h: 4, w: 2, x: 0, y: 5 }
gridPosition={ h: 4, w: 2, x: 0, y: 5 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'count(count by(hostname) (ceph_hardware_health))',
legendFormat='Hosts'
@ -231,7 +236,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='Drives',
unit='short',
datasource='$datasource',
gridPosition={ h: 4, w: 2, x: 2, y: 5 }
gridPosition={ h: 4, w: 2, x: 2, y: 5 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'count(ceph_hardware_storage_capacity_bytes)',
legendFormat='Drives'
@ -266,7 +273,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='Power',
unit='short',
datasource='$datasource',
gridPosition={ h: 3, w: 2, x: 0, y: 2 }
gridPosition={ h: 3, w: 2, x: 0, y: 2 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'max(ceph_hardware_health{hostname=~"$hostname",category="power"})',
legendFormat='Power'
@ -279,6 +288,7 @@ local g = import 'grafonnet/grafana.libsonnet';
{ type: 'value', options: { '0': { color: 'green', index: 0, text: 'OK' } } },
{ type: 'range', options: { from: 1, to: 9999, result: { color: 'red', index: 1, text: 'NOT OK' } } },
],
noValue: 'N/A',
thresholds: { mode: 'absolute', steps: [{ color: 'green' }, { color: 'red', value: 1 }] },
},
},
@ -290,7 +300,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='MB Temperature (max)',
unit='celsius',
datasource='$datasource',
gridPosition={ h: 4, w: 3, x: 2, y: 2 }
gridPosition={ h: 4, w: 3, x: 2, y: 2 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'max(ceph_hardware_temperature_celsius{hostname=~"$hostname", sensor_name=~".*MB_TEMP.*"})',
legendFormat='Motherboard'
@ -306,7 +318,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='CPU Temperature',
unit='celsius',
datasource='$datasource',
gridPosition={ h: 4, w: 3, x: 5, y: 2 }
gridPosition={ h: 4, w: 3, x: 5, y: 2 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'avg(ceph_hardware_temperature_celsius{hostname=~"$hostname", sensor_name=~".*CPU_TEMP"})',
legendFormat='CPU'
@ -322,7 +336,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='DIMM Temperature (max)',
unit='celsius',
datasource='$datasource',
gridPosition={ h: 4, w: 3, x: 8, y: 2 }
gridPosition={ h: 4, w: 3, x: 8, y: 2 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'max(ceph_hardware_temperature_celsius{hostname=~"$hostname", sensor_name=~".*DIMM.*_TEMP"})',
legendFormat='DIMM'
@ -338,7 +354,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='PSU Fans',
unit='short',
datasource='$datasource',
gridPosition={ h: 4, w: 3, x: 11, y: 2 }
gridPosition={ h: 4, w: 3, x: 11, y: 2 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'count(ceph_hardware_fan_rpm{hostname=~"$hostname", fan_name=~"PSU.*"})',
legendFormat='PSU Fans'
@ -353,7 +371,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='AVG PSU Temperature',
unit='celsius',
datasource='$datasource',
gridPosition={ h: 4, w: 3, x: 14, y: 2 }
gridPosition={ h: 4, w: 3, x: 14, y: 2 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'avg(ceph_hardware_temperature_celsius{hostname=~"$hostname", sensor_name=~"PSU.*_TEMP.*"})',
legendFormat='PSU'
@ -369,7 +389,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='NVMe Drives',
unit='short',
datasource='$datasource',
gridPosition={ h: 4, w: 3, x: 17, y: 2 }
gridPosition={ h: 4, w: 3, x: 17, y: 2 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'count(ceph_hardware_storage_capacity_bytes{hostname=~"$hostname", protocol="NVMe"})',
legendFormat='NVMe'
@ -385,7 +407,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='NVMe Temperature (max)',
unit='celsius',
datasource='$datasource',
gridPosition={ h: 4, w: 3, x: 20, y: 2 }
gridPosition={ h: 4, w: 3, x: 20, y: 2 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'max(ceph_hardware_temperature_celsius{hostname=~"$hostname", sensor_name=~"NVME.*"})',
legendFormat='NVMe'
@ -401,7 +425,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='Network',
unit='short',
datasource='$datasource',
gridPosition={ h: 3, w: 2, x: 0, y: 5 }
gridPosition={ h: 3, w: 2, x: 0, y: 5 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'max(ceph_hardware_health{hostname=~"$hostname",category="network"})',
legendFormat='Network'
@ -414,6 +440,7 @@ local g = import 'grafonnet/grafana.libsonnet';
{ type: 'value', options: { '0': { color: 'green', index: 0, text: 'OK' } } },
{ type: 'range', options: { from: 1, to: 9999, result: { color: 'red', index: 1, text: 'NOT OK' } } },
],
noValue: 'N/A',
thresholds: { mode: 'absolute', steps: [{ color: 'green' }, { color: 'red', value: 1 }] },
},
},
@ -425,7 +452,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='Cooling',
unit='short',
datasource='$datasource',
gridPosition={ h: 3, w: 2, x: 0, y: 8 }
gridPosition={ h: 3, w: 2, x: 0, y: 8 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'max(ceph_hardware_health{hostname=~"$hostname",category="fans"})',
legendFormat='Cooling'
@ -438,6 +467,7 @@ local g = import 'grafonnet/grafana.libsonnet';
{ type: 'value', options: { '0': { color: 'green', index: 0, text: 'OK' } } },
{ type: 'range', options: { from: 1, to: 9999, result: { color: 'red', index: 1, text: 'NOT OK' } } },
],
noValue: 'N/A',
thresholds: { mode: 'absolute', steps: [{ color: 'green' }, { color: 'red', value: 1 }] },
},
},
@ -449,7 +479,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='Drives',
unit='short',
datasource='$datasource',
gridPosition={ h: 3, w: 2, x: 0, y: 11 }
gridPosition={ h: 3, w: 2, x: 0, y: 11 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'max(ceph_hardware_health{hostname=~"$hostname",category="storage"})',
legendFormat='Drives'
@ -462,6 +494,7 @@ local g = import 'grafonnet/grafana.libsonnet';
{ type: 'value', options: { '0': { color: 'green', index: 0, text: 'OK' } } },
{ type: 'range', options: { from: 1, to: 9999, result: { color: 'red', index: 1, text: 'NOT OK' } } },
],
noValue: 'N/A',
thresholds: { mode: 'absolute', steps: [{ color: 'green' }, { color: 'red', value: 1 }] },
},
},
@ -559,7 +592,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='FAN: $fan_speeds (RPM)',
unit='locale',
datasource='$datasource',
gridPosition={ h: 5, w: 4, x: 0, y: 3 }
gridPosition={ h: 5, w: 4, x: 0, y: 3 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'ceph_hardware_fan_rpm{hostname=~"$hostname",fan_name=~"$fan_speeds"}',
legendFormat='{{fan_name}}'
@ -577,7 +612,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='PSU1 Fan Speed (RPM)',
unit='locale',
datasource='$datasource',
gridPosition={ h: 5, w: 4, x: 0, y: 8 }
gridPosition={ h: 5, w: 4, x: 0, y: 8 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'ceph_hardware_fan_rpm{hostname=~"$hostname",fan_name=~"PSU1.*"}',
legendFormat='{{fan_name}}'
@ -592,7 +629,9 @@ local g = import 'grafonnet/grafana.libsonnet';
title='PSU2 Fan Speed (RPM)',
unit='locale',
datasource='$datasource',
gridPosition={ h: 5, w: 4, x: 4, y: 8 }
gridPosition={ h: 5, w: 4, x: 4, y: 8 },
reducerFunction='last',
noValue='N/A',
).addTarget($.addTargetSchema(
'ceph_hardware_fan_rpm{hostname=~"$hostname",fan_name=~"PSU2.*"}',
legendFormat='{{fan_name}}'

View File

@ -109,7 +109,8 @@
}
]
},
"unit": "bytes"
"unit": "bytes",
"noValue": "N/A"
},
"overrides": []
},
@ -128,7 +129,7 @@
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -193,7 +194,8 @@
}
]
},
"unit": "none"
"unit": "none",
"noValue": "N/A"
},
"overrides": []
},
@ -212,7 +214,7 @@
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -269,7 +271,8 @@
}
]
},
"unit": "percent"
"unit": "percent",
"noValue": "N/A"
},
"overrides": []
},
@ -288,7 +291,7 @@
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -351,7 +354,8 @@
}
]
},
"unit": "percent"
"unit": "percent",
"noValue": "N/A"
},
"overrides": []
},
@ -370,7 +374,7 @@
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -422,7 +426,8 @@
"mode": "palette-classic"
},
"mappings": [],
"unit": "bytes"
"unit": "bytes",
"noValue": "N/A"
},
"overrides": [
{
@ -486,7 +491,7 @@
"pieType": "donut",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -549,7 +554,8 @@
}
]
},
"unit": "bytes"
"unit": "bytes",
"noValue": "N/A"
},
"overrides": []
},
@ -568,7 +574,7 @@
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -616,7 +622,8 @@
}
]
},
"unit": "bytes"
"unit": "bytes",
"noValue": "N/A"
},
"overrides": []
},
@ -635,7 +642,7 @@
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -683,7 +690,8 @@
}
]
},
"unit": "bytes"
"unit": "bytes",
"noValue": "N/A"
},
"overrides": []
},
@ -702,7 +710,7 @@
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -750,7 +758,8 @@
}
]
},
"unit": "short"
"unit": "short",
"noValue": "N/A"
},
"overrides": []
},
@ -769,7 +778,7 @@
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -829,7 +838,8 @@
}
]
},
"unit": "bytes"
"unit": "bytes",
"noValue": "N/A"
},
"overrides": []
},
@ -848,7 +858,7 @@
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -1515,4 +1525,4 @@
"uid": "ceph-hw-compression-v2",
"version": 1,
"weekStart": ""
}
}

View File

@ -78,6 +78,7 @@
"type": "range"
}
],
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [
@ -107,7 +108,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -415,6 +416,7 @@
"decimals": 0,
"links": [ ],
"mappings": [ ],
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [ ]
@ -437,7 +439,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -467,6 +469,7 @@
"decimals": 0,
"links": [ ],
"mappings": [ ],
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [ ]
@ -489,7 +492,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -623,6 +626,7 @@
"type": "range"
}
],
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [
@ -652,7 +656,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -682,6 +686,7 @@
"decimals": 0,
"links": [ ],
"mappings": [ ],
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [
@ -716,7 +721,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -748,6 +753,7 @@
"mappings": [ ],
"max": 85,
"min": 0,
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [
@ -782,7 +788,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -814,6 +820,7 @@
"mappings": [ ],
"max": 88,
"min": 0,
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [
@ -848,7 +855,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -878,6 +885,7 @@
"decimals": 0,
"links": [ ],
"mappings": [ ],
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [ ]
@ -900,7 +908,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -936,6 +944,7 @@
"mappings": [ ],
"max": 100,
"min": 0,
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [
@ -970,7 +979,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -1004,6 +1013,7 @@
"decimals": 0,
"links": [ ],
"mappings": [ ],
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [
@ -1038,7 +1048,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -1074,6 +1084,7 @@
"mappings": [ ],
"max": 85,
"min": 0,
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [
@ -1108,7 +1119,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -1159,6 +1170,7 @@
"type": "range"
}
],
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [
@ -1188,7 +1200,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -1239,6 +1251,7 @@
"type": "range"
}
],
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [
@ -1268,7 +1281,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -1319,6 +1332,7 @@
"type": "range"
}
],
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [
@ -1348,7 +1362,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -1555,6 +1569,7 @@
"decimals": 0,
"links": [ ],
"mappings": [ ],
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [ ]
@ -1578,7 +1593,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -1614,6 +1629,7 @@
"decimals": 0,
"links": [ ],
"mappings": [ ],
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [ ]
@ -1636,7 +1652,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false
@ -1670,6 +1686,7 @@
"decimals": 0,
"links": [ ],
"mappings": [ ],
"noValue": "N/A",
"thresholds": {
"mode": "absolute",
"steps": [ ]
@ -1692,7 +1709,7 @@
"orientation": "horizontal",
"reduceOptions": {
"calcs": [
"lastNotNull"
"last"
],
"fields": "",
"values": false

View File

@ -0,0 +1,5 @@
overrides:
ceph:
conf:
osd:
seastore logical bucket cache test stress: true

View File

@ -14,6 +14,8 @@ overrides:
debug ms: 20
seastore cachepin size pershard: 64M
seastore max concurrent transactions: 8
client:
debug_objecter: 20
crimson_compat: true
workunit:
env:

View File

@ -4,7 +4,10 @@ overrides:
osd:
# crimson's osd objectstore option
osd objectstore: seastore
seastore main device type: RANDOM_BLOCK_SSD
seastore hot device type: RANDOM_BLOCK_SSD
seastore hot backend type: RANDOM_BLOCK
seastore cold device type: RANDOM_BLOCK_HDD
seastore cold backend type: RANDOM_BLOCK
debug seastore: 20
debug seastore onode: 20
debug seastore odata: 20

View File

@ -5,7 +5,10 @@ overrides:
# crimson's osd objectstore option
osd objectstore: seastore
seastore cachepin type: 2Q
seastore main device type: RANDOM_BLOCK_SSD
seastore hot device type: RANDOM_BLOCK_SSD
seastore hot backend type: RANDOM_BLOCK
seastore cold device type: RANDOM_BLOCK_HDD
seastore cold backend type: RANDOM_BLOCK
debug seastore: 20
debug seastore onode: 20
debug seastore odata: 20

View File

@ -4,6 +4,8 @@ overrides:
osd:
# crimson's osd objectstore option
osd objectstore: seastore
seastore cold device type: RANDOM_BLOCK_HDD
seastore cold backend type: RANDOM_BLOCK
debug seastore: 20
debug seastore onode: 20
debug seastore odata: 20

View File

@ -5,6 +5,8 @@ overrides:
# crimson's osd objectstore option
osd objectstore: seastore
seastore cachepin type: 2Q
seastore cold device type: RANDOM_BLOCK_HDD
seastore cold backend type: RANDOM_BLOCK
debug seastore: 20
debug seastore onode: 20
debug seastore odata: 20

View File

@ -1,21 +1,21 @@
overrides:
ceph:
log-ignorelist:
- \(MDS_ALL_DOWN\)
- \(MDS_UP_LESS_THAN_MAX\)
- \(OSD_SLOW_PING_TIME
- MDS_ALL_DOWN
- MDS_UP_LESS_THAN_MAX
- OSD_SLOW_PING_TIME
- reached quota
- overall HEALTH_
- \(CACHE_POOL_NO_HIT_SET\)
- \(POOL_FULL\)
- \(SMALLER_PGP_NUM\)
- \(SLOW_OPS\)
- \(CACHE_POOL_NEAR_FULL\)
- \(POOL_APP_NOT_ENABLED\)
- \(PG_AVAILABILITY\)
- \(OBJECT_MISPLACED\)
- CACHE_POOL_NO_HIT_SET
- POOL_FULL
- SMALLER_PGP_NUM
- SLOW_OPS
- CACHE_POOL_NEAR_FULL
- POOL_APP_NOT_ENABLED
- PG_AVAILABILITY
- OBJECT_MISPLACED
- slow request
- \(MON_DOWN\)
- MON_DOWN
- noscrub
- nodeep-scrub
- OSD_ROOT_DOWN

View File

@ -11,3 +11,8 @@ tasks:
mon osdmap full prune min: 15
mon osdmap full prune interval: 2
mon osdmap full prune txsize: 2
overrides:
ceph:
conf:
osd:
seastore logical bucket cache test stress: true

View File

@ -0,0 +1 @@
.qa/config/crimson_logical_bucket_cache.yaml

View File

@ -0,0 +1 @@
.qa/config/crimson_logical_bucket_cache.yaml

View File

@ -0,0 +1 @@
.qa/config/crimson_logical_bucket_cache.yaml

View File

@ -0,0 +1 @@
.qa/config/crimson_logical_bucket_cache.yaml

View File

@ -0,0 +1 @@
.qa/config/crimson_logical_bucket_cache.yaml

View File

@ -0,0 +1 @@
.qa/config/crimson_logical_bucket_cache.yaml

View File

@ -27,3 +27,4 @@ tasks:
- cephadm.wait_for_service:
service: nvmeof.mypool.mygroup0
refresh: True

View File

@ -27,3 +27,4 @@ tasks:
- cephadm.wait_for_service:
service: nvmeof.mypool.mygroup0
refresh: True

View File

@ -27,3 +27,4 @@ tasks:
- cephadm.wait_for_service:
service: nvmeof.mypool.mygroup0
refresh: True

View File

@ -10,9 +10,9 @@ overrides:
ceph:
extra_system_packages:
rpm:
- java
- java-21-openjdk-headless
deb:
- default-jre
- openjdk-21-jre-headless
ceph:
conf:
global:

View File

@ -0,0 +1,3 @@
tasks:
- kerberos:
client.0:

View File

@ -0,0 +1 @@
../.qa/

View File

@ -0,0 +1,4 @@
tasks:
- kafka:
client.0:
kafka_version: 3.9.2

View File

@ -0,0 +1,4 @@
tasks:
- kafka:
client.0:
kafka_version: "4.1"

View File

@ -0,0 +1,4 @@
tasks:
- kafka:
client.0:
kafka_version: "4.2"

View File

@ -0,0 +1,4 @@
tasks:
- kafka:
client.0:
kafka_version: "4.3"

View File

@ -0,0 +1,5 @@
tasks:
- notification-tests:
client.0:
extra_attr: ["kafka_test", "kafka_security_test"]
rgw_server: client.0

View File

@ -1,10 +0,0 @@
tasks:
- kerberos:
client.0:
- kafka:
client.0:
kafka_version: 3.9.2
- notification-tests:
client.0:
extra_attr: ["kafka_test", "kafka_security_test"]
rgw_server: client.0

View File

@ -29,6 +29,7 @@ overrides:
- POOL_FULL
- pool full
- pool\(s\) full
- telemetry module includes new collections
tasks:
- install:
branch: squid

View File

@ -29,6 +29,7 @@ overrides:
- POOL_FULL
- pool full
- pool\(s\) full
- telemetry module includes new collections
tasks:
- install:
branch: tentacle

View File

@ -84,7 +84,7 @@ class CBT(Task):
cbt_depends += ['pdsh', 'pdsh-rcmd-ssh']
self.log.info('Installing collectl')
collectl_location = "https://sourceforge.net/projects/collectl/files/collectl/collectl-4.3.1/collectl-4.3.1.src.tar.gz/download"
collectl_location = "https://download.ceph.com/qa/collectl-4.3.1.src.tar.gz"
self.first_mon.run(
args=[
'sudo', 'mkdir', 'collectl', run.Raw('&&'),

View File

@ -209,8 +209,8 @@ def task(ctx, config):
manager.raw_cluster_cmd('osd', 'set', 'nodown')
if CRIMSON:
CRIMSON_DEVICE_TYPE = manager.get_config('osd', 0, 'seastore_main_device_type')
log.info('seastore_main_device_type is {}...'.format(CRIMSON_DEVICE_TYPE))
CRIMSON_DEVICE_TYPE = manager.get_config('osd', 0, 'seastore_hot_device_type')
log.info('seastore_hot_device_type is {}...'.format(CRIMSON_DEVICE_TYPE))
PGNUM = config.get('pgnum', 12)
log.info("pgnum: {num}".format(num=PGNUM))

View File

@ -11,6 +11,7 @@ import functools
from io import StringIO
from collections import deque
from datetime import datetime
from tasks.cephfs.cephfs_test_case import CephFSTestCase
from teuthology.exceptions import CommandFailedError
@ -19,6 +20,16 @@ from teuthology.orchestra import run
log = logging.getLogger(__name__)
# ISO-8601 local time with offset, as dumped by peer_status / mgr status
# (e.g. 2026-07-15T12:00:00.558797+0530)
SYNC_TIME_STAMP_RE = re.compile(
r'^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}[+-]\d{4}$')
def parse_sync_time_stamp(ts):
"""Parse sync_time_stamp / metrics_updated_at ISO-8601 display strings."""
return datetime.strptime(ts, '%Y-%m-%dT%H:%M:%S.%f%z')
# Exceptions to retry in test assertions
RETRY_EXCEPTIONS = (AssertionError, KeyError, IndexError, CommandFailedError)
@ -253,7 +264,7 @@ class TestMirroring(CephFSTestCase):
vafter = res[TestMirroring.PERF_COUNTER_KEY_NAME_CEPHFS_MIRROR_FS][0]
self.assertGreater(vafter["counters"]["mirroring_peers"], vbefore["counters"]["mirroring_peers"])
def peer_remove(self, fs_name, fs_id, peer_spec):
def peer_remove(self, fs_name, fs_id, peer_spec, verify_dircount=True):
res = self.mirror_daemon_command(f'counter dump for fs: {fs_name}', 'counter', 'dump')
vbefore = res[TestMirroring.PERF_COUNTER_KEY_NAME_CEPHFS_MIRROR_FS][0]
@ -261,9 +272,10 @@ class TestMirroring(CephFSTestCase):
self.run_ceph_cmd("fs", "snapshot", "mirror", "peer_remove", fs_name, peer_uuid)
time.sleep(10)
# verify via asok
res = self.mirror_daemon_command(f'mirror status for fs: {fs_name}',
'fs', 'mirror', 'status', f'{fs_name}@{fs_id}')
self.assertTrue(res['peers'] == {} and res['snap_dirs']['dir_count'] == 0)
if verify_dircount:
res = self.mirror_daemon_command(f'mirror status for fs: {fs_name}',
'fs', 'mirror', 'status', f'{fs_name}@{fs_id}')
self.assertTrue(res['peers'] == {} and res['snap_dirs']['dir_count'] == 0)
res = self.mirror_daemon_command(f'counter dump for fs: {fs_name}', 'counter', 'dump')
vafter = res[TestMirroring.PERF_COUNTER_KEY_NAME_CEPHFS_MIRROR_FS][0]
@ -410,6 +422,7 @@ class TestMirroring(CephFSTestCase):
self.assertRegex(
last_synced_snap['sync_bytes'],
r'^\d+(\.\d+)?\s+(B|KiB|MiB|GiB|TiB|PiB)$')
self.assertRegex(last_synced_snap['sync_time_stamp'], SYNC_TIME_STAMP_RE)
self.assertIsInstance(last_synced_snap['sync_files'], int)
self.assertGreaterEqual(last_synced_snap['sync_files'], 0)
@ -800,6 +813,56 @@ class TestMirroring(CephFSTestCase):
return peer_uuid
return None
def sync_stat_omap_key(self, fs_name, peer_uuid, dir_path):
dir_rel = dir_path.lstrip('/')
return f'sync_stat/{fs_name}/{peer_uuid}/{dir_rel}'
def list_sync_stat_omap_keys(self, fs_name, peer_uuid=None):
p = self.mount_a.client_remote.run(
args=['rados', '-p', self.fs.metadata_pool_name,
'listomapvals', 'cephfs_mirror'],
stdout=StringIO(), stderr=StringIO(), timeout=30,
check_status=True, label='list sync stat omap keys')
p.wait()
prefix = f'sync_stat/{fs_name}/'
if peer_uuid:
prefix = f'{prefix}{peer_uuid}/'
keys = []
for line in p.stdout.getvalue().splitlines():
stripped = line.strip()
if stripped.startswith(prefix):
keys.append(stripped)
return keys
@retry_assert(timeout=60, interval=2)
def wait_sync_stat_omap_key(self, fs_name, peer_uuid, dir_path):
expected = self.sync_stat_omap_key(fs_name, peer_uuid, dir_path)
keys = self.list_sync_stat_omap_keys(fs_name, peer_uuid)
self.assertIn(expected, keys, msg=f'expected omap key {expected}, got {keys}')
@retry_assert(timeout=60, interval=2)
def assert_sync_stat_omap_keys_removed(self, fs_name, peer_uuid=None):
keys = self.list_sync_stat_omap_keys(fs_name, peer_uuid)
self.assertEqual(keys, [], msg=f'stale sync stat omap keys: {keys}')
def setup_sync_stat_omap(self, dir_name='sync_stat_omap_dir'):
self.setup_mount_b(mds_perm='rw')
self.enable_mirroring(self.primary_fs_name, self.primary_fs_id)
peer_spec = "client.mirror_remote@ceph"
self.peer_add(self.primary_fs_name, self.primary_fs_id, peer_spec,
self.secondary_fs_name)
self.mount_a.run_shell(['mkdir', dir_name])
self.mount_a.create_n_files(f'{dir_name}/file', 10, sync=True)
self.add_directory(self.primary_fs_name, self.primary_fs_id, f'/{dir_name}')
snap_name = 'snap0'
self.mount_a.run_shell(['mkdir', f'{dir_name}/.snap/{snap_name}'])
self.check_peer_status_idle(self.primary_fs_name, self.primary_fs_id,
peer_spec, f'/{dir_name}', snap_name, 1)
peer_uuid = self.get_peer_uuid(peer_spec)
self.wait_sync_stat_omap_key(
self.primary_fs_name, peer_uuid, f'/{dir_name}')
return peer_spec, peer_uuid, f'/{dir_name}'
def get_daemon_admin_socket(self):
"""overloaded by teuthology override (fs/mirror/clients/mirror.yaml)"""
return "/var/run/ceph/cephfs-mirror.asok"
@ -2765,12 +2828,12 @@ class TestMirroring(CephFSTestCase):
'fs', 'mirror', 'peer', 'status',
f'{self.primary_fs_name}@{self.primary_fs_id}',
peer_uuid)
d0_sync_time_stamp = float(self.peer_dir_status(res, '/d0', peer_uuid)
['last_synced_snap']['sync_time_stamp'].rstrip('s'))
d1_sync_time_stamp = float(self.peer_dir_status(res, '/d1', peer_uuid)
['last_synced_snap']['sync_time_stamp'].rstrip('s'))
d2_sync_time_stamp = float(self.peer_dir_status(res, '/d2', peer_uuid)
['last_synced_snap']['sync_time_stamp'].rstrip('s'))
d0_sync_time_stamp = parse_sync_time_stamp(
self.peer_dir_status(res, '/d0', peer_uuid)['last_synced_snap']['sync_time_stamp'])
d1_sync_time_stamp = parse_sync_time_stamp(
self.peer_dir_status(res, '/d1', peer_uuid)['last_synced_snap']['sync_time_stamp'])
d2_sync_time_stamp = parse_sync_time_stamp(
self.peer_dir_status(res, '/d2', peer_uuid)['last_synced_snap']['sync_time_stamp'])
self.assertGreaterEqual(d1_sync_time_stamp, d0_sync_time_stamp)
self.assertGreaterEqual(d2_sync_time_stamp, d0_sync_time_stamp)
@ -2837,12 +2900,12 @@ class TestMirroring(CephFSTestCase):
'fs', 'mirror', 'peer', 'status',
f'{self.primary_fs_name}@{self.primary_fs_id}',
peer_uuid)
d0_sync_time_stamp = float(self.peer_dir_status(res, '/d0', peer_uuid)
['last_synced_snap']['sync_time_stamp'].rstrip('s'))
d1_sync_time_stamp = float(self.peer_dir_status(res, '/d1', peer_uuid)
['last_synced_snap']['sync_time_stamp'].rstrip('s'))
d2_sync_time_stamp = float(self.peer_dir_status(res, '/d2', peer_uuid)
['last_synced_snap']['sync_time_stamp'].rstrip('s'))
d0_sync_time_stamp = parse_sync_time_stamp(
self.peer_dir_status(res, '/d0', peer_uuid)['last_synced_snap']['sync_time_stamp'])
d1_sync_time_stamp = parse_sync_time_stamp(
self.peer_dir_status(res, '/d1', peer_uuid)['last_synced_snap']['sync_time_stamp'])
d2_sync_time_stamp = parse_sync_time_stamp(
self.peer_dir_status(res, '/d2', peer_uuid)['last_synced_snap']['sync_time_stamp'])
self.assertLess(d1_sync_time_stamp, d0_sync_time_stamp)
self.assertLess(d2_sync_time_stamp, d0_sync_time_stamp)
@ -3052,6 +3115,43 @@ class TestMirroring(CephFSTestCase):
self.assertEqual(res, {'metrics': {}})
self.disable_mirroring(self.primary_fs_name, self.primary_fs_id)
def test_cephfs_mirror_sync_stat_omap_removed_on_peer_remove(self):
"""peer_remove purges persisted sync-stat omap entries for the peer."""
peer_spec, peer_uuid, _dir_path = self.setup_sync_stat_omap(
dir_name='sync_stat_omap_peer_remove')
self.peer_remove(self.primary_fs_name, self.primary_fs_id, peer_spec, False)
self.assert_sync_stat_omap_keys_removed(
self.primary_fs_name, peer_uuid)
self.disable_mirroring(self.primary_fs_name, self.primary_fs_id)
def test_cephfs_mirror_sync_stat_omap_removed_on_disable(self):
"""mirror disable purges persisted sync-stat omap entries."""
_peer_spec, peer_uuid, _dir_path = self.setup_sync_stat_omap(
dir_name='sync_stat_omap_disable')
keys_before = self.list_sync_stat_omap_keys(
self.primary_fs_name, peer_uuid)
self.assertTrue(keys_before)
self.disable_mirroring(self.primary_fs_name, self.primary_fs_id)
self.assert_sync_stat_omap_keys_removed(self.primary_fs_name)
def test_cephfs_mirror_sync_stat_omap_preserved_on_restart(self):
"""Daemon restart preserves persisted sync-stat omap entries."""
peer_spec, peer_uuid, dir_path = self.setup_sync_stat_omap(
dir_name='sync_stat_omap_restart')
keys_before = self.list_sync_stat_omap_keys(
self.primary_fs_name, peer_uuid)
self.assertTrue(keys_before)
self.restart_mirror_daemon()
self.wait_sync_stat_omap_key(
self.primary_fs_name, peer_uuid, dir_path)
keys_after = self.list_sync_stat_omap_keys(
self.primary_fs_name, peer_uuid)
self.assertEqual(set(keys_before), set(keys_after))
self.remove_directory(self.primary_fs_name, self.primary_fs_id,
dir_path)
self.peer_remove(self.primary_fs_name, self.primary_fs_id, peer_spec)
self.disable_mirroring(self.primary_fs_name, self.primary_fs_id)
def test_mgr_snapshot_mirror_status_errors(self):
"""Mgr status returns expected errors for invalid inputs."""
self.setup_mount_b(mds_perm='rw')

View File

@ -4431,6 +4431,51 @@ class TestSubvolumes(TestVolumesHelper):
# verify trash dir is clean
self._wait_for_trash_empty()
def test_subvolume_resize_valid_unit(self):
"""
That a subvolume can be resized when provided with valid value
(both int and float accepted) and unit.
"""
readable_values = {"10B": 10, "10K": 10240, "200KB": 204800,
"300Ki": 307200, "300KiB": 307200,
"300.67KiB": 307886, "10M": 10485760,
"100MB": 104857600, "100Mi": 104857600,
"100MiB": 104857600, "100.123MiB": 104986574,
"2G": 2147483648, "2GB": 2147483648,
"4Gi": 4294967296, "4GiB": 4294967296,
"4.2GiB": 4509715660, "1T": 1099511627776,
"2TB": 2199023255552, "2Ti": 2199023255552,
"2TiB": 2199023255552, "2.2TiB": 2418925581107}
subvolume = self._gen_subvol_name()
self._fs_cmd("subvolume", "create", self.volname, subvolume)
for readable_value in readable_values:
self._fs_cmd("subvolume", "resize", self.volname, subvolume,
readable_value)
subvol_info = json.loads(self._get_subvolume_info(self.volname, subvolume))
self.assertEqual(subvol_info["bytes_quota"], readable_values.get(readable_value))
self._fs_cmd("subvolume", "rm", self.volname, subvolume)
self._wait_for_trash_empty()
def test_subvolume_resize_invalid_unit(self):
"""
That a subvolume resize fails when provided with invalid value
and/or unit.
"""
invalid_values = ("10A", "1y00Ki", "af00", "G", "", " ", "-1t", "-1",
"1GT", "2MM", "5Di", "8Bi", "i", "7iB", "1.K", ".MB",
".10.G", "10Ki.B", "1.0.3TiB", "20G/.", "Gi32Ki",
"10.64B", "1.B", ".B", "B.1", "KB1", "GB.1", "TB1.1")
subvolume = self._gen_subvol_name()
self._fs_cmd("subvolume", "create", self.volname, subvolume)
for invalid_value in invalid_values:
with self.assertRaises(CommandFailedError):
self._fs_cmd("subvolume", "resize", self.volname, subvolume,
invalid_value)
self._fs_cmd("subvolume", "rm", self.volname, subvolume)
self._wait_for_trash_empty()
def test_subvolume_rm_force(self):
# test removing non-existing subvolume with --force
subvolume = self._gen_subvol_name()

View File

@ -31,12 +31,18 @@ def install_dnsmasq(remote):
packaging.remove_package('dnsmasq', remote)
@contextlib.contextmanager
def configure_dnsmasq(remote, path, cnames):
def configure_dnsmasq(remote, path, cnames, no_resolv=False):
"""
configure dnsmasq on the given remote, adding each cname given
When no_resolv is set, dnsmasq will not forward unmatched queries upstream
via /etc/resolv.conf. This is needed on the systemd-resolved path: resolved
routes the cname domains to dnsmasq, but /etc/resolv.conf points back at
resolved, so forwarding would form a query loop that stalls resolution.
"""
data = """# This file is generated by dnsmasq teuthology task
"""
data = "# This file is generated by dnsmasq teuthology task\n"
if no_resolv:
data += "no-resolv\n"
for cname, ip_address in cnames.items():
data += f"address=/.{cname}/{ip_address}\n"
@ -171,7 +177,8 @@ def task(ctx, config):
subtasks.extend([ lambda r=remote: configure_network_manager(r) ])
else:
path = '/etc/dnsmasq.d/ceph.conf'
subtasks.extend([ lambda r=remote, p=path, cn=cnames: configure_dnsmasq(r, p, cn) ])
# no_resolv avoids a resolv.conf <-> resolved query loop, see configure_dnsmasq() docstring
subtasks.extend([ lambda r=remote, p=path, cn=cnames: configure_dnsmasq(r, p, cn, no_resolv=True) ])
subtasks.extend([ lambda r=remote, cn=cnames: configure_systemd_resolved(r, cn) ])
subtasks.extend([ lambda r=remote, cn=cnames: test_dns_names(r, cn) ])

View File

@ -3,8 +3,10 @@ Deploy and configure Kafka for Teuthology
"""
import contextlib
import logging
import re
import time
import os
import urllib.request
from teuthology import misc as teuthology
from teuthology import contextutil
@ -26,8 +28,38 @@ def get_kafka_version(config):
kafka_version = client_config.get('kafka_version')
return kafka_version
def is_kraft_mode(version_str):
"""Kafka 4.0+ removed Zookeeper and uses KRaft consensus instead."""
return int(version_str.split('.')[0]) >= 4
def resolve_kafka_version(version):
"""
Resolve a minor version like "4.3" to the current patch (e.g. "4.3.1")
by querying Apache's live mirror. A fully-qualified version (three
dotted components, e.g. "3.9.2") is returned unchanged, so it can
still be used as a literal patch pin.
Raises RuntimeError if the minor line is not on dlcdn.apache.org.
"""
if version.count('.') >= 2:
return version
with urllib.request.urlopen(
'https://dlcdn.apache.org/kafka/', timeout=30) as resp:
html = resp.read().decode()
pattern = re.compile(r'href="(' + re.escape(version) + r'\.\d+)/"')
matches = pattern.findall(html)
if not matches:
raise RuntimeError(
"Kafka {v}.x not found on dlcdn.apache.org "
"the minor line may have been dropped from Apache's "
"supported set.".format(v=version)
)
return max(matches, key=lambda v: tuple(int(p) for p in v.split('.')))
kafka_prefix = 'kafka_2.13-'
KRAFT_CONTROLLER_PORT = 9097
def get_kafka_dir(ctx, config):
kafka_version = get_kafka_version(config)
current_version = kafka_prefix + kafka_version
@ -55,6 +87,7 @@ def install_kafka(ctx, config):
(remote,) = ctx.cluster.only(client).remotes.keys()
test_dir=teuthology.get_testdir(ctx)
current_version = get_kafka_version(config)
kraft = is_kraft_mode(current_version)
kafka_file = kafka_prefix + current_version + '.tgz'
@ -104,7 +137,25 @@ def install_kafka(ctx, config):
)
client_kerberos = kerberos.get(client) if kerberos else None
broker_conf(ctx, client, kafka_dir, client_kerberos)
broker_conf(ctx, client, kafka_dir, client_kerberos, kraft)
if kraft:
# Kafka 4.x KRaft mode requires storage to be formatted before
# the broker starts. --standalone auto-bootstraps a single-node
# KRaft cluster.
uuid_result = remote.sh(
'cd {tdir}/bin && ./kafka-storage.sh random-uuid'.format(
tdir=kafka_dir)
).strip()
ctx.cluster.only(client).run(
args=[
'cd', '{tdir}/bin'.format(tdir=kafka_dir), run.Raw('&&'),
'./kafka-storage.sh', 'format',
'-t', uuid_result,
'-c', '{tdir}/config/server.properties'.format(tdir=kafka_dir),
'--standalone',
],
)
try:
yield
@ -126,20 +177,41 @@ def install_kafka(ctx, config):
)
def broker_conf(ctx, client, kafka_dir, kerberos):
def broker_conf(ctx, client, kafka_dir, kerberos, kraft):
"""writing a custom server.properties config file"""
(remote,) = ctx.cluster.only(client).remotes.keys()
ip = remote.ip_address
if kraft:
identity = (
"node.id=1\n"
"process.roles=broker,controller\n"
)
controller_listener = ",CONTROLLER://0.0.0.0:{controller}".format(
controller=KRAFT_CONTROLLER_PORT)
controller_protocol = ",CONTROLLER:PLAINTEXT"
consensus_config = (
"controller.listener.names=CONTROLLER\n"
"controller.quorum.bootstrap.servers=localhost:{controller}\n"
).format(controller=KRAFT_CONTROLLER_PORT)
else:
identity = "broker.id=0\n"
controller_listener = ""
controller_protocol = ""
consensus_config = (
"zookeeper.connect=localhost:2181\n"
"zookeeper.connection.timeout.ms=18000\n"
)
conf = (
"broker.id=0\n"
identity +
"listeners=PLAINTEXT://0.0.0.0:{plaintext},SSL://0.0.0.0:{ssl},"
"SASL_SSL://0.0.0.0:{sasl_ssl},SASL_PLAINTEXT://0.0.0.0:{sasl_plaintext},"
"MTLS://0.0.0.0:{mtls}\n"
"MTLS://0.0.0.0:{mtls}" + controller_listener + "\n"
"advertised.listeners=PLAINTEXT://{ip}:{plaintext},SSL://{ip}:{ssl},"
"SASL_SSL://{ip}:{sasl_ssl},SASL_PLAINTEXT://{ip}:{sasl_plaintext},"
"MTLS://{ip}:{mtls}\n"
"listener.security.protocol.map=PLAINTEXT:PLAINTEXT,SSL:SSL,"
"SASL_SSL:SASL_SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,MTLS:SSL\n"
"SASL_SSL:SASL_SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,MTLS:SSL"
+ controller_protocol + "\n"
"inter.broker.listener.name=PLAINTEXT\n"
"log.dirs={tdir}/data/kafka-logs\n"
"num.network.threads=3\n"
@ -155,8 +227,7 @@ def broker_conf(ctx, client, kafka_dir, kerberos):
"log.retention.hours=168\n"
"log.segment.bytes=1073741824\n"
"log.retention.check.interval.ms=300000\n"
"zookeeper.connect=localhost:2181\n"
"zookeeper.connection.timeout.ms=18000\n"
+ consensus_config +
"group.initial.rebalance.delay.ms=0\n"
# SSL configuration
"ssl.keystore.location={tdir}/server.keystore.jks\n"
@ -237,22 +308,24 @@ def broker_conf(ctx, client, kafka_dir, kerberos):
@contextlib.contextmanager
def run_kafka(ctx,config):
"""
This includes two parts:
1. Starting Zookeeper service
2. Starting Kafka service
Starts the Kafka broker. In Zookeeper mode (3.x) also starts Zookeeper
first; KRaft mode (4.x) embeds the controller in the broker process.
"""
assert isinstance(config, dict)
log.info('Bringing up Zookeeper and Kafka services...')
kraft = is_kraft_mode(get_kafka_version(config))
log.info('Bringing up Kafka%s services...',
'' if kraft else ' and Zookeeper')
for (client,_) in config.items():
(remote,) = ctx.cluster.only(client).remotes.keys()
ctx.cluster.only(client).run(
args=['cd', '{tdir}/bin'.format(tdir=get_kafka_dir(ctx, config)), run.Raw('&&'),
'./zookeeper-server-start.sh',
'{tir}/config/zookeeper.properties'.format(tir=get_kafka_dir(ctx, config)),
run.Raw('&'), 'exit'
],
)
if not kraft:
ctx.cluster.only(client).run(
args=['cd', '{tdir}/bin'.format(tdir=get_kafka_dir(ctx, config)), run.Raw('&&'),
'./zookeeper-server-start.sh',
'{tir}/config/zookeeper.properties'.format(tir=get_kafka_dir(ctx, config)),
run.Raw('&'), 'exit'
],
)
ctx.cluster.only(client).run(
args=['cd', '{tdir}/bin'.format(tdir=get_kafka_dir(ctx, config)), run.Raw('&&'),
@ -265,28 +338,30 @@ def run_kafka(ctx,config):
try:
yield
finally:
log.info('Stopping Zookeeper and Kafka Services...')
log.info('Stopping Kafka%s services...',
'' if kraft else ' and Zookeeper')
for (client, _) in config.items():
(remote,) = ctx.cluster.only(client).remotes.keys()
ctx.cluster.only(client).run(
args=['cd', '{tdir}/bin'.format(tdir=get_kafka_dir(ctx, config)), run.Raw('&&'),
'./kafka-server-stop.sh',
'./kafka-server-stop.sh',
'{tir}/config/server.properties'.format(tir=get_kafka_dir(ctx, config)),
],
)
time.sleep(5)
ctx.cluster.only(client).run(
args=['cd', '{tdir}/bin'.format(tdir=get_kafka_dir(ctx, config)), run.Raw('&&'),
'./zookeeper-server-stop.sh',
'{tir}/config/zookeeper.properties'.format(tir=get_kafka_dir(ctx, config)),
],
)
if not kraft:
ctx.cluster.only(client).run(
args=['cd', '{tdir}/bin'.format(tdir=get_kafka_dir(ctx, config)), run.Raw('&&'),
'./zookeeper-server-stop.sh',
'{tir}/config/zookeeper.properties'.format(tir=get_kafka_dir(ctx, config)),
],
)
time.sleep(5)
time.sleep(5)
ctx.cluster.only(client).run(args=['killall', '-9', 'java'])
@ -342,7 +417,12 @@ def task(ctx,config):
tasks:
- kafka:
client.0:
kafka_version: 2.6.0
kafka_version: "4.3"
A minor version like "4.3" is resolved to the current patch at test
time via dlcdn.apache.org. A full version like "3.9.2" is used as-is.
Kafka 4.x is started in KRaft mode automatically; 3.x is started with
a colocated Zookeeper. Pick whichever version your suite needs.
"""
assert config is None or isinstance(config, list) \
or isinstance(config, dict), \
@ -355,6 +435,14 @@ def task(ctx,config):
if isinstance(config, list):
config = dict.fromkeys(config)
for client_config in config.values():
if client_config and 'kafka_version' in client_config:
raw = client_config['kafka_version']
resolved = resolve_kafka_version(raw)
if resolved != raw:
log.info("Kafka version resolved: %s -> %s", raw, resolved)
client_config['kafka_version'] = resolved
ctx.kafka_dir = get_kafka_dir(ctx, config)
log.debug('Kafka config is %s', config)

View File

@ -12,10 +12,21 @@ from teuthology.orchestra import run
log = logging.getLogger(__name__)
# This task currently supports Kafka 3.x (Zookeeper) only. KRaft (4.x)
# requires a different multi-controller bootstrap for the two-broker HA
# topology this task spins up. The suite yaml at
# qa/suites/rgw/notifications/tasks/kafka_failover/test_kafka.yaml pins
# kafka_version: 3.9.2; the runtime check below fails fast if anyone
# changes that to a 4.x version without updating the task.
def get_kafka_version(config):
for client, client_config in config.items():
if 'kafka_version' in client_config:
kafka_version = client_config.get('kafka_version')
if int(kafka_version.split('.')[0]) >= 4:
raise RuntimeError(
"kafka_failover task does not yet support Kafka 4.x (KRaft); "
"pin kafka_version to a 3.x release or extend this task."
)
return kafka_version
kafka_prefix = 'kafka_2.13-'

View File

@ -36,6 +36,9 @@ class DashboardTestCase(MgrTestCase):
REQUIRE_FILESYSTEM = True
CLIENTS_REQUIRED = 1
CEPHFS = False
# assigned by setup_mgrs() while the mgrs are down, so setUpClass
# bounces the mgrs once instead of twice
MODULE_PORTS = [("dashboard", "ssl_server_port", 7789)]
ORCHESTRATOR = False
ORCHESTRATOR_TEST_DATA = {
'inventory': [
@ -212,8 +215,10 @@ class DashboardTestCase(MgrTestCase):
@classmethod
def setUpClass(cls):
# setup_mgrs() assigns the dashboard port (MODULE_PORTS) while
# the mgrs are down, so no second _assign_ports() bounce is
# needed here
super(DashboardTestCase, cls).setUpClass()
cls._assign_ports("dashboard", "ssl_server_port")
cls._load_module("dashboard")
cls.update_base_uri()

Some files were not shown because too many files have changed in this diff Show More