From: Jason Dillaman Date: Mon, 8 Feb 2021 16:53:28 +0000 (-0500) Subject: rbd-mirror: don't prune older mirror snapshots when pruning incomplete snapshot X-Git-Tag: v17.1.0~3006^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F39155%2Fhead;p=ceph.git rbd-mirror: don't prune older mirror snapshots when pruning incomplete snapshot 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 --- diff --git a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc index dec37ad8b3a..46be2ec8fe9 100644 --- a/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc +++ b/src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc @@ -431,17 +431,19 @@ void Replayer::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) {