]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/log
ceph.git
3 weeks agoqa/test_mirroring: Add tests for mirroring checkpoints 70029/head
Karthik U S [Sat, 16 May 2026 03:15:50 +0000 (08:45 +0530)]
qa/test_mirroring: Add tests for mirroring checkpoints

Adding integration tests for validating the cephfs mirroring
checkpoints feature

Fixes: https://tracker.ceph.com/issues/73454
Signed-off-by: Karthik U S <karthik.u.s1@ibm.com>
(cherry picked from commit fe7fa7b0761720181cf8735ac7b5f17080c1d8a7)

3 weeks agodoc: Add docs and pending release notes for mirroring checkpoints
Karthik U S [Thu, 4 Jun 2026 11:47:05 +0000 (17:17 +0530)]
doc: Add docs and pending release notes for mirroring checkpoints

Adding documentations and pending release notes for the mirroring
checkpoints feature.

Fixes: https://tracker.ceph.com/issues/73454
Signed-off-by: Karthik U S <karthik.u.s1@ibm.com>
(cherry picked from commit 12bd34d69ac7e136d14d25ea274e99727b559870)

3 weeks agomgr/mirroring,tools/cephfs_mirror: Handle checkpoint state transition
Karthik U S [Wed, 10 Jun 2026 05:48:25 +0000 (11:18 +0530)]
mgr/mirroring,tools/cephfs_mirror: Handle checkpoint state transition

When a new checkpoint is being added or when the daemon gets restarted,
it will check whether the newly created checkpoint or any other old
checkpoints have already been mirrored onto the remote peer. If so, it
will transition to the correct state by checking for the highest snap id
present on the remote, and setting all the checkpoints which have snap id
lesser than or equal to that of the remote to COMPLETE. This is done by
sending an acquire notification from the mirroring module to the mirror
daemon, which is handled in the add_directory path, by adding the directory
to be checked for the state transition in the tick thread.
This path gets triggered:
a) when the daemon gets restarted
b) when the peer mapping changes
c) by sending the acquire notification from checkpoint add/now CLIs.
d) when mirroring module restarts

Fixes: https://tracker.ceph.com/issues/73454
Signed-off-by: Karthik U S <karthik.u.s1@ibm.com>
(cherry picked from commit c64fe9636514d9e9b1c286a0b21b84569e266067)

3 weeks agotools/cephfs_mirror: update checkpoint status during snapshot sync
Karthik U S [Sat, 16 May 2026 00:50:03 +0000 (06:20 +0530)]
tools/cephfs_mirror: update checkpoint status during snapshot sync

When the sync completes or fails for a checkpointed snapshot, transition
the status of that checkpoint from CREATED/FAILED to COMPLETE/FAILED in
the do_sync_snaps() along with the timestamp of the event.

Fixes: https://tracker.ceph.com/issues/73454
Signed-off-by: Karthik U S <karthik.u.s1@ibm.com>
(cherry picked from commit 37163436cc87a2be691202bb565c7b5007df026f)

3 weeks agotools/cephfs_mirror: Helper functions for mirroring checkpoints
Karthik U S [Tue, 12 May 2026 23:21:53 +0000 (04:51 +0530)]
tools/cephfs_mirror: Helper functions for mirroring checkpoints

Implementation of helper functions and data structures for the
snapshot based mirroring checkpoints feature.

Fixes: https://tracker.ceph.com/issues/73454
Signed-off-by: Karthik U S <karthik.u.s1@ibm.com>
(cherry picked from commit 0a394ef438abd0248d078ea72e8ae5ce4f3d5e84)

3 weeks agomgr/mirroring: Add mirroring checkpoint CLIs
Karthik U S [Sat, 16 May 2026 00:49:59 +0000 (06:19 +0530)]
mgr/mirroring: Add mirroring checkpoint CLIs

Add mgr checkpoint add/remove/ls/now commands that read and write
checkpoint metadata on the primary filesystem via do_snap_md_op.

Sample CLIs:
ceph fs snapshot mirror checkpoint add <vol-name> <dir-root> <snap-name>
ceph fs snapshot mirror checkpoint remove <vol-name> <dir-root> <snap-name>
ceph fs snapshot mirror checkpoint ls <vol-name> <dir-root>
ceph fs snapshot mirror checkpoint now <vol-name> <dir-root>

Fixes: https://tracker.ceph.com/issues/73454
Signed-off-by: Karthik U S <karthik.u.s1@ibm.com>
(cherry picked from commit 959bc2eb07cacf70a4da09170e1c9bbed4b9423f)

3 weeks agoPendingReleaseNotes: add note for mutability of CephFS snapshot metadata
Rishabh Dave [Mon, 15 Jun 2026 11:09:25 +0000 (16:39 +0530)]
PendingReleaseNotes: add note for mutability of CephFS snapshot metadata

Signed-off-by: Rishabh Dave <ridave@redhat.com>
(cherry picked from commit 7f1f0e9eb2fabb88a8e44525cb8490a44a95a79d)

3 weeks agotest_cephfs.py: add tests for do_snap_md_op()
Rishabh Dave [Wed, 1 Apr 2026 12:32:28 +0000 (18:02 +0530)]
test_cephfs.py: add tests for do_snap_md_op()

Signed-off-by: Rishabh Dave <ridave@redhat.com>
(cherry picked from commit df7abb7a7b7be952e30e2ac286b108c3cab5ca90)

3 weeks agopybind/cephfs: add python binding for ceph_do_snap_md_op()
Rishabh Dave [Wed, 1 Apr 2026 12:31:56 +0000 (18:01 +0530)]
pybind/cephfs: add python binding for ceph_do_snap_md_op()

Signed-off-by: Rishabh Dave <ridave@redhat.com>
(cherry picked from commit 8d5cf70ba6affe5fcb921509befc59c990c5a3bf)

3 weeks agotests/libcephfs: add tests for snap metadata mutations
Rishabh Dave [Wed, 19 Nov 2025 17:12:35 +0000 (22:42 +0530)]
tests/libcephfs: add tests for snap metadata mutations

Signed-off-by: Rishabh Dave <ridave@redhat.com>
(cherry picked from commit 446bd6af1123884912ffbb743950c99c6b699267)

3 weeks agolibcephfs: provide API to mutate snapshot metadata
Rishabh Dave [Mon, 17 Nov 2025 12:23:56 +0000 (17:53 +0530)]
libcephfs: provide API to mutate snapshot metadata

Fixes: https://tracker.ceph.com/issues/66293
Signed-off-by: Rishabh Dave <ridave@redhat.com>
(cherry picked from commit 5726edbcf37ed9c3cf7835bdc3447c7a4fecec55)

3 weeks agomds: add MDS code to allow snap metadata mutations
Rishabh Dave [Mon, 17 Nov 2025 12:21:48 +0000 (17:51 +0530)]
mds: add MDS code to allow snap metadata mutations

Fixes: https://tracker.ceph.com/issues/66293
Signed-off-by: Rishabh Dave <ridave@redhat.com>
(cherry picked from commit a7617f354eb897ce86ba0b45eafa3005c3924d47)

3 weeks agomds: rename a finisher method in Server.cc since...
Rishabh Dave [Mon, 2 Mar 2026 16:16:32 +0000 (21:46 +0530)]
mds: rename a finisher method in Server.cc since...

it will be used in a different context as well in the upcoming commit.

Signed-off-by: Rishabh Dave <ridave@redhat.com>
(cherry picked from commit 047f41aac142bd70d07e25affed7d99cbd96320c)

3 weeks agomds: enable logging for snap.cc
Rishabh Dave [Sat, 14 Mar 2026 10:37:00 +0000 (16:07 +0530)]
mds: enable logging for snap.cc

Signed-off-by: Rishabh Dave <ridave@redhat.com>
(cherry picked from commit 2aed10be29fa7736051f03c66493d99606fe61e1)

3 weeks agoclient: add client code to allow snap metadata mutations
Rishabh Dave [Thu, 27 Nov 2025 14:10:27 +0000 (19:40 +0530)]
client: add client code to allow snap metadata mutations

Fixes: https://tracker.ceph.com/issues/66293
Signed-off-by: Rishabh Dave <ridave@redhat.com>
(cherry picked from commit bf5080c08cd86fe39976ebd5310506d7059dbfc6)

3 weeks agoqa: Add mgr snapshot mirror status tests
Kotresh HR [Tue, 23 Jun 2026 15:13:18 +0000 (20:43 +0530)]
qa: Add mgr snapshot mirror status tests

Add teuthology coverage for `ceph fs snapshot mirror status`:
parity with asok peer_status, default idle metrics, stale omap
handling, error paths, filter scopes, daemon restart, and cache TTL.

Reuse existing peer_dir_status and metrics assertion helpers.
Adjust stale test wait for InstanceWatcher timeout and set a
short cache TTL in the cache test. Pass peer_uuid via --peer_uuid=
in the test helper for peer-only scope queries.

Fixes: https://tracker.ceph.com/issues/76686
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit b80828fbadf285029239725d9cb175812aadf07a)

3 weeks agodoc/cephfs: Document fs snapshot mirror status mgr command
Kotresh HR [Sun, 21 Jun 2026 17:59:43 +0000 (23:29 +0530)]
doc/cephfs: Document fs snapshot mirror status mgr command

Describe the mirroring module command that reads persisted omap
metrics, including syntax, output layout, stale detection, caching,
and comparison with the admin socket peer status interface.

Document --peer_uuid as a named argument for peer-only and
directory/peer filtering.

Also update PendingReleaseNotes

Fixes: https://tracker.ceph.com/issues/76686
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 87638c8be49918a8c794a1212f4122f2aa55f1c7)

3 weeks agomgr/mirroring: make snapshot mirror metrics cache optional
Kotresh HR [Sun, 21 Jun 2026 17:52:29 +0000 (23:22 +0530)]
mgr/mirroring: make snapshot mirror metrics cache optional

