]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: propagate deletions even if image replayer is stopped
authorJason Dillaman <dillaman@redhat.com>
Fri, 10 Jun 2016 02:32:33 +0000 (22:32 -0400)
committerJason Dillaman <dillaman@redhat.com>
Fri, 10 Jun 2016 04:15:27 +0000 (00:15 -0400)
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 <dillaman@redhat.com>
src/tools/rbd_mirror/Replayer.cc

index dc6acf90be4e794133afee6909e37f4c56dec9ac..58c25d8b35e0b5224a679536233fbbf03a8a9cb7 100644 (file)
@@ -668,6 +668,9 @@ void Replayer::mirror_image_status_shut_down() {
 void Replayer::start_image_replayer(unique_ptr<ImageReplayer<> > &image_replayer,
                                     const boost::optional<std::string>& 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<ImageReplayer<> > &image_replayer
 
 bool Replayer::stop_image_replayer(unique_ptr<ImageReplayer<> > &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) {