]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: deletions should be scheduled using global ids
authorJason Dillaman <dillaman@redhat.com>
Tue, 25 Apr 2017 13:51:12 +0000 (09:51 -0400)
committerJason Dillaman <dillaman@redhat.com>
Thu, 27 Apr 2017 19:54:12 +0000 (15:54 -0400)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/test/rbd_mirror/test_ImageDeleter.cc
src/test/rbd_mirror/test_ImageReplayer.cc
src/tools/rbd_mirror/ImageDeleter.cc
src/tools/rbd_mirror/ImageDeleter.h
src/tools/rbd_mirror/ImageReplayer.cc
src/tools/rbd_mirror/ImageReplayer.h
src/tools/rbd_mirror/InstanceReplayer.cc
src/tools/rbd_mirror/PoolReplayer.cc

index 606bec8d378d46c0b8a9514c5df0d32de1447777..2aa0b3e9319b66e8ed8764e3f105443a54f1440a 100644 (file)
@@ -217,8 +217,7 @@ int64_t TestImageDeleter::m_local_pool_id;
 
 
 TEST_F(TestImageDeleter, Delete_NonPrimary_Image) {
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, m_local_image_id,
-                                   GLOBAL_IMAGE_ID);
+  m_deleter->schedule_image_delete(_rados, m_local_pool_id, GLOBAL_IMAGE_ID);
 
   C_SaferCond ctx;
   m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
@@ -234,8 +233,7 @@ TEST_F(TestImageDeleter, Delete_NonPrimary_Image) {
 TEST_F(TestImageDeleter, Fail_Delete_Primary_Image) {
   promote_image();
 
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, m_local_image_id,
-                                   GLOBAL_IMAGE_ID);
+  m_deleter->schedule_image_delete(_rados, m_local_pool_id, GLOBAL_IMAGE_ID);
 
   C_SaferCond ctx;
   m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
@@ -246,27 +244,10 @@ TEST_F(TestImageDeleter, Fail_Delete_Primary_Image) {
   ASSERT_EQ(0u, m_deleter->get_failed_queue_items().size());
 }
 
-TEST_F(TestImageDeleter, Fail_Delete_Diff_GlobalId) {
-  // This test case represents a case that should never happen, unless
-  // there is bug in the implementation
-
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, m_local_image_id,
-                                   "diff global id");
-
-  C_SaferCond ctx;
-  m_deleter->wait_for_scheduled_deletion(m_local_pool_id, "diff global id",
-                                         &ctx);
-  EXPECT_EQ(-EINVAL, ctx.wait());
-
-  ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
-  ASSERT_EQ(0u, m_deleter->get_failed_queue_items().size());
-}
-
 TEST_F(TestImageDeleter, Delete_Image_With_Child) {
   create_snapshot();
 
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, m_local_image_id,
-                                   GLOBAL_IMAGE_ID);
+  m_deleter->schedule_image_delete(_rados, m_local_pool_id, GLOBAL_IMAGE_ID);
 
   C_SaferCond ctx;
   m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
@@ -281,8 +262,7 @@ TEST_F(TestImageDeleter, Delete_Image_With_Children) {
   create_snapshot("snap1");
   create_snapshot("snap2");
 
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, m_local_image_id,
-                                   GLOBAL_IMAGE_ID);
+  m_deleter->schedule_image_delete(_rados, m_local_pool_id, GLOBAL_IMAGE_ID);
 
   C_SaferCond ctx;
   m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
