From: Jason Dillaman Date: Fri, 10 Jun 2016 02:32:33 +0000 (-0400) Subject: rbd-mirror: propagate deletions even if image replayer is stopped X-Git-Tag: v11.0.0~237^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a0c526a23783fe543737f6445a2d9438cc73b137;p=ceph.git 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 --- diff --git a/src/tools/rbd_mirror/Replayer.cc b/src/tools/rbd_mirror/Replayer.cc index dc6acf90be4e..58c25d8b35e0 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) {