Add snapshot_mirror_metrics_cache_enabled (default true). When disabled,
metrics_status reads omap directly and skips complete and partial caches.
When enabled, behavior is unchanged.

Fixes: https://tracker.ceph.com/issues/76686
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 01dd9506f2c62a75841184ac9aa75cf72bf57b5b)

3 weeks agomgr/mirroring: make snapshot mirror metrics cache TTL configurable
Kotresh HR [Sun, 21 Jun 2026 17:50:28 +0000 (23:20 +0530)]
mgr/mirroring: make snapshot mirror metrics cache TTL configurable

Add snapshot_mirror_metrics_cache_ttl as a runtime mgr/mirroring module
option (default 15 seconds) instead of a hard-coded CACHE_TTL_SECS.
Both complete and partial lru_cache_timeout wrappers read the value
when caching omap metrics so operators can tune cache freshness without
code changes.

Fixes: https://tracker.ceph.com/issues/76686
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit e36faf8bcca5afd6ab4454751fb1d6e84a1bed5f)

3 weeks agomgr/mirroring: handle missing cephfs_mirror object in metrics status
Kotresh HR [Sun, 21 Jun 2026 17:48:15 +0000 (23:18 +0530)]
mgr/mirroring: handle missing cephfs_mirror object in metrics status

When snapshot mirroring is not enabled for a filesystem, the
cephfs_mirror RADOS object does not exist and "ceph fs snapshot mirror
status" fails reading sync stat omap. Map rados ENOENT to a clear
MirrorException so the CLI reports that snapshot mirroring must be
enabled instead of a generic omap read failure or an uncaught exception.

Also catch unexpected errors in metrics_status like other mirror CLI
handlers, so the mgr module does not crash on failure. Return
-errno.EINVAL from the generic error path instead of the exception
message as exit code.

Fixes: https://tracker.ceph.com/issues/76686
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit a7325bafb9ab29f17f45e4c14db56a86632d0ff1)

3 weeks agomgr/mirroring: Show default stats on newly added dir_root
Kotresh HR [Sun, 21 Jun 2026 17:35:30 +0000 (23:05 +0530)]
mgr/mirroring: Show default stats on newly added dir_root

When the directory is added for mirroring and the snapshot
is not taken yet, the peer_status show the following default
metrics.

{
  'state': 'idle',
  'snaps_synced': 0,
  'snaps_deleted': 0,
  'snaps_renamed': 0,
}

The mgr interface should also match that.

Fixes: https://tracker.ceph.com/issues/76686
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit c24b8d3cc2fb36ea77276598a2d1c2f90b1304ec)

3 weeks agomgr/mirroring: detect stale snapshot mirror sync metrics in omap
Kotresh HR [Sun, 21 Jun 2026 17:28:38 +0000 (22:58 +0530)]
mgr/mirroring: detect stale snapshot mirror sync metrics in omap

Persisted metrics in the cephfs_mirror omap can outlive the writing
daemon when cephfs-mirror stops or a directory is reshuffled to another
instance; mgr would keep reporting stale progress until the owning
daemon writes again.

Extend format_and_order_sync_stat_for_display() to compare persisted
_instance_id against InstanceWatcher live instances (via
FSPolicy.get_live_instance_ids()) and the directory's tracked instance
(via Policy.get_tracked_instance_id()). Mark metrics stale when the
persisted writer is no longer live (any state), or when it does not
match the tracked instance while persisted state is not "idle". Show
state "stale" with current_syncing_snap omitted.

Pass policy and live instance ids through load_sync_stat_metrics() and
fetch_sync_stat_metrics(), and into sync_stat_complete_cache and
sync_stat_partial_cache loaders. Cache hits serve already-formatted
(stale-marked) entries until TTL expiry without re-checking instance
liveness.

Fixes: https://tracker.ceph.com/issues/76686
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 15e998b865b99b3091054321cf0fdf6df9f327ab)

3 weeks agomgr/mirroring: cache fs snapshot mirror status omap metrics
Kotresh HR [Tue, 16 Jun 2026 10:42:41 +0000 (16:12 +0530)]
mgr/mirroring: cache fs snapshot mirror status omap metrics

Add a short-lived in-memory cache for metrics returned by
"ceph fs snapshot mirror status", which reads persisted sync stats
from the cephfs_mirror object omap. Omap walks are relatively
expensive; caching reduces repeated reads when the CLI or multiple
clients poll at short intervals.

Two TTL-bucketed LRU caches (CACHE_TTL_SECS) are used instead of one
unified cache. The complete cache always holds every mirrored
directory and peer for a filesystem; the partial cache holds one
directory. A single directory-granularity cache cannot prove it has
all directories, so full-scan queries rely on the complete cache
contract.

Cache implementation (lru_cache_timeout decorator backed by
_TimedLRUCache, not functools.lru_cache):

- lru_cache has no TTL and no peek-on-hit API. Single-directory
  queries must read the complete cache without loading on miss;
  lru_cache.cache is also unavailable on Python 3.14+.

- complete (sync_stat_complete_cache): full omap prefix scan via
  load_sync_stat_metrics. Cache key: (time_token, filesystem).
  COMPLETE_CACHE_MAX limits filesystem entries per TTL window.

- partial (sync_stat_partial_cache): per-directory omap key load via
  fetch_sync_stat_metrics. Cache key: (time_token, filesystem,
  dir_path, peer_ids). PARTIAL_CACHE_MAX limits directory entries.

Bind cache_peek/cache_info/cache_clear via a CachedMethod descriptor
so TTL lookups receive (self, ...); otherwise single-dir status fails
with 'str' object has no attribute 'mgr'.

Serve logic (under the existing lock):

- status <fs> [--peer_uuid=<uuid>]: load complete cache on miss;
  filter by peer when requested.

- status <fs> <dir>: peek complete cache (no load on miss); if the
  entry contains the directory and peers, serve from complete.
  Otherwise load partial cache (omap on miss).

Fixes: https://tracker.ceph.com/issues/76686
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 8647c2ee79649b002c23bfb88757955640f886ce)

3 weeks agomgr/mirroring: Reorder and format metrics output
Kotresh HR [Mon, 1 Jun 2026 09:29:31 +0000 (14:59 +0530)]
mgr/mirroring: Reorder and format metrics output

Reorder and format status output to match the output of asok
interface peer_status command. Return metrics under
metrics/<dir>/peer/<uuid> to match the asok peer_status layout,
including {"metrics": {}} when no peers are configured.

Fixes: https://tracker.ceph.com/issues/76686
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 4c19167719caeab7de059bb1ba983e3f16afb5b3)

3 weeks agomgr/mirroring: Add new interface to expose mirroring metrics
Kotresh HR [Wed, 29 Apr 2026 09:19:15 +0000 (14:49 +0530)]
mgr/mirroring: Add new interface to expose mirroring metrics

Add the following new interface to expose mirroring metrics

ceph fs snapshot mirror status <fsname> [<mirrored_dir_path>] [--peer_uuid=<peer_uuid>]

The cmd loads the persisted directory sync metrics from the
cephfs_mirror object's omap. Metrics are grouped by mirrored
directory and peer.

When --peer_uuid is specified, only metrics for that peer are
returned. peer_uuid is a named CLI argument (_end_positional_) so
peer-only filtering does not require a mirrored directory path.

Fixes: https://tracker.ceph.com/issues/76686
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 33c572242ba78924df3e65f9fec23f2aefe81c66)

3 weeks agotools/cephfs_mirror: Remove persisted dir stats
Kotresh HR [Sat, 20 Jun 2026 07:58:56 +0000 (13:28 +0530)]
tools/cephfs_mirror: Remove persisted dir stats

When a directory is removed from mirroring, the persisted directory
stats need to be removed.  This patch handles the cleanup.

Omap keys must not be removed when mirrored directories are reshuffled
across cephfs-mirror daemons.  The mgr release notify now carries a
purging flag (set only during permanent removal, not reshuffle), and
the daemon removes persisted stats only when purging is true.  On
reshuffle with an in-progress sync, clear live current_syncing_snap
state and persist idle metrics so the acquiring daemon does not inherit
stale syncing omap entries.

Fixes: https://tracker.ceph.com/issues/76686
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 51a8348dfd681dfd446c347a82e581f2ed52a4c6)

3 weeks agotools/cephfs_mirror: Load persisted mirror metrics from omap
Kotresh HR [Sat, 20 Jun 2026 06:21:42 +0000 (11:51 +0530)]
tools/cephfs_mirror: Load persisted mirror metrics from omap

Load last_synced_snap metadata from the cephfs_mirror object omap on
PeerReplayer initialization and when a mirrored directory is added.
Live current_syncing_snap metrics are not restored; they are rebuilt
when synchronization starts.

When the daemon restarts after a snapshot was synced on the remote but
metrics were not yet written to omap, loaded metadata may belong to an
older snapshot.  Add reconcile_last_synced_snap() to compare against
the remote snap map, clear stale last-sync fields, and update
last_synced_snap id/name in memory.

Treat snaps_synced, snaps_deleted, and snaps_renamed as per-session
counters.  Do not load them from omap; they start at zero for each
daemon session and are still reported via the admin socket.  Persist
omap metrics unconditionally after reconcile so the mgr picks up the
new instance id and cleared session counters on restart.

Fixes: https://tracker.ceph.com/issues/76686
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 4b907eaf08869ef472b391774c421a68361a1f0a)

3 weeks agotools/cephfs_mirror: Persist metrics to omap
Kotresh HR [Sat, 20 Jun 2026 05:33:49 +0000 (11:03 +0530)]
tools/cephfs_mirror: Persist metrics to omap

Persist snapshot mirroring metrics to the cephfs_mirror object omap
for the mgr/mirroring module to support status command.

