]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd_mirror: avoid rescans in busy loop to detect new snapshots
authorPrasanna Kumar Kalever <prasanna.kalever@redhat.com>
Tue, 4 Mar 2025 14:26:33 +0000 (19:56 +0530)
committerPrasanna Kumar Kalever <prasanna.kalever@redhat.com>
Thu, 24 Apr 2025 15:56:32 +0000 (21:26 +0530)
Instead move the state to STATE_IDLE once the snapshot limits cannot be met
and move back to STATE_REPLAYING on a call from group_replayer to
set_remote_snap_id_end_limit()

Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc
src/tools/rbd_mirror/image_replayer/snapshot/Replayer.h

index 44cddab092011820e1e760d71592c9de3bbbe662..ed502f8ce310bfbc05f05300700c23baa9e75ab9 100644 (file)
@@ -760,8 +760,14 @@ void Replayer<I>::scan_remote_mirror_snapshots(
           auto limit = get_remote_snap_id_end_limit();
           if (limit != CEPH_NOSNAP && limit >= m_remote_snap_id_end) {
             copy_snapshots();
-          } else {
-            load_local_image_meta();
+            return;
+          }
+          dout(10) << "idling waiting for change in snapshot limits" << dendl;
+          {
+            std::unique_lock locker{m_lock};
+            ceph_assert(m_state == STATE_REPLAYING);
+            m_state = STATE_IDLE;
+            notify_status_updated();
           }
         }
         return;
index 720812a4f1dc1e3112c2fc3f5b9c58b38445ee27..46c2ca1129a0f612f41f60f95f50255481da792c 100644 (file)
@@ -105,8 +105,14 @@ public:
   }
 
   void set_remote_snap_id_end_limit(uint64_t snap_id) {
-    std::unique_lock locker(m_lock);
-    m_remote_group_image_snap_id = snap_id;
+    {
+      std::unique_lock locker(m_lock);
+      m_remote_group_image_snap_id = snap_id;
+      if (m_state != STATE_IDLE) {
+        return;
+      }
+    }
+    handle_image_update_notify();
   }
 
   uint64_t get_remote_snap_id_end_limit() {