]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: don't prune older mirror snapshots when pruning incomplete snapshot 39577/head
authorJason Dillaman <dillaman@redhat.com>
Mon, 8 Feb 2021 16:53:28 +0000 (11:53 -0500)
committerJason Dillaman <dillaman@redhat.com>
Fri, 19 Feb 2021 15:39:15 +0000 (10:39 -0500)
Since we normally prune in order, we need to ensure that we don't prune older
snapshots when we need to delete an incomplete mirror snapshot since the
older snapshot might be the only remaining mirror snapshot.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
(cherry picked from commit 7ba9214ea5b73d0436af6c2896abf4836d741de9)

src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc

index 0f149f0d1d89968edb42121b46b7db088dee876b..6fa7277ef474b9cf749e1a65fe7ae71bf226b68e 100644 (file)
@@ -432,17 +432,19 @@ void Replayer<I>::scan_local_mirror_snapshots(
           prune_snap_ids.insert(local_snap_id);
         }
       } else {
-        // start snap will be last complete mirror snapshot or initial
-        // image revision
-        m_local_snap_id_end = local_snap_id;
-
         if (mirror_ns->last_copied_object_number == 0) {
           // snapshot might be missing image state, object-map, etc, so just
           // delete and re-create it if we haven't started copying data
-          // objects
+          // objects. Also only prune this snapshot since we will need the
+          // previous mirror snapshot for syncing.
+          prune_snap_ids.clear();
           prune_snap_ids.insert(local_snap_id);
           break;
         }
+
+        // start snap will be last complete mirror snapshot or initial
+        // image revision
+        m_local_snap_id_end = local_snap_id;
       }
     } else if (mirror_ns->is_primary()) {
       if (mirror_ns->complete) {