The tick thread only keeps omap up to date for in-progress syncs on
registered directories. Persist explicitly when stats change so omap
is updated before a directory unregisters:

 - snap delete/rename propagation (inc_deleted_snap / inc_renamed_snap)
 - after each successful snap sync (following set_last_synced_stat)
 - after sync_snaps failure (following _inc_failed_count)
 - after sync_perms failure (following _inc_failed_count)

Without the explicit call sites, omap can keep stale live or idle state
after sync completes or fails because directories leave m_registered
before the next tick.

Fixes: https://tracker.ceph.com/issues/76686
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit c5dd50967036529c819ecdad7bb86705a15f61c6)

3 weeks agotools/cephfs_mirror: Adds capability to persist metrics
Kotresh HR [Sun, 17 May 2026 21:01:58 +0000 (02:31 +0530)]
tools/cephfs_mirror: Adds capability to persist metrics

Adds the capability to persist mirroring metrics.
The metrics are persisted in the omap of the cephfs-mirror
object. Metrics are persisted asynchronously.

Each mirrored directory path stores the corresponding
metrics as the value of a unique omap key representing
the mirrored directory. The omap key is as below.

sync_stat/<fsname>/<peer_uuid>/<mirrored_dir_path>

Fixes: https://tracker.ceph.com/issues/76686
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 9f59332b35259773783bbd38e4f92fa1520d6cbf)

3 weeks agoqa: Add tests for cephfs_mirror_directory perf counters
Kotresh HR [Tue, 16 Jun 2026 17:31:13 +0000 (23:01 +0530)]
qa: Add tests for cephfs_mirror_directory perf counters

Verify counter dump registration, current-sync gauges while syncing
(full/delta), last-sync and summary counters after idle sync, and
extend mirror stats and remote-snap failure tests for per-directory
snaps_* and dir_state.

Fixes: https://tracker.ceph.com/issues/73457
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 3fc6457a8f77c9916476224c278fa8a6b6a8ceb1)

3 weeks agodoc/cephfs: Document cephfs_mirror_directory counter dump metrics
Kotresh HR [Tue, 16 Jun 2026 17:28:33 +0000 (22:58 +0530)]
doc/cephfs: Document cephfs_mirror_directory counter dump metrics

Describe per-directory labeled perf counters, labels, update behavior,
mapping to peer status, and counter reference tables. Document the
per-peer tick thread and cephfs_mirror_tick_interval, which refreshes
current-sync gauges on each tick. Add a PendingReleaseNotes entry for
the new cephfs_mirror_directory perf counter group.

Fixes: https://tracker.ceph.com/issues/73457
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit c5be81c79d383acc8b1295a938e2854b0fe51d94)

3 weeks agocephfs_mirror: update per-directory last sync and summary perf counters
Kotresh HR [Tue, 16 Jun 2026 16:57:12 +0000 (22:27 +0530)]
cephfs_mirror: update per-directory last sync and summary perf counters

Wire the remaining cephfs_mirror_directory labeled counters that were
registered in the prior commit but not yet refreshed. Live
current_syncing_snap gauges continue to be updated from the per-peer tick
thread; this commit updates last_synced_snap and per-directory snap
summary counters at the points where SnapSyncStat is actually modified.

Depends-on the cephfs_mirror_directory PerfCounters schema (dir_state,
current_*, last_*, snaps_*) added when each mirrored directory is
registered.

Prometheus / counter dump
-------------------------

These counters appear under "cephfs_mirror_directory" in "counter dump" with
the same labels as current-sync metrics (source_fscid, source_filesystem,
peer_uuid, peer_cluster_name, peer_cluster_filesystem, directory). ceph-exporter
exposes them as e.g. ceph_cephfs_mirror_directory_last_sync_bytes and
ceph_cephfs_mirror_directory_snaps_synced.

Unlike cephfs_mirror_peers, values are per (peer_uuid, directory) rather than
aggregated across all directories on the peer. Peer-level counters are
unchanged.

Fixes: https://tracker.ceph.com/issues/73457
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 13b0a36eec562c04d25fe13dd64f21233b11e993)

3 weeks agotools/cephfs_mirror: Expose per-directory snap metrics via perf counters
Kotresh HR [Tue, 16 Jun 2026 17:22:21 +0000 (22:52 +0530)]
tools/cephfs_mirror: Expose per-directory snap metrics via perf counters

Introduce a new labeled perf counter group, cephfs_mirror_directory, so
per-directory snapshot mirror progress can be scraped via "counter dump" and
exported to Prometheus by ceph-exporter (e.g.
ceph_cephfs_mirror_directory_current_sync_bytes).

Design
------

* One PerfCounters instance per mirrored directory on a peer, keyed in
  m_directory_perf_counters and registered on the daemon-wide
  PerfCountersCollection.
* Labels on each instance (flat counter dump array entries):
    - source_fscid, source_filesystem
    - peer_uuid, peer_cluster_name, peer_cluster_filesystem
    - directory (dir_root, e.g. "/parent/d1")
  The peer_uuid label disambiguates the same directory path mirrored to
  different peers.
* Counters are created in init() and add_directory(), removed in
  remove_directory() and the PeerReplayer destructor.
* Priority follows cephfs_mirror_perf_stats_prio (same as
  cephfs_mirror_peers).

Update path
-----------

Live / current_syncing_snap gauges are refreshed from
update_directory_current_sync_perf_counters(), called by
refresh_directory_current_sync_perf_counters() from the per-peer tick
thread (run_tick()). Each cephfs_mirror_tick_interval seconds (default 5)
the tick thread updates counters for each registered (actively syncing)
directory.

Counters registered (schema)
----------------------------

All of the following are added to the builder in this commit. Only the
"current sync" and dir_state fields listed under "Updated in this commit"
are written here; last_synced_snap and per-directory snap summary counters
are registered for a follow-up commit that updates them when stats change.

Directory state
  dir_state (gauge u64)
    0 = idle, 1 = syncing, 2 = failed
    Maps peer_status top-level "state" (numeric; no string values).

Current syncing snapshot (peer_status "current_syncing_snap")
  [Updated in this commit]
  current_snap_id          - snapshot id being synchronized
  current_sync_mode        - 0 = full, 1 = delta (snapdiff)
  current_read_bps         - bytes/sec read (raw, not formatted)
  current_write_bps        - bytes/sec written
  crawl_state              - 0 = N/A, 1 = in-progress, 2 = completed
  crawl_duration_seconds   - crawl duration; in-progress uses now - start
  datasync_wait_state      - 0 = none, 1 = waiting, 2 = complete
  datasync_wait_duration_seconds
  current_sync_bytes       - bytes synced so far for this snap
  current_total_bytes      - total bytes for this snap
  current_sync_bytes_percent - basis points (1745 = 17.45%)
  current_sync_files
  current_total_files
  current_sync_files_percent - basis points
  current_eta_valid        - 0 = calculating, 1 = ETA available
  current_eta_seconds      - ETA in seconds when valid

Per-directory snapshot summary (peer_status snaps_*)
  [Registered only; not updated in this commit]
  snaps_synced, snaps_deleted, snaps_renamed

Last synced snapshot (peer_status "last_synced_snap")
  [Registered only; not updated in this commit]
  last_snap_id
  last_crawl_duration_seconds
  last_datasync_wait_duration_seconds
  last_sync_duration_seconds
  last_sync_timestamp      - utime_t / seconds since epoch
  last_sync_bytes
  last_sync_files

When idle or failed, current_* counters are zeroed and dir_state reflects
0 or 2 respectively.

Fixes: https://tracker.ceph.com/issues/73457
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 16009741876c7943a8db3e5428550c5707b8d7af)

3 weeks agotools/cephfs_mirror: Add per-peer tick thread with configurable interval
Kotresh HR [Tue, 16 Jun 2026 16:38:15 +0000 (22:08 +0530)]
tools/cephfs_mirror: Add per-peer tick thread with configurable interval

Introduce a per-peer tick thread controlled by cephfs_mirror_tick_interval
(default 5 seconds). The interval is re-read each iteration so configuration
changes take effect without restarting the daemon. The thread provides a
generic hook for future periodic mirroring work.

Fixes: https://tracker.ceph.com/issues/76686
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit b8310f33c377b4c3e3f43026184f5fdd741f6a8e)

3 weeks agotools/cephfs_mirror: Ignore duplicate directory acquire notifications
Kotresh HR [Sun, 14 Jun 2026 18:41:07 +0000 (00:11 +0530)]
tools/cephfs_mirror: Ignore duplicate directory acquire notifications

Make PeerReplayer::add_directory() idempotent when the mgr re-sends
acquire for a directory already in the replayer list.

Fixes: https://tracker.ceph.com/issues/77398
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit e74f11546a1b2b57ce9358c89785bddc843cfe5e)

3 weeks agoqa/cephfs: Add test for duplicate directory acquire notify
Kotresh HR [Sun, 14 Jun 2026 18:41:02 +0000 (00:11 +0530)]
qa/cephfs: Add test for duplicate directory acquire notify

Verify that reloading the mirroring module and removing a directory
does not leave a ghost replayer entry that keeps syncing snapshots.

Fixes: https://tracker.ceph.com/issues/77398
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 28a2a2c8821cf0fb79c0345a368f0f951d455223)

3 weeks agoqa: Add mirror metrics testcases
Kotresh HR [Mon, 25 May 2026 18:44:03 +0000 (00:14 +0530)]
qa: Add mirror metrics testcases

Add testcases for newly introduced mirror
metrics and validate it via 'fs mirror peer status'
asok interface.

Fixes: https://tracker.ceph.com/issues/73453
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 1d676c2455ace8eb2bda07dd0b8c3057324dc38b)

3 weeks agodoc: Update the mirroring doc with new metrics fields
Kotresh HR [Mon, 25 May 2026 18:22:29 +0000 (23:52 +0530)]
doc: Update the mirroring doc with new metrics fields