@@ -296,8 +276,7 @@ TEST_F(TestImageDeleter, Delete_Image_With_Children) {
 TEST_F(TestImageDeleter, Delete_Image_With_ProtectedChild) {
   create_snapshot("snap1", true);
 
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, m_local_image_id,
-                                   GLOBAL_IMAGE_ID);
+  m_deleter->schedule_image_delete(_rados, m_local_pool_id, GLOBAL_IMAGE_ID);
 
   C_SaferCond ctx;
   m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
@@ -312,8 +291,7 @@ TEST_F(TestImageDeleter, Delete_Image_With_ProtectedChildren) {
   create_snapshot("snap1", true);
   create_snapshot("snap2", true);
 
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, m_local_image_id,
-                                   GLOBAL_IMAGE_ID);
+  m_deleter->schedule_image_delete(_rados, m_local_pool_id, GLOBAL_IMAGE_ID);
 
   C_SaferCond ctx;
   m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
@@ -327,8 +305,7 @@ TEST_F(TestImageDeleter, Delete_Image_With_ProtectedChildren) {
 TEST_F(TestImageDeleter, Delete_Image_With_Clone) {
   std::string clone_id = create_clone();
 
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, m_local_image_id,
-                                   GLOBAL_IMAGE_ID);
+  m_deleter->schedule_image_delete(_rados, m_local_pool_id, GLOBAL_IMAGE_ID);
 
   C_SaferCond ctx;
   m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
@@ -338,7 +315,7 @@ TEST_F(TestImageDeleter, Delete_Image_With_Clone) {
   ASSERT_EQ(1u, m_deleter->get_delete_queue_items().size());
   ASSERT_EQ(0u, m_deleter->get_failed_queue_items().size());
 
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, clone_id,
+  m_deleter->schedule_image_delete(_rados, m_local_pool_id,
                                    GLOBAL_CLONE_IMAGE_ID);
 
   C_SaferCond ctx2;
@@ -363,8 +340,7 @@ TEST_F(TestImageDeleter, Delete_NonExistent_Image) {
   EXPECT_EQ(0, cls_client::mirror_image_set(&m_local_io_ctx, m_local_image_id,
                                             mirror_image));
 
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, m_local_image_id,
-                                   GLOBAL_IMAGE_ID);
+  m_deleter->schedule_image_delete(_rados, m_local_pool_id, GLOBAL_IMAGE_ID);
 
   C_SaferCond ctx;
   m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
@@ -388,8 +364,7 @@ TEST_F(TestImageDeleter, Delete_NonExistent_Image_With_MirroringState) {
   EXPECT_EQ(0, cls_client::mirror_image_set(&m_local_io_ctx, m_local_image_id,
                                             mirror_image));
 
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, m_local_image_id,
-                                   GLOBAL_IMAGE_ID);
+  m_deleter->schedule_image_delete(_rados, m_local_pool_id, GLOBAL_IMAGE_ID);
 
   C_SaferCond ctx;
   m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
@@ -405,8 +380,7 @@ TEST_F(TestImageDeleter, Delete_NonExistent_Image_With_MirroringState) {
 TEST_F(TestImageDeleter, Delete_NonExistent_Image_Without_MirroringState) {
   remove_image();
 
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, m_local_image_id,
-                                   GLOBAL_IMAGE_ID);
+  m_deleter->schedule_image_delete(_rados, m_local_pool_id, GLOBAL_IMAGE_ID);
 
   C_SaferCond ctx;
   m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
@@ -424,8 +398,7 @@ TEST_F(TestImageDeleter, Fail_Delete_NonPrimary_Image) {
                                 false);
   EXPECT_EQ(0, ictx->state->open(false));
 
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, m_local_image_id,
-                                   GLOBAL_IMAGE_ID);
+  m_deleter->schedule_image_delete(_rados, m_local_pool_id, GLOBAL_IMAGE_ID);
 
   C_SaferCond ctx;
   m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
@@ -445,8 +418,7 @@ TEST_F(TestImageDeleter, Retry_Failed_Deletes) {
 
   m_deleter->set_failed_timer_interval(2);
 
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, m_local_image_id,
-                                   GLOBAL_IMAGE_ID);
+  m_deleter->schedule_image_delete(_rados, m_local_pool_id, GLOBAL_IMAGE_ID);
 
   C_SaferCond ctx;
   m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
@@ -471,8 +443,7 @@ TEST_F(TestImageDeleter, Delete_Is_Idempotent) {
                                 false);
   EXPECT_EQ(0, ictx->state->open(false));
 
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, m_local_image_id,
-                                   GLOBAL_IMAGE_ID);
+  m_deleter->schedule_image_delete(_rados, m_local_pool_id, GLOBAL_IMAGE_ID);
 
   C_SaferCond ctx;
   m_deleter->wait_for_scheduled_deletion(m_local_pool_id, GLOBAL_IMAGE_ID,
@@ -482,8 +453,7 @@ TEST_F(TestImageDeleter, Delete_Is_Idempotent) {
   ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
   ASSERT_EQ(1u, m_deleter->get_failed_queue_items().size());
 
-  m_deleter->schedule_image_delete(_rados, m_local_pool_id, m_local_image_id,
-                                   GLOBAL_IMAGE_ID);
+  m_deleter->schedule_image_delete(_rados, m_local_pool_id, GLOBAL_IMAGE_ID);
 
   ASSERT_EQ(0u, m_deleter->get_delete_queue_items().size());
   ASSERT_EQ(1u, m_deleter->get_failed_queue_items().size());
index 6dc064debd75f4a9af33a009836997ecb6d35946..9ca82925322adb80be384f4c7c5e1720795c3c57 100644 (file)
@@ -622,8 +622,6 @@ TEST_F(TestImageReplayer, Resync)
 
   start();
 
-  std::string image_id = m_replayer->get_local_image_id();
-
   generate_test_data();
 
   open_remote_image(&ictx);
@@ -653,7 +651,6 @@ TEST_F(TestImageReplayer, Resync)
   m_replayer->start(&cond);
   ASSERT_EQ(0, cond.wait());
 
-  ASSERT_NE(image_id, m_replayer->get_local_image_id());
   ASSERT_TRUE(m_replayer->is_replaying());
 
   wait_for_replay_complete();
@@ -674,8 +671,6 @@ TEST_F(TestImageReplayer, Resync_While_Stop)
 
   start();
 
-  std::string image_id = m_replayer->get_local_image_id();
-
   generate_test_data();
 
   librbd::ImageCtx *ictx;
@@ -718,7 +713,6 @@ TEST_F(TestImageReplayer, Resync_While_Stop)
   m_replayer->start(&cond3);
   ASSERT_EQ(0, cond3.wait());
 
-  ASSERT_NE(image_id, m_replayer->get_local_image_id());
   ASSERT_TRUE(m_replayer->is_replaying());
 
   wait_for_replay_complete();
@@ -737,8 +731,6 @@ TEST_F(TestImageReplayer, Resync_StartInterrupted)
 
   bootstrap();
 
-  std::string image_id = m_replayer->get_local_image_id();
-
   librbd::ImageCtx *ictx;
   open_local_image(&ictx);
   librbd::Journal<>::request_resync(ictx);
@@ -764,8 +756,6 @@ TEST_F(TestImageReplayer, Resync_StartInterrupted)
   m_watch_ctx = new C_WatchCtx(this, oid);
   ASSERT_EQ(0, m_remote_ioctx.watch2(oid, &m_watch_handle, m_watch_ctx));
 
-  ASSERT_NE(image_id, m_replayer->get_local_image_id());
-
   ASSERT_TRUE(m_replayer->is_replaying());
 
   open_remote_image(&ictx);
index 00c4c3952f21bcd97717dc3a8d4788fd20d2c4be..8791033b26136bb74a843087dcdb581a342d28d4 100644 (file)
@@ -198,7 +198,6 @@ void ImageDeleter::run() {
 
 void ImageDeleter::schedule_image_delete(RadosRef local_rados,
                                          int64_t local_pool_id,
-                                         const std::string& local_image_id,
                                          const std::string& global_image_id) {
   dout(20) << "enter" << dendl;
 
@@ -206,14 +205,14 @@ void ImageDeleter::schedule_image_delete(RadosRef local_rados,
 
   auto del_info = find_delete_info(local_pool_id, global_image_id);
   if (del_info != nullptr) {
-    dout(20) << "image " << local_image_id << " (" << global_image_id << ") "
+    dout(20) << "image " << global_image_id << " "
              << "was already scheduled for deletion" << dendl;
     return;
   }
 
-  m_delete_queue.push_front(unique_ptr<DeleteInfo>(
-        new DeleteInfo(local_rados, local_pool_id, local_image_id,
-                       global_image_id)));
+  m_delete_queue.push_front(
+    unique_ptr<DeleteInfo>(new DeleteInfo(local_rados, local_pool_id,
+                                          global_image_id)));
   m_delete_queue_cond.Signal();
 }
 
@@ -272,25 +271,40 @@ bool ImageDeleter::process_image_delete() {
   r = m_active_delete->local_rados->ioctx_create2(
     m_active_delete->local_pool_id, ioctx);
   if (r < 0) {
-    derr << "error accessing local pool: " << cpp_strerror(r) << dendl;
+    derr << "error accessing local pool " << m_active_delete->local_pool_id
+         << ": " << cpp_strerror(r) << dendl;
     enqueue_failed_delete(r);
     return true;
   }
 
   dout(20) << "connected to local pool: " << ioctx.get_pool_name() << dendl;
 
+  auto &global_image_id = m_active_delete->global_image_id;
+  std::string local_image_id;
+  r = librbd::cls_client::mirror_image_get_image_id(
+    &ioctx, global_image_id, &local_image_id);
+  if (r == -ENOENT) {
+    dout(10) << "image " << global_image_id << " is not mirrored" << dendl;
+    complete_active_delete(r);
+    return true;
+  } else if (r < 0) {
+    derr << "error retrieving local id for image " << global_image_id
+         << ": " << cpp_strerror(r) << dendl;
+    enqueue_failed_delete(r);
+    return true;
+  }
+
   bool is_primary = false;
-  r = Journal<>::is_tag_owner(ioctx, m_active_delete->local_image_id,
-                              &is_primary, m_work_queue);
+  r = Journal<>::is_tag_owner(ioctx, local_image_id, &is_primary,
+                              m_work_queue);
   if (r < 0 && r != -ENOENT) {
-    derr << "error retrieving image primary info: " << cpp_strerror(r)
-         << dendl;
+    derr << "error retrieving image primary info for image " << global_image_id
+         << ": " << cpp_strerror(r) << dendl;
     enqueue_failed_delete(r);
     return true;
   }
   if (is_primary) {
-    dout(10) << "local image is the primary image, aborting deletion..."
-             << dendl;
+    dout(10) << "image " << global_image_id << " is local primary" << dendl;
     complete_active_delete(-EISPRM);
     return true;
   }
@@ -298,31 +312,28 @@ bool ImageDeleter::process_image_delete() {
   dout(20) << "local image is not the primary" << dendl;
 
   bool has_snapshots;
-  r = image_has_snapshots_and_children(&ioctx, m_active_delete->local_image_id,
-                                       &has_snapshots);
+  r = image_has_snapshots_and_children(&ioctx, local_image_id, &has_snapshots);
   if (r < 0) {
     enqueue_failed_delete(r);
     return true;
   }
 
-  mirror_image.global_image_id = m_active_delete->global_image_id;
+  mirror_image.global_image_id = global_image_id;
   mirror_image.state = cls::rbd::MIRROR_IMAGE_STATE_DISABLING;
-  r = cls_client::mirror_image_set(&ioctx, m_active_delete->local_image_id,
-                                   mirror_image);
+  r = cls_client::mirror_image_set(&ioctx, local_image_id, mirror_image);
   if (r == -ENOENT) {
     dout(10) << "local image is not mirrored, aborting deletion..." << dendl;
     complete_active_delete(r);
     return true;
   } else if (r == -EEXIST || r == -EINVAL) {
-    derr << "cannot disable mirroring for image id "
-         << m_active_delete->local_image_id
-         << ": global_image_id has changed/reused, aborting deletion: "
+    derr << "cannot disable mirroring for image " << global_image_id
+         << ": global_image_id has changed/reused: "
          << cpp_strerror(r) << dendl;
     complete_active_delete(r);
     return true;
   } else if (r < 0) {
-    derr << "cannot disable mirroring for image id "
-         << m_active_delete->local_image_id << ": " << cpp_strerror(r) << dendl;
+    derr << "cannot disable mirroring for image " << global_image_id
+         << ": " << cpp_strerror(r) << dendl;
     enqueue_failed_delete(r);
     return true;
   }
@@ -332,12 +343,11 @@ bool ImageDeleter::process_image_delete() {
   if (has_snapshots) {
     dout(20) << "local image has snapshots" << dendl;
 
-    ImageCtx *imgctx = new ImageCtx("", m_active_delete->local_image_id,
-                                    nullptr, ioctx, false);
+    ImageCtx *imgctx = new ImageCtx("", local_image_id, nullptr, ioctx, false);
     r = imgctx->state->open(false);
     if (r < 0) {
-      derr << "error opening image id " << m_active_delete->local_image_id
-           << ": " << cpp_strerror(r) << dendl;
+      derr << "error opening image " << global_image_id << " ("
+           << local_image_id << "): " << cpp_strerror(r) << dendl;
       enqueue_failed_delete(r);
       return true;
     }
@@ -375,12 +385,12 @@ bool ImageDeleter::process_image_delete() {
         dout(20) << "snapshot " << imgctx->name << "@" << snap.name
                  << " is protected, issuing unprotect command" << dendl;
 
-        r = imgctx->operations->snap_unprotect(cls::rbd::UserSnapshotNamespace(),
-                                              snap.name.c_str());
+        r = imgctx->operations->snap_unprotect(
+          cls::rbd::UserSnapshotNamespace(), snap.name.c_str());
         if (r == -EBUSY) {
           // there are still clones of snapshots of this image, therefore send
           // the delete request to the end of the queue
-          dout(10) << "local image id " << m_active_delete->local_image_id << " has "
+          dout(10) << "local image id " << local_image_id << " has "
                    << "snapshots with cloned children, postponing deletion..."
                    << dendl;
           imgctx->state->close();
@@ -415,10 +425,10 @@ bool ImageDeleter::process_image_delete() {
   }
 
   librbd::NoOpProgressContext ctx;
-  r = librbd::remove(ioctx, "", m_active_delete->local_image_id, ctx, true);
+  r = librbd::remove(ioctx, "", local_image_id, ctx, true);
   if (r < 0 && r != -ENOENT) {
-    derr << "error removing image " << m_active_delete->local_image_id << " "
-         << "(" << m_active_delete->global_image_id << ") from local pool: "
+    derr << "error removing image " << global_image_id << " "
+         << "(" << local_image_id << ") from local pool: "
          << cpp_strerror(r) << dendl;
     enqueue_failed_delete(r);
     return true;
@@ -431,7 +441,7 @@ bool ImageDeleter::process_image_delete() {
              << dendl;
   }
 
-  r = cls_client::mirror_image_remove(&ioctx, m_active_delete->local_image_id);
+  r = cls_client::mirror_image_remove(&ioctx, local_image_id);
   if (r < 0 && r != -ENOENT) {
     derr << "error removing image from mirroring directory: "
          << cpp_strerror(r) << dendl;
@@ -440,8 +450,7 @@ bool ImageDeleter::process_image_delete() {
   }
 
   dout(10) << "Successfully deleted image "
-           << m_active_delete->local_image_id << " "
-           << "(" << m_active_delete->global_image_id << ")" << dendl;
+           << global_image_id << " " << "(" << local_image_id << ")" << dendl;
 
   complete_active_delete(0);
   return true;
@@ -581,7 +590,6 @@ void ImageDeleter::DeleteInfo::notify(int r) {
 
 void ImageDeleter::DeleteInfo::to_string(stringstream& ss) {
   ss << "[" << "local_pool_id=" << local_pool_id << ", ";
-  ss << "local_image_id=" << local_image_id << ", ";
   ss << "global_image_id=" << global_image_id << "]";
 }
 
@@ -590,7 +598,6 @@ void ImageDeleter::DeleteInfo::print_status(Formatter *f, stringstream *ss,
   if (f) {
     f->open_object_section("delete_info");
     f->dump_int("local_pool_id", local_pool_id);
-    f->dump_string("local_image_id", local_image_id);
     f->dump_string("global_image_id", global_image_id);
     if (print_failure_info) {
       f->dump_string("error_code", cpp_strerror(error_code));
@@ -608,7 +615,7 @@ vector<string> ImageDeleter::get_delete_queue_items() {
 
   Mutex::Locker l(m_delete_lock);
   for (const auto& del_info : m_delete_queue) {
-    items.push_back(del_info->local_image_id);
+    items.push_back(del_info->global_image_id);
   }
 
   return items;
@@ -619,7 +626,7 @@ vector<pair<string, int> > ImageDeleter::get_failed_queue_items() {
 
   Mutex::Locker l(m_delete_lock);
   for (const auto& del_info : m_failed_queue) {
-    items.push_back(make_pair(del_info->local_image_id,
+    items.push_back(make_pair(del_info->global_image_id,
                               del_info->error_code));
   }
 
index ff5f4e535f4d615cbe0fa5c452c1801f21d2f3f5..9ff990b781c23587b51354766127b765478ad218 100644 (file)
@@ -45,7 +45,6 @@ public:
 
   void schedule_image_delete(RadosRef local_rados,
                              int64_t local_pool_id,
-                             const std::string& local_image_id,
                              const std::string& global_image_id);
   void wait_for_scheduled_deletion(int64_t local_pool_id,
                                    const std::string &global_image_id,
@@ -77,20 +76,16 @@ private:
   struct DeleteInfo {
     RadosRef local_rados;
     int64_t local_pool_id;
-    std::string local_image_id;
     std::string global_image_id;
-    int error_code;
-    int retries;
-    bool notify_on_failed_retry;
-    Context *on_delete;
+    int error_code = 0;
+    int retries = 0;
+    bool notify_on_failed_retry = true;
+    Context *on_delete = nullptr;
 
     DeleteInfo(RadosRef local_rados, int64_t local_pool_id,
-               const std::string& local_image_id,
                const std::string& global_image_id) :
       local_rados(local_rados), local_pool_id(local_pool_id),
-      local_image_id(local_image_id), global_image_id(global_image_id),
-      error_code(0), retries(0), notify_on_failed_retry(true),
-      on_delete(nullptr) {
+      global_image_id(global_image_id) {
     }
 
     bool match(int64_t local_pool_id, const std::string &global_image_id) {
index fa4cb470b1f4cec4bb2223369de8d8f030f5c2b3..2ab66bbb9c1abdb2553afe1cedb059963ff2e0ce 100644 (file)
@@ -1511,7 +1511,6 @@ void ImageReplayer<I>::handle_shut_down(int r) {
     if (m_stopping_for_resync) {
       m_image_deleter->schedule_image_delete(m_local,
                                              m_local_pool_id,
-                                             m_local_image_id,
                                              m_global_image_id);
       m_stopping_for_resync = false;
     }
index 79a744d9842a187fccffa47f0b5c045e904cf9f8..8cb33eefed68102a8756f174122bed3e024e2d54 100644 (file)
@@ -118,10 +118,6 @@ public:
   inline const std::string& get_global_image_id() const {
     return m_global_image_id;
   }
-  inline std::string get_local_image_id() {
-    Mutex::Locker locker(m_lock);
-    return m_local_image_id;
-  }
 
   void start(Context *on_finish = nullptr, bool manual = false);
   void stop(Context *on_finish = nullptr, bool manual = false,
index 359e2c66bbb6806c03a595ed8998146b74f2b607..74735d6344435f9e91ae0051731881289038ed25 100644 (file)
@@ -211,15 +211,8 @@ void InstanceReplayer<I>::release_image(const std::string &global_image_id,
     on_finish = new FunctionContext(
       [this, image_replayer, on_finish] (int r) {
         auto global_image_id = image_replayer->get_global_image_id();
-        auto local_image_id = image_replayer->get_local_image_id();
-        if (local_image_id.empty()) {
-          dout(20) << global_image_id << ": unknown local_image_id"
-                   << " (image does not exist or primary), skipping delete"
-                   << dendl;
-        } else {
-          m_image_deleter->schedule_image_delete(
-            m_local_rados, m_local_pool_id, local_image_id, global_image_id);
-        }
+        m_image_deleter->schedule_image_delete(
+          m_local_rados, m_local_pool_id, global_image_id);
         on_finish->complete(0);
       });
   }
index e95b19c97ff32088573fcb28fdfc2e4dd08ba4ac..dbede1ed0b5f83c32077ebbad5296371ce1e5c7f 100644 (file)
@@ -586,7 +586,7 @@ void PoolReplayer::handle_update(const std::string &mirror_uuid,
       dout(20) << "scheduling the deletion of init image: "
                << image_id.global_id << " (" << image_id.id << ")" << dendl;
       m_image_deleter->schedule_image_delete(m_local_rados, m_local_pool_id,
-                                             image_id.id, image_id.global_id);
+                                             image_id.global_id);
     }
     m_init_image_ids.clear();
   }