From fb62296f6ead932d2572c36be6687c68cb7758a9 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Mon, 29 Jan 2018 21:12:10 -0500 Subject: [PATCH] rbd-mirror: image deleter now handles clone v2 Signed-off-by: Jason Dillaman --- src/tools/rbd_mirror/image_deleter/RemoveRequest.cc | 8 ++++++++ .../rbd_mirror/image_deleter/SnapshotPurgeRequest.cc | 7 ++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/tools/rbd_mirror/image_deleter/RemoveRequest.cc b/src/tools/rbd_mirror/image_deleter/RemoveRequest.cc index e411fa33ca9..6f10dd99ecd 100644 --- a/src/tools/rbd_mirror/image_deleter/RemoveRequest.cc +++ b/src/tools/rbd_mirror/image_deleter/RemoveRequest.cc @@ -117,6 +117,14 @@ void RemoveRequest::remove_image() { template void RemoveRequest::handle_remove_image(int r) { dout(10) << "r=" << r << dendl; + if (r == -ENOTEMPTY) { + // image must have clone v2 snapshot still associated to child + dout(10) << "snapshots still in-use" << dendl; + *m_error_result = ERROR_RESULT_RETRY_IMMEDIATELY; + finish(-EBUSY); + return; + } + if (r < 0 && r != -ENOENT) { derr << "error removing image " << m_image_id << " " << "(" << m_image_id << ") from local pool: " diff --git a/src/tools/rbd_mirror/image_deleter/SnapshotPurgeRequest.cc b/src/tools/rbd_mirror/image_deleter/SnapshotPurgeRequest.cc index c417d9f90e5..797dbdb9059 100644 --- a/src/tools/rbd_mirror/image_deleter/SnapshotPurgeRequest.cc +++ b/src/tools/rbd_mirror/image_deleter/SnapshotPurgeRequest.cc @@ -225,7 +225,12 @@ template void SnapshotPurgeRequest::handle_snap_remove(int r) { dout(10) << "r=" << r << dendl; - if (r < 0) { + if (r == -EBUSY) { + dout(10) << "snapshot in-use" << dendl; + m_ret_val = r; + close_image(); + return; + } else if (r < 0) { derr << "failed to remove snapshot: " << cpp_strerror(r) << dendl; m_ret_val = r; close_image(); -- 2.39.5