Update the mirroring documentation and also the
release notes with new metrics introduced and it's
availability via 'fs mirror peer status' asok
interface.

Fixes: https://tracker.ceph.com/issues/73453
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 55eceaae3d70d6e0d721bc8fadb0e5b6726257e6)

3 weeks agoqa: Fix the mirroring tests with new nested peer_status output
Kotresh HR [Mon, 25 May 2026 17:34:57 +0000 (23:04 +0530)]
qa: Fix the mirroring tests with new nested peer_status output

Fixes: https://tracker.ceph.com/issues/73453
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 75093b138e33afb11c8548abb8fb2c01e307b9db)

3 weeks agotools/cephfs_mirror: Nest peer_status metrics by dir path and peer uuid
Kotresh HR [Fri, 5 Jun 2026 14:23:14 +0000 (19:53 +0530)]
tools/cephfs_mirror: Nest peer_status metrics by dir path and peer uuid

Restructure peer_status output so mirrored directory paths can be
shared by multiple peers without key collisions. Metrics are grouped
as metrics/<dir_path>/peer/<peer_uuid>/ instead of flat dir keys.

Sample output:
--------------
1. When two dirs are syncing.
{
    "metrics": {
        "/parent/d0": {
            "peer": {
                "8a85ab25-70f9-48e9-b82d-56324e75209b": {
                    "state": "syncing",
                    "current_syncing_snap": {
                        "id": 2,
                        "name": "d0_snap0",
                        "sync-mode": "full",
                        "avg_read_throughput_bytes": "9.01 MiB/s",
                        "avg_write_throughput_bytes": "26.74 MiB/s",
                        "crawl": {
                            "state": "completed",
                            "duration": "2s"
                        },
                        "datasync_queue_wait": {
                            "state": "completed",
                            "duration": "0s"
                        },
                        "bytes": {
                            "sync_bytes": "60.83 MiB",
                            "total_bytes": "149.94 MiB",
                            "sync_percent": "40.57%"
                        },
                        "files": {
                            "sync_files": 2028,
                            "total_files": 5000,
                            "sync_percent": "40.56%"
                        },
                        "eta": "10s"
                    },
                    "snaps_synced": 0,
                    "snaps_deleted": 0,
                    "snaps_renamed": 0
                }
            }
        },
        "/parent/d1": {
            "peer": {
                "8a85ab25-70f9-48e9-b82d-56324e75209b": {
                    "state": "syncing",
                    "current_syncing_snap": {
                        "id": 3,
                        "name": "d1_snap0",
                        "sync-mode": "full",
                        "avg_read_throughput_bytes": "6.80 MiB/s",
                        "avg_write_throughput_bytes": "20.04 MiB/s",
                        "crawl": {
                            "state": "in-progress",
                            "duration": "2s"
                        },
                        "datasync_queue_wait": {
                            "state": "completed",
                            "duration": "1s"
                        },
                        "bytes": {
                            "sync_bytes": "4.12 MiB",
                            "total_bytes": "124.98 MiB",
                            "sync_percent": "3.30%"
                        },
                        "files": {
                            "sync_files": 125,
                            "total_files": 4189,
                            "sync_percent": "2.98%"
                        },
                        "eta": "18s"
                    },
                    "snaps_synced": 0,
                    "snaps_deleted": 0,
                    "snaps_renamed": 0
                }
            }
        }
    }
}
---------
2. When two directories are synced

------------------------------------------
{
    "metrics": {
        "/parent/d0": {
            "peer": {
                "8a85ab25-70f9-48e9-b82d-56324e75209b": {
                    "state": "idle",
                    "last_synced_snap": {
                        "id": 2,
                        "name": "d0_snap0",
                        "crawl_duration": "2s",
                        "datasync_queue_wait_duration": "0s",
                        "sync_duration": "30s",
                        "sync_time_stamp": "422538.254127s",
                        "sync_bytes": "149.94 MiB",
                        "sync_files": 5000
                    },
                    "snaps_synced": 1,
                    "snaps_deleted": 0,
                    "snaps_renamed": 0
                }
            }
        },
        "/parent/d1": {
            "peer": {
                "8a85ab25-70f9-48e9-b82d-56324e75209b": {
                    "state": "idle",
                    "last_synced_snap": {
                        "id": 3,
                        "name": "d1_snap0",
                        "crawl_duration": "2s",
                        "datasync_queue_wait_duration": "1s",
                        "sync_duration": "33s",
                        "sync_time_stamp": "422546.205798s",
                        "sync_bytes": "149.94 MiB",
                        "sync_files": 5000
                    },
                    "snaps_synced": 1,
                    "snaps_deleted": 0,
                    "snaps_renamed": 0
                }
            }
        }
    }
}

Fixes: https://tracker.ceph.com/issues/73453
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 2b325537171c04375145f9e0e5fbd439a09eb873)

3 weeks agotools/cephfs_mirror: Add datasync_queue_wait_duration metric
Kotresh HR [Fri, 8 May 2026 00:22:59 +0000 (05:52 +0530)]
tools/cephfs_mirror: Add datasync_queue_wait_duration metric

Add the metric which measures the time spent by the snapshot
in the data queue waiting for the datasync threads.

Sample output:
When still 'waiting' in queue
{
    "/d1": {
        "state": "syncing",
        "current_syncing_snap": {
            "id": 18,
            "name": "d1_snap5",
            "sync-mode": "delta",
            "avg_read_throughput_bytes": "0.00 B/s",
            "avg_write_throughput_bytes": "0.00 B/s",
            "crawl": {
                "state": "in-progress",
                "duration": "13s"
            },
            "datasync_queue_wait": {
                "state": "waiting",
                "duration": "12s"
            },
            "bytes": {
                "sync_bytes": "0.00 B",
                "total_bytes": "110.99 MiB",
                "sync_percent": "0.00%"
            },
            "files": {
                "sync_files": 0,
                "total_files": 3719,
                "sync_percent": "0.00%"
            },
            "eta": "calculating..."
        },
        "last_synced_snap": {
            "id": 15,
            "name": "d1_snap4"
        },
        "snaps_synced": 0,
        "snaps_deleted": 0,
        "snaps_renamed": 0
    },
}
---------------
After 'complete'
{
    "/d1": {
        "state": "syncing",
        "current_syncing_snap": {
            "id": 18,
            "name": "d1_snap5",
            "sync-mode": "delta",
            "avg_read_throughput_bytes": "11.66 MiB/s",
            "avg_write_throughput_bytes": "34.55 MiB/s",
            "crawl": {
                "state": "completed",
                "duration": "17s"
            },
            "datasync_queue_wait": {
                "state": "completed",
                "duration": "19s"
            },
            "bytes": {
                "sync_bytes": "149.94 MiB",
                "total_bytes": "149.94 MiB",
                "sync_percent": "100.00%"
            },
            "files": {
                "sync_files": 5000,
                "total_files": 5000,
                "sync_percent": "100.00%"
            },
            "eta": "0s"
        },
        "last_synced_snap": {
            "id": 15,
            "name": "d1_snap4"
        },
        "snaps_synced": 0,
        "snaps_deleted": 0,
        "snaps_renamed": 0
    }
}
-----
Also stored in last_sync_snap section
{
    "/d1": {
        "state": "idle",
        "last_synced_snap": {
            "id": 18,
            "name": "d1_snap5",
            "crawl_duration": "17s",
            "datasync_queue_wait_duration": "19s",
            "sync_duration": "44s",
            "sync_time_stamp": "8172.009480s",
            "sync_bytes": "149.94 MiB",
            "sync_files": 5000
        },
        "snaps_synced": 1,
        "snaps_deleted": 0,
        "snaps_renamed": 0
    }
}

Fixes: https://tracker.ceph.com/issues/73453
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 66c05f080b222897e3d28703de008e71f9721053)

3 weeks agotools/cephfs_mirror: Add eta metrics
Kotresh HR [Sat, 28 Mar 2026 11:23:33 +0000 (16:53 +0530)]
tools/cephfs_mirror: Add eta metrics

Add estimate time of completion for the current
syncing snapshot. The calculation takes into
account the average read/write throughput from
the start of snapshot sync and not the current
read/write throughput. So the ETA is affected
accordingly.

Sample output:
-------------
{
    "/d0": {
        "state": "syncing",
        "current_syncing_snap": {
            "id": 2,
            "name": "d0_snap0",
            "sync-mode": "full",
            "avg_read_throughput_bytes": "3.28 MiB/s",
            "avg_write_throughput_bytes": "71.03 MiB/s",
            "crawl": {
                "state": "completed",
                "duration": "1s"
            },
            "bytes": {
                "sync_bytes": "2.31 MiB",
                "total_bytes": "149.94 MiB",
                "sync_percent": "1.54%"
            },
            "files": {
                "sync_files": 67,
                "total_files": 5000,
                "sync_percent": "1.34%"
            },
            "eta": "calculating..."
        },
        "snaps_synced": 0,
        "snaps_deleted": 0,
        "snaps_renamed": 0
    }
}
------------------------------------------
{
    "/d0": {
        "state": "syncing",
        "current_syncing_snap": {
            "id": 2,
            "name": "d0_snap0",
            "sync-mode": "full",
            "avg_read_throughput_bytes": "12.17 MiB/s",
            "avg_write_throughput_bytes": "66.46 MiB/s",
            "crawl": {
                "state": "completed",
                "duration": "1s"
            },
            "bytes": {
                "sync_bytes": "26.64 MiB",
                "total_bytes": "149.94 MiB",
                "sync_percent": "17.77%"
            },
            "files": {
                "sync_files": 892,
                "total_files": 5000,
                "sync_percent": "17.84%"
            },
            "eta": "10s"
        },
        "snaps_synced": 0,
        "snaps_deleted": 0,
        "snaps_renamed": 0
    }
}

