From c579a722431f2c7d933eac3e34dc7cb3e81edfbf Mon Sep 17 00:00:00 2001 From: Prasanna Kumar Kalever Date: Tue, 3 Sep 2024 21:33:53 +0530 Subject: [PATCH] rbd-mirror: move the rename detection logic to snapshot GroupReplayer Signed-off-by: Prasanna Kumar Kalever --- src/tools/rbd_mirror/GroupReplayer.cc | 5 ++-- src/tools/rbd_mirror/InstanceReplayer.cc | 2 -- .../rbd_mirror/group_replayer/Replayer.cc | 29 ++++++++++++++++++- .../rbd_mirror/group_replayer/Replayer.h | 2 ++ 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/tools/rbd_mirror/GroupReplayer.cc b/src/tools/rbd_mirror/GroupReplayer.cc index f2a32f1e9cf3f..807d4b581cb59 100644 --- a/src/tools/rbd_mirror/GroupReplayer.cc +++ b/src/tools/rbd_mirror/GroupReplayer.cc @@ -282,8 +282,9 @@ void GroupReplayer::sync_group_names() { } m_local_group_name = remote_group_name; - reregister_admin_socket_hook(); } + + reregister_admin_socket_hook(); } template @@ -570,7 +571,7 @@ void GroupReplayer::handle_bootstrap_group(int r) { } } - reregister_admin_socket_hook(); + sync_group_names(); if (finish_start_if_interrupted()) { return; diff --git a/src/tools/rbd_mirror/InstanceReplayer.cc b/src/tools/rbd_mirror/InstanceReplayer.cc index 3696bd92f63f3..975405c91b54a 100644 --- a/src/tools/rbd_mirror/InstanceReplayer.cc +++ b/src/tools/rbd_mirror/InstanceReplayer.cc @@ -659,8 +659,6 @@ void InstanceReplayer::start_group_replayer( if (group_replayer->needs_restart()) { stop_group_replayer(group_replayer, new C_TrackedOp(m_async_op_tracker, nullptr)); - } else { - group_replayer->sync_group_names(); } return; } else if (group_replayer->is_blocklisted()) { diff --git a/src/tools/rbd_mirror/group_replayer/Replayer.cc b/src/tools/rbd_mirror/group_replayer/Replayer.cc index 95684447d0ebe..986f9b6b21181 100644 --- a/src/tools/rbd_mirror/group_replayer/Replayer.cc +++ b/src/tools/rbd_mirror/group_replayer/Replayer.cc @@ -182,6 +182,28 @@ bool Replayer::is_resync_requested() { return false; } +template +bool Replayer::is_rename_requested() { + dout(10) << "m_local_group_id=" << m_local_group_id << dendl; + + std::string remote_group_name; + int r = librbd::cls_client::dir_get_name(&m_remote_io_ctx, + RBD_GROUP_DIRECTORY, + m_remote_group_id, + &remote_group_name); + if (r < 0) { + derr << "failed to retrieve remote group name: " + << cpp_strerror(r) << dendl; + return false; + } + + if (m_local_group_ctx->name != remote_group_name) { + return true; + } + + return false; +} + template void Replayer::init(Context* on_finish) { dout(10) << m_global_group_id << dendl; @@ -213,7 +235,7 @@ void Replayer::load_local_group_snapshots() { m_state = STATE_REPLAYING; } - if (m_resync_requested) { + if (m_resync_requested || m_rename_requested) { return; } else if (is_resync_requested()) { m_resync_requested = true; // do nothing from here, anything is simply @@ -222,6 +244,11 @@ void Replayer::load_local_group_snapshots() { dout(10) << "local group resync requested" << dendl; // send stop for Group Replayer notify_group_listener_stop(); + } else if (is_rename_requested()) { + m_rename_requested = true; + dout(10) << "remote group rename requested" << dendl; + // send stop for Group Replayer + notify_group_listener_stop(); } m_local_group_snaps.clear(); diff --git a/src/tools/rbd_mirror/group_replayer/Replayer.h b/src/tools/rbd_mirror/group_replayer/Replayer.h index 2af6a43e9dc04..53a27ca78f3bf 100644 --- a/src/tools/rbd_mirror/group_replayer/Replayer.h +++ b/src/tools/rbd_mirror/group_replayer/Replayer.h @@ -107,6 +107,7 @@ private: bool m_remote_demoted = false; bool m_resync_requested = false; + bool m_rename_requested = false; // map of > std::map> m_create_snap_requests; @@ -120,6 +121,7 @@ private: void schedule_load_group_snapshots(); void notify_group_listener_stop(); bool is_resync_requested(); + bool is_rename_requested(); void load_local_group_snapshots(); void handle_load_local_group_snapshots(int r); -- 2.39.5