]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: move the rename detection logic to snapshot GroupReplayer
authorPrasanna Kumar Kalever <prasanna.kalever@redhat.com>
Tue, 3 Sep 2024 16:03:53 +0000 (21:33 +0530)
committerPrasanna Kumar Kalever <prasanna.kalever@redhat.com>
Thu, 24 Apr 2025 15:56:25 +0000 (21:26 +0530)
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
src/tools/rbd_mirror/GroupReplayer.cc
src/tools/rbd_mirror/InstanceReplayer.cc
src/tools/rbd_mirror/group_replayer/Replayer.cc
src/tools/rbd_mirror/group_replayer/Replayer.h

index f2a32f1e9cf3f1700e32ae293eecf45ead23b767..807d4b581cb5907fee9de84d76181d4c11d83137 100644 (file)
@@ -282,8 +282,9 @@ void GroupReplayer<I>::sync_group_names() {
     }
 
     m_local_group_name = remote_group_name;
-    reregister_admin_socket_hook();
   }
+
+  reregister_admin_socket_hook();
 }
 
 template <typename I>
@@ -570,7 +571,7 @@ void GroupReplayer<I>::handle_bootstrap_group(int r) {
     }
   }
 
-  reregister_admin_socket_hook();
+  sync_group_names();
 
   if (finish_start_if_interrupted()) {
     return;
index 3696bd92f63f3fa42ca60fc0fdaca447048f89f2..975405c91b54a14ca64f9c58e2ac8d9fcbfb1f38 100644 (file)
@@ -659,8 +659,6 @@ void InstanceReplayer<I>::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()) {
index 95684447d0ebeaca6f2ef495320559f148c8380f..986f9b6b211819a774cb42ad83ba4a5b7eed8191 100644 (file)
@@ -182,6 +182,28 @@ bool Replayer<I>::is_resync_requested() {
   return false;
 }
 
+template <typename I>
+bool Replayer<I>::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 <typename I>
 void Replayer<I>::init(Context* on_finish) {
   dout(10) << m_global_group_id << dendl;
@@ -213,7 +235,7 @@ void Replayer<I>::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<I>::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();
index 2af6a43e9dc048f7b699ab9b5c682813421c0fe6..53a27ca78f3bf228f5507776479b48d906a7c1f1 100644 (file)
@@ -107,6 +107,7 @@ private:
 
   bool m_remote_demoted = false;
   bool m_resync_requested = false;
+  bool m_rename_requested = false;
 
   // map of <group_snap_id, pair<GroupSnapshot, on_finish>>
   std::map<std::string, std::pair<cls::rbd::GroupSnapshot, Context *>> 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);