Fixes: https://tracker.ceph.com/issues/73453
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 0ae1ade4bc269a368bf29b059b1f20336ef79b2e)

3 weeks agotools/cephfs_mirror: Add read/write throughput
Kotresh HR [Sat, 28 Mar 2026 10:57:02 +0000 (16:27 +0530)]
tools/cephfs_mirror: Add read/write throughput

The read throughput added measures the bytes
read per second from the source ceph filesystem.
Similarly, the write throughput added measures
the bytes written per second to the remote ceph
filesystem. It's derived from the time spent
in preadv and pwritev calls.

Sample output:
-------------
{
    "/d0": {
        "state": "syncing",
        "current_syncing_snap": {
            "id": 2,
            "name": "d0_snap0",
            "sync-mode": "full",
            "avg_read_throughput_bytes": "12.69 MiB/s",
            "avg_write_throughput_bytes": "54.49 MiB/s",
            "crawl": {
                "state": "completed",
                "duration": "1s"
            },
            "bytes": {
                "sync_bytes": "149.94 MiB",
                "total_bytes": "149.94 MiB",
                "sync_percent": "100.00%"
            },
            "files": {
                "sync_files": 5000,
                "total_files": 5000,
                "sync_percent": "100.00%"
            }
        },
        "snaps_synced": 0,
        "snaps_deleted": 0,
        "snaps_renamed": 0
    }
}
-------------

Fixes: https://tracker.ceph.com/issues/73453
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 4294819d9535145ea5e4cf7082fcbae7de95987c)

3 weeks agotools/cephfs_mirror: Add crawl-state and sync-mode metric
Kotresh HR [Sat, 28 Mar 2026 10:12:43 +0000 (15:42 +0530)]
tools/cephfs_mirror: Add crawl-state and sync-mode metric

The 'crawl' and 'sync-mode' metric is added.

sync-mode: full/delta,
"crawl": {
           "state": "completed",
           "duration": "37s"
       }

sync-mode:
---------
The 'sync-mode: full/delta' is added to peer status.
The 'delta' means, blockdiff along with snapdiff is
being used to sync the files where as 'full' means
full directory is crawled and each file is synced
entirely.

crawl:
-----
The state can be in-progress/completed. This
identifies whether the crawler thread is done
queuing the files for data sync threads.

The time taken for the duration is also shown.
If the crawl is in-progress, the duration
would show the time taken till then from the
start of the crawl. If the crawl state is
completed, then duration indicates total
time taken for the crawl.

The crawl duration is shown in "d h m s" format.
The existing 'sync_duration' in last_synced_snap
is also formatted

The values are as below. When crawl state is
completed, the 'total_files' metric doesn't
grow anymore.

crawl_duration:
--------------
The crawl_duration of last snapshot is saved in last_synced_snap
section as well.

Sample outputs:
---------------
{
    "/d0": {
        "state": "syncing",
        "current_syncing_snap": {
            "id": 2,
            "name": "d0_snap0",
            "sync-mode": "full",
            "crawl": {
                "state": "in-progress",
                "duration": "21s"
            },
            "bytes": {
                "sync_bytes": "149.25 MiB",
                "total_bytes": "176.47 MiB",
                "sync_percent": "84.57%"
            },
            "files": {
                "sync_files": 4931,
                "total_files": 5845,
                "sync_percent": "84.36%"
            }
        },
        "snaps_synced": 0,
        "snaps_deleted": 0,
        "snaps_renamed": 0
    }
}
------------------------------------------
{
    "/d0": {
        "state": "syncing",
        "current_syncing_snap": {
            "id": 2,
            "name": "d0_snap0",
            "sync-mode": "full",
            "crawl": {
                "state": "completed",
                "duration": "37s"
            },
            "bytes": {
                "sync_bytes": "891.39 MiB",
                "total_bytes": "901.52 MiB",
                "sync_percent": "98.88%"
            },
            "files": {
                "sync_files": 29656,
                "total_files": 30000,
                "sync_percent": "98.85%"
            }
        },
        "snaps_synced": 0,
        "snaps_deleted": 0,
        "snaps_renamed": 0
    }
}
---------
  {
        "/d0": {
            "state": "syncing",
            "current_syncing_snap": {
                "id": 3,
                "name": "d0_snap1",
                "sync-mode": "delta",
                "crawl": {
                    "state": "completed",
                    "duration": "15s"
                },
                "bytes": {
                    "sync_bytes": "120.20 MiB",
                    "total_bytes": "149.94 MiB",
                    "sync_percent": "80.16%"
                },
                "files": {
                    "sync_files": 4032,
                    "total_files": 5000,
                    "sync_percent": "80.64%"
                }
            },
            "last_synced_snap": {
                "id": 2,
                "name": "d0_snap0",
                "crawl_duration": "17s",
                "sync_duration": 45,
                "sync_time_stamp": "5642.805770s",
                "sync_bytes": "300.85 MiB",
                "sync_files": 10000
            },
            "snaps_synced": 1,
            "snaps_deleted": 0,
            "snaps_renamed": 0
        }
    }
-------------
{
    "/d0": {
        "state": "idle",
        "last_synced_snap": {
            "id": 2,
            "name": "d0_snap0",
            "crawl_duration": "17s",
            "sync_duration": "2m 38s",
            "sync_time_stamp": "9259.225009s",
            "sync_bytes": "901.52 MiB",
            "sync_files": 30000
        },
        "snaps_synced": 1,
        "snaps_deleted": 0,
        "snaps_renamed": 0
    }
}

Fixes: https://tracker.ceph.com/issues/73453
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit d593ad8aefe34dbaffcde22efc294500ca6f7f43)

3 weeks agotools/cephfs_mirror: Add inprogress bytes and files metric
Kotresh HR [Mon, 16 Feb 2026 10:59:31 +0000 (16:29 +0530)]
tools/cephfs_mirror: Add inprogress bytes and files metric

Add following mirroring progress metrics to current_syncing_snap
as below

bytes:
  sync_bytes - bytes synced till now
  total_bytes - total bytes to be synced
  sync_percent - Percentage of bytes synced till now
files:
  total_files - Total files to be synced
  sync_files - files synced till now
  sync_percent - Percentage of files synced till now

sync_files and sync_bytes are also stored in last_synced_snap section
after the snapshot is synced.

The bytes is formatted as below.

Sample output:
--------
{
    "/d0": {
        "state": "syncing",
        "current_syncing_snap": {
            "id": 3,
            "name": "d0_snap1",
            "bytes": {
                "sync_bytes": "120.20 MiB",
                "total_bytes": "149.94 MiB",
                "sync_percent": "80.16%"
            },
            "files": {
                "sync_files": 4032,
                "total_files": 5000,
                "sync_percent": "80.64%"
            }
        },
        "last_synced_snap": {
            "id": 2,
            "name": "d0_snap0",
            "sync_duration": 45,
            "sync_time_stamp": "5642.805770s",
            "sync_bytes": "300.85 MiB",
            "sync_files": 10000
        },
        "snaps_synced": 1,
        "snaps_deleted": 0,
        "snaps_renamed": 0
    }
}

Fixes: https://tracker.ceph.com/issues/73453
Signed-off-by: Kotresh HR <khiremat@redhat.com>
(cherry picked from commit 1b6cbbbe23c81de20e4828b50fd94da48ab64781)

4 weeks agoMerge pull request #69586 from mheler/wip-77494-umbrella
Neha Ojha [Wed, 1 Jul 2026 17:25:51 +0000 (10:25 -0700)]
Merge pull request #69586 from mheler/wip-77494-umbrella

umbrella: mon: implement mon backup mechanism

Reviewed-by: Kefu Chai <tchaikov@gmail.com>
Reviewed-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
4 weeks agoMerge pull request #69549 from sseshasa/wip-77445-umbrella
Neha Ojha [Wed, 1 Jul 2026 17:24:06 +0000 (10:24 -0700)]
Merge pull request #69549 from sseshasa/wip-77445-umbrella

umbrella: mgr/DaemonServer: Aggregate and globally sort OSDs for ok-to-upgrade

Reviewed-by: Nitzan Mordechai <nmordech@redhat.com>
4 weeks agoMerge pull request #69707 from guits/wip-77645-umbrella
Neha Ojha [Tue, 30 Jun 2026 20:45:44 +0000 (13:45 -0700)]
Merge pull request #69707 from guits/wip-77645-umbrella

umbrella: node-proxy: atollon hardware monitoring (FCM stats, temperatures, fan speed..)

Reviewed-by: Afreen Misbah <afreen@ibm.com>
Reviewed-by: Adam King <adking@redhat.com>
4 weeks agoMerge pull request #69718 from adamemerson/wip-76995-umbrella
Neha Ojha [Tue, 30 Jun 2026 15:22:32 +0000 (08:22 -0700)]
Merge pull request #69718 from adamemerson/wip-76995-umbrella

umbrella: Reapply "qa/rgw/crypt: disable failing kmip testing"

Reviewed-by: Casey Bodley <cbodley@redhat.com>
4 weeks agoMerge pull request #69606 from mheler/wip-77528-umbrella
Neha Ojha [Tue, 30 Jun 2026 14:53:30 +0000 (07:53 -0700)]
Merge pull request #69606 from mheler/wip-77528-umbrella

umbrella: rgw/restore: run shard hash through HASH_PRIME

Reviewed-by: Adam Emerson <aemerson@redhat.com>
Reviewed-by: Soumya Koduri <skoduri@redhat.com>
4 weeks agoMerge pull request #69683 from mheler/wip-77614-umbrella
Neha Ojha [Tue, 30 Jun 2026 00:42:52 +0000 (17:42 -0700)]
Merge pull request #69683 from mheler/wip-77614-umbrella

umbrella: rgw: fix AES-256-GCM key/IV reuse on multipart part re-upload

