From 93f549c3c607bce28af43dd515a76debdddc77e2 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Thu, 30 Jan 2020 21:54:06 -0500 Subject: [PATCH] librbd: do not auto-delete mirror snapshots Instead, the disable mirror state machine will delete the snapshots. Signed-off-by: Jason Dillaman --- src/librbd/image/PreRemoveRequest.cc | 12 +++++++++++- src/librbd/image/RemoveRequest.cc | 8 ++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/librbd/image/PreRemoveRequest.cc b/src/librbd/image/PreRemoveRequest.cc index 5b1b7dd18dc..1a9d489d804 100644 --- a/src/librbd/image/PreRemoveRequest.cc +++ b/src/librbd/image/PreRemoveRequest.cc @@ -26,6 +26,16 @@ bool auto_delete_snapshot(const SnapInfo& snap_info) { snap_info.snap_namespace); switch (snap_namespace_type) { case cls::rbd::SNAPSHOT_NAMESPACE_TYPE_TRASH: + return true; + default: + return false; + } +} + +bool ignore_snapshot(const SnapInfo& snap_info) { + auto snap_namespace_type = cls::rbd::get_snap_namespace_type( + snap_info.snap_namespace); + switch (snap_namespace_type) { case cls::rbd::SNAPSHOT_NAMESPACE_TYPE_MIRROR_PRIMARY: case cls::rbd::SNAPSHOT_NAMESPACE_TYPE_MIRROR_NON_PRIMARY: return true; @@ -160,7 +170,7 @@ void PreRemoveRequest::check_image_snaps() { for (auto& snap_info : m_image_ctx->snap_info) { if (auto_delete_snapshot(snap_info.second)) { m_snap_infos.insert(snap_info); - } else { + } else if (!ignore_snapshot(snap_info.second)) { m_image_ctx->image_lock.unlock_shared(); ldout(cct, 5) << "image has snapshots - not removing" << dendl; diff --git a/src/librbd/image/RemoveRequest.cc b/src/librbd/image/RemoveRequest.cc index 5a4f56adf51..a708e9d62c4 100644 --- a/src/librbd/image/RemoveRequest.cc +++ b/src/librbd/image/RemoveRequest.cc @@ -218,6 +218,14 @@ void RemoveRequest::handle_disable_mirror(int r) { << cpp_strerror(r) << dendl; } + // one last chance to ensure all snapshots have been deleted + m_image_ctx->image_lock.lock_shared(); + if (!m_image_ctx->snap_info.empty()) { + ldout(m_cct, 5) << "image has snapshots - not removing" << dendl; + m_ret_val = -ENOTEMPTY; + } + m_image_ctx->image_lock.unlock_shared(); + send_close_image(r); } -- 2.39.5