From a0c526a23783fe543737f6445a2d9438cc73b137 Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Thu, 9 Jun 2016 22:32:33 -0400 Subject: [PATCH] rbd-mirror: propagate deletions even if image replayer is stopped If an image deletion which causes the replayer to stop (due to an error) before the deletion is detected, the deletion should still occur. Signed-off-by: Jason Dillaman --- src/tools/rbd_mirror/Replayer.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/tools/rbd_mirror/Replayer.cc b/src/tools/rbd_mirror/Replayer.cc index dc6acf90be4e7..58c25d8b35e0b 100644 --- a/src/tools/rbd_mirror/Replayer.cc +++ b/src/tools/rbd_mirror/Replayer.cc @@ -668,6 +668,9 @@ void Replayer::mirror_image_status_shut_down() { void Replayer::start_image_replayer(unique_ptr > &image_replayer, const boost::optional& image_name) { + dout(20) << "global_image_id=" << image_replayer->get_global_image_id() + << dendl; + if (!image_replayer->is_stopped()) { return; } @@ -688,11 +691,25 @@ void Replayer::start_image_replayer(unique_ptr > &image_replayer bool Replayer::stop_image_replayer(unique_ptr > &image_replayer) { + dout(20) << "global_image_id=" << image_replayer->get_global_image_id() + << dendl; + if (image_replayer->is_stopped()) { + if (m_image_deleter) { + dout(20) << "scheduling delete" << dendl; + m_image_deleter->schedule_image_delete( + image_replayer->get_local_pool_id(), + image_replayer->get_local_image_id(), + image_replayer->get_local_image_name(), + image_replayer->get_global_image_id()); + } return true; } if (image_replayer->is_running()) { + if (m_image_deleter) { + dout(20) << "scheduling delete after image replayer stopped" << dendl; + } FunctionContext *ctx = new FunctionContext( [&image_replayer, this] (int r) { if (m_image_deleter) { -- 2.39.5