]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: ImageReplayer doesn't need image deleted callback
authorJason Dillaman <dillaman@redhat.com>
Mon, 27 Jun 2016 13:45:25 +0000 (09:45 -0400)
committerJason Dillaman <dillaman@redhat.com>
Thu, 11 Aug 2016 15:28:19 +0000 (11:28 -0400)
The Replayer will detect that the ImageReplayer is stopped and will
schedule the "wait for deleted" callback before attempting to
restart the ImageReplayer.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
(cherry picked from commit 7e5afc71dfd3ec3e7b0ddaca96f92ac6e0414006)

src/test/rbd_mirror/test_ImageReplayer.cc
src/tools/rbd_mirror/ImageReplayer.cc

index 1877ded6809218a39d575960fd59623b6f6f44b4..dd8e367c3f73da0ac3db1605d9efb5b4e12dc432 100644 (file)
@@ -576,6 +576,11 @@ TEST_F(TestImageReplayer, Resync)
   m_replayer->resync_image(&ctx);
   ASSERT_EQ(0, ctx.wait());
 
+  C_SaferCond delete_ctx;
+  m_image_deleter->wait_for_scheduled_deletion(
+    m_replayer->get_local_image_name(), &delete_ctx);
+  EXPECT_EQ(0, delete_ctx.wait());
+
   C_SaferCond cond;
   m_replayer->start(&cond);
   ASSERT_EQ(0, cond.wait());
@@ -636,6 +641,11 @@ TEST_F(TestImageReplayer, Resync_While_Stop)
 
   ASSERT_TRUE(m_replayer->is_stopped());
 
+  C_SaferCond delete_ctx;
+  m_image_deleter->wait_for_scheduled_deletion(
+    m_replayer->get_local_image_name(), &delete_ctx);
+  EXPECT_EQ(0, delete_ctx.wait());
+
   C_SaferCond cond3;
   m_replayer->start(&cond3);
   ASSERT_EQ(0, cond3.wait());
@@ -672,6 +682,11 @@ TEST_F(TestImageReplayer, Resync_StartInterrupted)
 
   ASSERT_TRUE(m_replayer->is_stopped());
 
+  C_SaferCond delete_ctx;
+  m_image_deleter->wait_for_scheduled_deletion(
+    m_replayer->get_local_image_name(), &delete_ctx);
+  EXPECT_EQ(0, delete_ctx.wait());
+
   C_SaferCond cond2;
   m_replayer->start(&cond2);
   ASSERT_EQ(0, cond2.wait());
index bf38ca1c71980d4090faba8ae6e44cb4fb027a88..1f5e83256d889476f79f1790ed2b177132511fb5 100644 (file)
@@ -1350,15 +1350,6 @@ void ImageReplayer<I>::handle_shut_down(int r, Context *on_start) {
                                              m_local_image_name,
                                              m_global_image_id);
       m_stopping_for_resync = false;
-
-      FunctionContext *ctx = new FunctionContext(
-          [this, r, on_start] (int r) {
-            handle_shut_down(r, on_start);
-          }
-      );
-      m_image_deleter->wait_for_scheduled_deletion(m_local_image_name,
-                                                   ctx, false);
-      return;
     }
 
     std::swap(on_stop, m_on_stop_finish);