From cb3b479e05952ec2c79f2536033d94173607c8ba Mon Sep 17 00:00:00 2001 From: Prasanna Kumar Kalever Date: Fri, 21 Mar 2025 23:07:54 +0530 Subject: [PATCH] rbd-mirror: don't call group_snap_set for every image snap for regular group snap It looks like we fixed avoiding of calling group_snap_set() for each image snapshot update for mirror group snapshot, but for regular group snapshot, it is still happening. This commit will fix it. Signed-off-by: Prasanna Kumar Kalever --- .../rbd_mirror/group_replayer/Replayer.cc | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/src/tools/rbd_mirror/group_replayer/Replayer.cc b/src/tools/rbd_mirror/group_replayer/Replayer.cc index a02929da2263d..b2157b758425c 100644 --- a/src/tools/rbd_mirror/group_replayer/Replayer.cc +++ b/src/tools/rbd_mirror/group_replayer/Replayer.cc @@ -1163,7 +1163,6 @@ template void Replayer::regular_snapshot_complete( const std::string &group_snap_id, Context *on_finish) { - dout(10) << dendl; std::unique_lock locker{m_lock}; auto itl = std::find_if( m_local_group_snaps.begin(), m_local_group_snaps.end(), @@ -1248,22 +1247,32 @@ void Replayer::regular_snapshot_complete( image_snap_complete = false; // reset } } - locker.lock(); if (itr->snaps.size() == local_image_snap_specs.size()) { + locker.lock(); itl->snaps = local_image_snap_specs; itl->state = cls::rbd::GROUP_SNAPSHOT_STATE_COMPLETE; - } - librados::ObjectWriteOperation op; - librbd::cls_client::group_snap_set(&op, *itl); + librados::ObjectWriteOperation op; + librbd::cls_client::group_snap_set(&op, *itl); - auto comp = create_rados_callback( - new LambdaContext([this, group_snap_id, on_finish](int r) { - handle_regular_snapshot_complete(r, group_snap_id, on_finish); - })); - int r = m_local_io_ctx.aio_operate( - librbd::util::group_header_name(m_local_group_id), comp, &op); - ceph_assert(r == 0); - comp->release(); + auto comp = create_rados_callback( + new LambdaContext([this, group_snap_id, on_finish](int r) { + handle_regular_snapshot_complete(r, group_snap_id, on_finish); + })); + int r = m_local_io_ctx.aio_operate( + librbd::util::group_header_name(m_local_group_id), comp, &op); + ceph_assert(r == 0); + locker.unlock(); + comp->release(); + + dout(10) << "local group snap info: " + << "id: " << itl->id + << ", name: " << itl->name + << ", state: " << itl->state + << ", snaps.size: " << itl->snaps.size() + << dendl; + } else { + on_finish->complete(0); + } } template -- 2.39.5