Reviewed-by: Adam Emerson <aemerson@redhat.com>
4 weeks agoMerge pull request #69716 from adamemerson/wip-umbrella-include-s3tests
Neha Ojha [Tue, 30 Jun 2026 00:41:54 +0000 (17:41 -0700)]
Merge pull request #69716 from adamemerson/wip-umbrella-include-s3tests

umbrella: Include s3-tests in Ceph repo

Reviewed-by: Casey Bodley <cbodley@redhat.com>
4 weeks agoMerge pull request #69678 from rhcs-dashboard/wip-77518-umbrella
Neha Ojha [Mon, 29 Jun 2026 21:06:22 +0000 (14:06 -0700)]
Merge pull request #69678 from rhcs-dashboard/wip-77518-umbrella

umbrella: mgr/dashboard : Support wildcard sans and zonegroup hostnames

Reviewed-by: Afreen Misbah <afreen@ibm.com>
4 weeks agoMerge pull request #69698 from rhcs-dashboard/wip-77507-umbrella
Neha Ojha [Mon, 29 Jun 2026 21:05:53 +0000 (14:05 -0700)]
Merge pull request #69698 from rhcs-dashboard/wip-77507-umbrella

umbrella: mgr/dashboard: align RGW role management with Carbon and fix API routing

Reviewed-by: Afreen Misbah <afreen@ibm.com>
4 weeks agoMerge pull request #69704 from rhcs-dashboard/wip-77371-umbrella
Neha Ojha [Mon, 29 Jun 2026 21:05:22 +0000 (14:05 -0700)]
Merge pull request #69704 from rhcs-dashboard/wip-77371-umbrella

umbrella: mgr/dashboard: fix zone creation in rgw service creation form

Reviewed-by: Afreen Misbah <afreen@ibm.com>
4 weeks agoMerge pull request #69714 from afreen23/wip-77662-umbrella
Neha Ojha [Mon, 29 Jun 2026 21:00:57 +0000 (14:00 -0700)]
Merge pull request #69714 from afreen23/wip-77662-umbrella

umbrella: mgr/dashboard: fix bind address regression from CherryPy isolation

Reviewed-by: Nizamudeen A <nia@redhat.com>
Reviewed-by: Puja Shahu <pshahu@redhat.com>
4 weeks agoMerge pull request #69700 from guits/wip-77637-umbrella
Neha Ojha [Mon, 29 Jun 2026 20:53:13 +0000 (13:53 -0700)]
Merge pull request #69700 from guits/wip-77637-umbrella

umbrella: ceph-volume: skip internal raid mirror LVs in inventory

Reviewed-by: Afreen Misbah <afreen@ibm.com>
4 weeks agoMerge pull request #69719 from aainscow/wip-77668-umbrella
Neha Ojha [Mon, 29 Jun 2026 20:42:44 +0000 (13:42 -0700)]
Merge pull request #69719 from aainscow/wip-77668-umbrella

umbrella: osd/ECTransaction: fix truncate+write planning for EC shard sizes

Reviewed-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
5 weeks agoceph-volume: skip internal raid mirror LVs in inventory 69700/head
Guillaume Abrioux [Thu, 18 Jun 2026 05:19:43 +0000 (07:19 +0200)]
ceph-volume: skip internal raid mirror LVs in inventory

ceph-volume inventory started including all LVM mapper devices after
c06bee965f1. On hosts with raid mirrored system volumes, that pulls in
hidden legs like var_rmeta_0 which have no /dev/vg/lv node and makes
cephadm's ceph-volume inventory call fail.

Skip those internal LVs in get_devices() and avoid rewriting the device
path to a missing lv_path in Device._parse().

Fixces: https://tracker.ceph.com/issues/77486

Signed-off-by: Guillaume Abrioux <gabrioux@ibm.com>
(cherry picked from commit daec7e125a167bb8fd0fb9faaa04879f0bb215d2)

5 weeks agonode-proxy: expose FCM stats 69707/head
Guillaume Abrioux [Thu, 18 Jun 2026 14:54:38 +0000 (16:54 +0200)]
node-proxy: expose FCM stats

Collect FCM stats locally from NVMe drives (vendor log page 0xCA)
and expose them via node-proxy, the cephadm agent, and
`ceph orch hardware status --category fcm`.

Introduce a node backend that aggregates Redfish data with
node-local collectors, since FCM metrics are not available
from the BMC.

Fixes: https://tracker.ceph.com/issues/77521
Signed-off-by: Guillaume Abrioux <gabrioux@ibm.com>
(cherry picked from commit e982412a7a1f1ec6fc2fe70d11e839365b50aa91)

5 weeks agonode-proxy: rename firmwares to firmware with legacy aliases
Guillaume Abrioux [Mon, 15 Jun 2026 13:18:48 +0000 (15:18 +0200)]
node-proxy: rename firmwares to firmware with legacy aliases

Let's use 'firmware' as the standard name in node-proxy, cephadm,
and orch hardware status.

We still accept 'firmwares' as a deprecated alias and read legacy
cache payloads transparently for backward compatibility.

Fixes: https://tracker.ceph.com/issues/77410
Signed-off-by: Guillaume Abrioux <gabrioux@ibm.com>
(cherry picked from commit 1cd4b32d72a4a14cbd797187e791e038422f4fc3)

5 weeks agonode-proxy: override with atollon specific
Guillaume Abrioux [Wed, 10 Jun 2026 10:51:47 +0000 (12:51 +0200)]
node-proxy: override with atollon specific

This adds AtollonSystem for AMI/Atollon BMCs:
- memory Id mapping,
- storage description fixes,
- StorageControllers based drive enrichment

It also wires vendor selection through cephadm (hw_monitoring_vendor)
and show slot/firmware in hardware status storage output.

Fixes: https://tracker.ceph.com/issues/77408
Signed-off-by: Guillaume Abrioux <gabrioux@ibm.com>
(cherry picked from commit 9b3bfd171afe6714cb23dc0fe55bacad671a94dc)

5 weeks agonode-proxy: add temperatures and fan speed
Guillaume Abrioux [Wed, 10 Jun 2026 10:51:14 +0000 (12:51 +0200)]
node-proxy: add temperatures and fan speed

This adds the temperatures category and fan speed information.

Fixes: https://tracker.ceph.com/issues/77408
Signed-off-by: Guillaume Abrioux <gabrioux@ibm.com>
(cherry picked from commit deabf21144054ada7e6eb64d35c38adc44db130a)

5 weeks agomgr/dashboard : Support wildcard sans and zonegroup hostnames 69678/head
Abhishek Desai [Tue, 26 May 2026 07:48:40 +0000 (13:18 +0530)]
mgr/dashboard : Support wildcard sans and zonegroup hostnames
fixes : https://tracker.ceph.com/issues/76795
Signed-off-by: Abhishek Desai <abhishek.desai1@ibm.com>
(cherry picked from commit eee6a15dcd845914595dbb1d76470bd4b73947c1)

5 weeks agomgr/dashboard: align RGW role management with Carbon and fix API routing 69698/head
Sagar Gopale [Wed, 10 Jun 2026 13:29:50 +0000 (18:59 +0530)]
mgr/dashboard: align RGW role management with Carbon and fix API routing

Fixes: https://tracker.ceph.com/issues/77328
Signed-off-by: Sagar Gopale <sagar.gopale@ibm.com>
(cherry picked from commit 1d3e33140b8f694e75a14f6530ec54712b984179)

5 weeks agomgr/dashboard: Remove global RGW tenant Roles tab and decommission routes
Sagar Gopale [Tue, 9 Jun 2026 08:03:07 +0000 (13:33 +0530)]
mgr/dashboard: Remove global RGW tenant Roles tab and decommission routes

Fixes: https://tracker.ceph.com/issues/77262
Signed-off-by: Sagar Gopale <sagar.gopale@ibm.com>
(cherry picked from commit 6dadd2f0309c0c016225a6891e814388d75aecd5)

5 weeks agomgr/dashboard: fix zone creation in rgw service creation form 69704/head
Aashish Sharma [Thu, 11 Jun 2026 09:19:04 +0000 (14:49 +0530)]
mgr/dashboard: fix zone creation in rgw service creation form

The zone creation request from the rgw service creation form was missing
the tier_type, sync_from and sync_from_all properties as a result the
zone creation was failing. This PR tends to fix this issue.

Fixes: https://tracker.ceph.com/issues/77263
Signed-off-by: Aashish Sharma <aasharma@redhat.com>
(cherry picked from commit 95a8c70be86569ef19f3d5c1b11f7cebed682db5)

5 weeks agomgr/dashboard: fix bind address regression from CherryPy isolation wip-77662-umbrella 69714/head
Afreen Misbah [Tue, 23 Jun 2026 13:30:22 +0000 (19:00 +0530)]
mgr/dashboard: fix bind address regression from CherryPy isolation

The CherryPy isolation refactor (PR #67227) accidentally changed the
dashboard bind address from wildcard (*:8443) to mon_ip:8443. The
get_mgr_ip() replacement was originally only for URI generation, but
the refactor passed the mutated address to CherryPyMgr.mount() as the
actual socket bind address.

This breaks the management gateway when its VIP is not on the same
interface as mon_ip, as the dashboard becomes unreachable on other
interfaces.

Preserve the original wildcard address for binding and only use
get_mgr_ip() for the advertised URI. Add regression test to prevent
future confusion between bind_addr and server_addr.

Fixes: https://tracker.ceph.com/issues/77491
Signed-off-by: Afreen Misbah <afreen@ibm.com>
(cherry picked from commit f45a1bfc93596f17370ee38ce241ae8123d81e8e)

5 weeks agoMerge pull request #69710 from tchaikov/wip-77609-umbrella
Neha Ojha [Fri, 26 Jun 2026 15:13:20 +0000 (08:13 -0700)]
Merge pull request #69710 from tchaikov/wip-77609-umbrella

umbrella: mgr/dashboard: skip the table when an nvmeof cli result has no columns

Reviewed-by: Ilya Dryomov <idryomov@redhat.com>
Reviewed-by: Anthony D'Atri <anthony.datri@gmail.com>
Reviewed-by: Afreen Misbah <afreen23.git@gmail.com>
Reviewed-by: Devika Babrekar <devika.babrekar@ibm.com>
5 weeks agopython-common/cryptotools: stop using the removed X509Req API 69710/head
Kefu Chai [Sat, 13 Jun 2026 01:50:09 +0000 (09:50 +0800)]
python-common/cryptotools: stop using the removed X509Req API

pyOpenSSL deprecated OpenSSL.crypto.X509Req in 24.2.0 (2024-07-20) and
removed it in 26.3.0 (2026-06-12). as we don't pin pyopenssl, CI picked
up the new release, and create_self_signed_cert() started failing with:

  AttributeError: module 'OpenSSL.crypto' has no attribute 'X509Req'

this took down run-tox-mgr, run-tox-mgr-dashboard-py3 and the mypy check.

we only used X509Req to build a subject name and then copied it into the
X509 cert. so drop it, and set the subject on the cert directly. the
resulting cert stays the same: subject from dname, issuer set to the same
subject, self-signed.

Fixes: https://tracker.ceph.com/issues/77391
Signed-off-by: Kefu Chai <k.chai@proxmox.com>
(cherry picked from commit 1dda56b1a00a6cbf520d932332ff097716ab256e)

5 weeks agoosd/ECTransaction: fix truncate+write planning for EC shard sizes 69719/head
Alex Ainscow [Tue, 9 Jun 2026 14:45:25 +0000 (15:45 +0100)]
osd/ECTransaction: fix truncate+write planning for EC shard sizes

There are multiple problems fixed here, which are caused by operations
which perform a truncate-then-write in a single transaction.

NOTE: The only known scenario for these operations are CLS-sparsify operations.
I recommend backporting these changes to Tentacle, however, as they are
regressions in the RADOS API which can lead to data corruption.

PROBLEM: Cache not invalidated correctly:
If projected_size >= orig_size, the invalidate_cache flag is not set in the plan
This means there is potentially data in the RMW extent cache, which
may cause data corruption in subsequent writes (although not the write
being made). No actual use case for this operation is known, so it may not be as serious as
it sounds.

FIX: Invalidate cache on any truncate or "delete_first"

PROBLEM: Parity writes permitted with truncates:
Currently parity delta writes do not support operations which may have
truncates. However, if the object ended up the same size as pre-truncate, a
parity delta write may have been attemtped. This may lead to data corruption.

FIX: Block parity writes in this case.
NOTE: It is not worth the development effort to support PDW in this scenario, as
performance benefit would be minimal overall.

PROBLEM: RMW Reads can occur beyond first truncate point.
Such reads reflect the pre-truncate data (which is incorrect) and be
preserved, even if the invalidate cache flag is set (since the cache is
invalidated before the reads). This can lead to similar corruption as
the earlier "cache not invalidated"

FIX: trim the read to the lower truncate size.

PROBLEM:
When performing a truncate, the parity shards may need to be updated to
reflect truncates on other shards. These truncate writes in the plan were
overriding, rather than adding to, other writes in the op.  The result was
a potentially truncated coding shard.  This leads to assertions on reads.

FIX: Replace = with insert()

PROBLEM: Some shards not set to correct size on truncate-then-write
If projected_size is smaller or equal to the original size, then the
code which attempts to correctly size a shard will not run.  However if
an operation performs a truncate then a partial write and does not
write to a particular shard AND the shard ends up smaller, then this
can lead to an incorrectly sized shard. This leads to assertion on reads.

FIX: Execute the shard-resize code on all truncates.

AI assistance was mainly used to write unit test. However, I cannot rule out a
contribution to the simple fixes found in this commit, so out of caution,
I place the Assisted-by tag.

Fixes: https://tracker.ceph.com/issues/77276
Signed-off-by: Alex Ainscow <aainscow@uk.ibm.com>
Assisted-by: IBM-Bob:ClaudeSonnet/GPT
(cherry picked from commit 51d8c5c489ba3e664209fb3316f8d6e03e257e28)

5 weeks agoReapply "qa/rgw/crypt: disable failing kmip testing" 69718/head
Casey Bodley [Thu, 11 Jun 2026 18:42:57 +0000 (14:42 -0400)]
Reapply "qa/rgw/crypt: disable failing kmip testing"

This reverts commit fd2046798198db20e45b8abbb3cc866c9967fb88.

kmip tests are failing again on ubuntu 24 because PyKMIP doesn't support
python 3.12. we'll be removing ubuntu 22 from main, so can't just pin the
test to that distro in the meantime

we're expecing the nvmeof team to add python 3.12 support in our
ceph/PyKMIP fork, and can reenable kmip testing once that happens

Fixes: https://tracker.ceph.com/issues/76995
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit d27261d0c2641e92365cf590684567c58bbfb905)
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
5 weeks agoqa/rgw: Remove 'force-branch' from s3tests configs 69716/head
Adam C. Emerson [Wed, 17 Jun 2026 18:33:45 +0000 (14:33 -0400)]
qa/rgw: Remove 'force-branch' from s3tests configs

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
(cherry picked from commit 5bc34f8ed84aa2f205ccfe04fff9e3ec5ced8727)
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
5 weeks agoqa/rgw: Run s3-tests from within the Ceph repo
Adam C. Emerson [Mon, 29 Sep 2025 21:11:09 +0000 (17:11 -0400)]
qa/rgw: Run s3-tests from within the Ceph repo

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
(cherry picked from commit d0c88cb53c6848e9bcd7c4ea90f21f1aa6912242)
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
5 weeks agotest/rgw: Include s3-tests in Ceph repo
Adam C. Emerson [Thu, 11 Jun 2026 22:46:45 +0000 (18:46 -0400)]
test/rgw: Include s3-tests in Ceph repo

Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
(cherry picked from commit 868d20182a08685265e0b5831bad703fdcf3189b)
Signed-off-by: Adam C. Emerson <aemerson@redhat.com>
5 weeks agomgr/dashboard: skip the table when an nvmeof cli result has no columns
Kefu Chai [Tue, 23 Jun 2026 07:43:28 +0000 (15:43 +0800)]
mgr/dashboard: skip the table when an nvmeof cli result has no columns

The dashboard leaves prettytable unpinned.  prettytable commit 2574492 ("Apply
some Pylint rules (PLR)", #436) rewrote _stringify_row()'s row_height as
`max(_get_size(c)[1] for c in row)`, which raises ValueError("max() iterable
argument is empty") on a row with no cells.  The change is undocumented and
shipped in 3.18.0; get_string() trips on it when a table has a row but no
columns.

AnnotatedDataTextOutputFormatter builds such a table for an empty result, or
one whose only field is status or error_message, so NvmeofCLICommand.call()
returns -EINVAL and the command fails.  This broke run-tox-mgr-dashboard-py3
once the tox virtualenv picked up prettytable 3.18.0.

Return an empty string when there are no columns instead of formatting a
degenerate table.

Fixes: https://tracker.ceph.com/issues/77589
Signed-off-by: Kefu Chai <k.chai@proxmox.com>
(cherry picked from commit 9dd7fd0b0a78871f7f71c89a061490f3ffc97605)

5 weeks agorgw: restore constant-time GCM tag comparison in ISA-L path 69683/head
Matthew N. Heler [Tue, 9 Jun 2026 02:13:50 +0000 (21:13 -0500)]
rgw: restore constant-time GCM tag comparison in ISA-L path

a8ed43bfc05 replaced ct_memeq with memcmp in the ISA-L GCM accelerator,
making tag verification and the key-cache compare non-constant-time.
Restore ct_memeq for both; the OpenSSL and EVP paths already compare in
constant time.

Signed-off-by: Matthew N. Heler <matthew.heler@hotmail.com>
(cherry picked from commit 3a81a126089e201bcc0ddfcd800705d43f7d3b45)

5 weeks agorgw: fix AES-256-GCM key/IV reuse on multipart part re-upload
Matthew Heler [Fri, 5 Jun 2026 15:48:32 +0000 (10:48 -0500)]
rgw: fix AES-256-GCM key/IV reuse on multipart part re-upload

Re-uploading the same part number in a GCM multipart upload encrypted the new
data under the same key and IV as the first upload, since the IV is
part_number||chunk_index and the part key came from the part number alone. GCM
requires a unique IV per key; reusing one to encrypt different data weakens its
confidentiality and integrity guarantees.

Generate a random 16-byte salt on each UploadPart and fold it into the part key,
HMAC(ObjectKey, BE32(part) || salt), so every upload gets a fresh key. The salt
rides RGWUploadPartInfo, and complete stores the selected part's salt in
RGW_ATTR_CRYPT_PART_NUMS, which now holds (part, salt) pairs. GET reads it back
to re-derive the key, and an empty salt reproduces the old derivation so unsalted
parts still decrypt.

Signed-off-by: Matthew N. Heler <matthew.heler@hotmail.com>
(cherry picked from commit 57e0250f5738dcea3adf4193d82f00b90c52c136)

6 weeks agorgw/restore: take the hash mod HASH_PRIME when picking a shard 69606/head
Matthew N. Heler [Tue, 9 Jun 2026 22:21:39 +0000 (17:21 -0500)]
rgw/restore: take the hash mod HASH_PRIME when picking a shard

choose_oid fed ceph_str_hash_linux straight into % max_objs, and the
low bits of that hash are weak enough that similar object names keep
landing on the same shard. LC takes the hash mod HASH_PRIME first for
exactly this reason, do the same here.

Signed-off-by: Matthew N. Heler <matthew.heler@hotmail.com>
(cherry picked from commit d2e487acfe9ed45b30d879844bfdbc7d5f1ff343)

6 weeks agomon: add monitor RocksDB backup and restore 69586/head
Matthew N. Heler [Mon, 18 May 2026 01:57:01 +0000 (20:57 -0500)]
mon: add monitor RocksDB backup and restore

Implements an opt-in backup mechanism for the monitor using
rocksdb::BackupEngine. Backups run on a schedule when
mon_backup_interval is set, or are triggered manually via
`ceph tell mon.* backup`. Cleanup keeps the last N, hourly,
and daily snapshots, with a free-space guard. Off by default.

Restore is offline: stop the mon and run
  ceph-mon --restore-backup <dir> --yes-i-really-mean-it
optionally with --backup-version (BackupEngine logical version,
as shown by --list-backups). The mon keyring is stashed alongside
the RocksDB backup so a wiped mon_data is recovered end-to-end,
and kv_backend is stamped back when missing.

Co-authored-by: Daniel Poelzleithner <poelzleithner@b1-systems.de>
Signed-off-by: Matthew N. Heler <matthew.heler@hotmail.com>
(cherry picked from commit 3a9ae41e2a8fd614d67e3dac39d28ddf5dd6ca4a)

6 weeks agomgr/DaemonServer: Aggregate and globally sort OSDs for ok-to-upgrade 69549/head
Sridhar Seshasayee [Wed, 6 May 2026 15:11:33 +0000 (20:41 +0530)]
mgr/DaemonServer: Aggregate and globally sort OSDs for ok-to-upgrade

The 'ok-to-upgrade' command output sorting did not scale accurately
when target CRUSH buckets contained multiple child buckets (e.g., a
chassis containing multiple hosts). OSDs were previously sorted
individually per child bucket and appended sequentially. This created
fragmented, per-host sort segments rather than a globally sorted list
for the parent bucket.

Changes:

1. Fix the issue above by aggregating all child OSDs into a single vector prior
to executing a single, global sort operation based on PG counts. Additionally,
optimize memory efficiency and future-proof the logic by reserving continuous
vector blocks to avoid dynamic heap reallocations.

2. Add integration tests with chassis and rack based CRUSH hierarchies which
verifies the ok-to-upgrade functionality. In addition, the tests crucially
verify the order of OSDs returned is according to the ascending order of
acting PG count. Additionally, make minor fix-ups to lines that determine the
length of a list in JSON response by removing the redundant "| bc".

Fixes: https://tracker.ceph.com/issues/77272
Signed-off-by: Sridhar Seshasayee <sridhar.seshasayee@ibm.com>
(cherry picked from commit 6761549c5a719f541a850f243318a1212b76c0a6)

7 weeks agoMerge PR #69407 into umbrella
Patrick Donnelly [Thu, 11 Jun 2026 14:29:30 +0000 (10:29 -0400)]
Merge PR #69407 into umbrella

* refs/pull/69407/head:
umbrella: doc: update release-checklist
.github/milestone: add umbrella

Reviewed-by: Yuri Weinstein <yweins@redhat.com>
7 weeks agoumbrella: doc: update release-checklist 69407/head
Patrick Donnelly [Thu, 11 Jun 2026 03:27:51 +0000 (23:27 -0400)]
umbrella: doc: update release-checklist

Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
7 weeks ago.github/milestone: add umbrella
Patrick Donnelly [Wed, 10 Jun 2026 22:25:16 +0000 (18:25 -0400)]
.github/milestone: add umbrella

Fixes: https://tracker.ceph.com/issues/77308
Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
(cherry picked from commit aca3a35a875bf8330180faf3967bf75c849d415c)

7 weeks agoMerge PR #69405 into umbrella
Patrick Donnelly [Thu, 11 Jun 2026 01:56:20 +0000 (21:56 -0400)]
Merge PR #69405 into umbrella

* refs/pull/69405/head:
umbrella: doc: add nightlies
umbrella: doc: add release name to redmine
umbrella: doc: setup release redirects
umbrella: doc: add releases links to toc
umbrella: doc/dev/release-checkslists: remove past release notes
umbrella: doc/dev/release-checklists: branch created

Reviewed-by: Yuri Weinstein <yweins@redhat.com>
7 weeks agoumbrella: doc: add nightlies 69405/head
Patrick Donnelly [Wed, 10 Jun 2026 22:33:18 +0000 (18:33 -0400)]
umbrella: doc: add nightlies

This will be tracked via: https://tracker.ceph.com/issues/77309

Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
7 weeks agoumbrella: doc: add release name to redmine
Patrick Donnelly [Wed, 10 Jun 2026 22:24:26 +0000 (18:24 -0400)]
umbrella: doc: add release name to redmine

Already done.

Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
7 weeks agoumbrella: doc: setup release redirects
Patrick Donnelly [Wed, 10 Jun 2026 22:23:15 +0000 (18:23 -0400)]
umbrella: doc: setup release redirects

Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
7 weeks agoumbrella: doc: add releases links to toc
Patrick Donnelly [Fri, 18 Nov 2022 19:13:01 +0000 (14:13 -0500)]
umbrella: doc: add releases links to toc

Signed-off-by: Patrick Donnelly <pdonnell@redhat.com>
(cherry picked from commit 8cf9ad62949516666ad0f2c0bb7726ef68e4d666)
Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
Conflicts:
doc/index.rst: index changes

7 weeks agoumbrella: doc/dev/release-checkslists: remove past release notes
Patrick Donnelly [Wed, 10 Jun 2026 22:19:25 +0000 (18:19 -0400)]
umbrella: doc/dev/release-checkslists: remove past release notes

Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
7 weeks agoumbrella: doc/dev/release-checklists: branch created
Patrick Donnelly [Wed, 10 Jun 2026 22:18:58 +0000 (18:18 -0400)]
umbrella: doc/dev/release-checklists: branch created

Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
7 weeks agoMerge PR #66726 into main v21.0.1
Patrick Donnelly [Wed, 10 Jun 2026 18:30:59 +0000 (14:30 -0400)]
Merge PR #66726 into main

* refs/pull/66726/head:
doc: Update documentation to reflect new functionality
test: Add integration tests for EC Omap operations and recovery
osd: Hook up omap operations in EC pools
osd: Allow for recovery of OMAP header and entries in EC pools
doc: Write design document to explain the reasoning behind implementing this feature
osd: Introduce functions required for EC OMAP support
osd: Add ECOmapJournal class and relocate OmapUpdateType enum class

Reviewed-by: Bill Scales <bill_scales@uk.ibm.com>
Reviewed-by: Alex Ainscow <aainscow@uk.ibm.com>
Reviewed-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
Reviewed-by: Patrick Donnelly <pdonnell@ibm.com>
7 weeks agoMerge pull request #69051 from mheler/wip-rgw-http-reqs-lock
mheler [Wed, 10 Jun 2026 18:11:19 +0000 (13:11 -0500)]
Merge pull request #69051 from mheler/wip-rgw-http-reqs-lock

rgw/http: take reqs_lock when appending to reqs_change_state

7 weeks agoMerge pull request #68784 from mheler/wip-checksum-special-char
mheler [Wed, 10 Jun 2026 18:10:51 +0000 (13:10 -0500)]
Merge pull request #68784 from mheler/wip-checksum-special-char

rgw/cloud-transition: url-encode rgwx-source-key metadata header

7 weeks agoMerge pull request #69256 from ronen-fr/wip-rf-stshards
Ronen Friedman [Wed, 10 Jun 2026 15:31:58 +0000 (18:31 +0300)]
Merge pull request #69256 from ronen-fr/wip-rf-stshards

crimson/osd: avoid calling get_sharded_store() for obj size

Reviewed-by: Kefu Chai <k.chai@proxmox.com>
Reviewed-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
Reviewed-by: Matan Breizman <mbreizma@redhat.com>
7 weeks agoMerge pull request #68888 from MattyWilliams22/mw-peering-state-rollforward
Matty Williams [Wed, 10 Jun 2026 15:20:23 +0000 (16:20 +0100)]
Merge pull request #68888 from MattyWilliams22/mw-peering-state-rollforward

osd: Fix condition for rolling forward pg log entries

Reviewed-by: Alex Ainscow <aainscow@uk.ibm.com>
Reviewed-by: Bill Scales <bill_scales@uk.ibm.com>
7 weeks agoMerge pull request #69276 from afreen23/worktree-umbrella-release-notes
Afreen Misbah [Wed, 10 Jun 2026 14:33:03 +0000 (20:03 +0530)]
Merge pull request #69276 from afreen23/worktree-umbrella-release-notes

doc: add Dashboard and Monitoring release notes for Umbrella

Reviewed-by: Afreen Misbah <afreen@ibm.com>
Reviewed-by: Naman Munet <nmunet@redhat.com>
7 weeks agoMerge pull request #68368 from kginonredhat/issue-75389-yaml-and-jinja2-deps-on-cento...
David Galloway [Wed, 10 Jun 2026 14:32:33 +0000 (10:32 -0400)]
Merge pull request #68368 from kginonredhat/issue-75389-yaml-and-jinja2-deps-on-centos-distro

ceph.spec: declare PyYAML and Jinja2 Requires for cephadm RPM

7 weeks agodoc: add Dashboard and Monitoring release notes for Umbrella 69276/head
Afreen Misbah [Mon, 25 May 2026 23:10:46 +0000 (04:40 +0530)]
doc: add Dashboard and Monitoring release notes for Umbrella

Signed-off-by: Afreen Misbah <afreen23@gmail.com>
7 weeks agoMerge pull request #68984 from Jayaprakash-ibm/wip-faster-alloc-recovery-testing
Jaya Prakash [Wed, 10 Jun 2026 11:31:07 +0000 (17:01 +0530)]
Merge pull request #68984 from Jayaprakash-ibm/wip-faster-alloc-recovery-testing

qa: Add Teuthology tests for BlueStore faster allocation recovery

Reviewed-by: Jaya Prakash <jayaprakash@ibm.com>