]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rbd-mirror: partial revert of 649b29d
authorJason Dillaman <dillaman@redhat.com>
Wed, 7 Jun 2017 14:06:59 +0000 (10:06 -0400)
committerJason Dillaman <dillaman@redhat.com>
Wed, 7 Jun 2017 19:33:51 +0000 (15:33 -0400)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/test/rbd_mirror/image_sync/test_mock_ImageCopyRequest.cc
src/tools/rbd_mirror/image_sync/ImageCopyRequest.cc

index 4fbf13c6b4fa93cbc8436f2d53b9044e9d04e09c..81c0ea931b15be48c0785e4e5ccc3920b2f2f947 100644 (file)
@@ -87,7 +87,6 @@ using ::testing::_;
 using ::testing::InSequence;
 using ::testing::Invoke;
 using ::testing::Return;
-using ::testing::ReturnNew;
 using ::testing::WithArg;
 using ::testing::InvokeWithoutArgs;
 
@@ -107,11 +106,6 @@ public:
     ASSERT_EQ(0, open_image(m_local_io_ctx, m_image_name, &m_local_image_ctx));
   }
 
-  void expect_start_op(librbd::MockExclusiveLock &mock_exclusive_lock) {
-    EXPECT_CALL(mock_exclusive_lock, start_op()).WillOnce(
-      ReturnNew<FunctionContext>([](int) {}));
-  }
-
   void expect_get_snap_id(librbd::MockTestImageCtx &mock_image_ctx) {
     EXPECT_CALL(mock_image_ctx, get_snap_id(_, _))
       .WillRepeatedly(Invoke([&mock_image_ctx](cls::rbd::SnapshotNamespace snap_namespace,
@@ -222,16 +216,12 @@ TEST_F(TestMockImageSyncImageCopyRequest, SimpleImage) {
   journal::MockJournaler mock_journaler;
   MockObjectCopyRequest mock_object_copy_request;
 
-  librbd::MockExclusiveLock mock_exclusive_lock;
-  mock_local_image_ctx.exclusive_lock = &mock_exclusive_lock;
-
   expect_get_snap_id(mock_remote_image_ctx);
 
   InSequence seq;
   expect_get_object_count(mock_remote_image_ctx, 1);
   expect_get_object_count(mock_remote_image_ctx, 0);
   expect_update_client(mock_journaler, 0);
-  expect_start_op(mock_exclusive_lock);
   expect_object_copy_send(mock_object_copy_request);
   expect_update_client(mock_journaler, 0);
 
@@ -273,16 +263,11 @@ TEST_F(TestMockImageSyncImageCopyRequest, Throttled) {
   journal::MockJournaler mock_journaler;
   MockObjectCopyRequest mock_object_copy_request;
 
-  librbd::MockExclusiveLock mock_exclusive_lock;
-  mock_local_image_ctx.exclusive_lock = &mock_exclusive_lock;
-
   expect_get_snap_id(mock_remote_image_ctx);
 
   expect_get_object_count(mock_remote_image_ctx, object_count);
   expect_get_object_count(mock_remote_image_ctx, 0);
 
-  EXPECT_CALL(mock_exclusive_lock, start_op())
-    .Times(object_count).WillRepeatedly(ReturnNew<FunctionContext>([](int) {}));
   EXPECT_CALL(mock_object_copy_request, send()).Times(object_count);
 
   boost::optional<uint64_t> expected_object_number(boost::none);
@@ -341,9 +326,6 @@ TEST_F(TestMockImageSyncImageCopyRequest, SnapshotSubset) {
   journal::MockJournaler mock_journaler;
   MockObjectCopyRequest mock_object_copy_request;
 
-  librbd::MockExclusiveLock mock_exclusive_lock;
-  mock_local_image_ctx.exclusive_lock = &mock_exclusive_lock;
-
   expect_get_snap_id(mock_remote_image_ctx);
 
   InSequence seq;
@@ -352,7 +334,6 @@ TEST_F(TestMockImageSyncImageCopyRequest, SnapshotSubset) {
   expect_get_object_count(mock_remote_image_ctx, 1);
   expect_get_object_count(mock_remote_image_ctx, 1);
   expect_update_client(mock_journaler, 0);
-  expect_start_op(mock_exclusive_lock);
   expect_object_copy_send(mock_object_copy_request);
   expect_update_client(mock_journaler, 0);
 
@@ -383,9 +364,6 @@ TEST_F(TestMockImageSyncImageCopyRequest, RestartCatchup) {
   journal::MockJournaler mock_journaler;
   MockObjectCopyRequest mock_object_copy_request;
 
-  librbd::MockExclusiveLock mock_exclusive_lock;
-  mock_local_image_ctx.exclusive_lock = &mock_exclusive_lock;
-
   expect_get_snap_id(mock_remote_image_ctx);
 
   InSequence seq;
@@ -393,7 +371,6 @@ TEST_F(TestMockImageSyncImageCopyRequest, RestartCatchup) {
   expect_get_object_count(mock_remote_image_ctx, 0);
   expect_get_object_count(mock_remote_image_ctx, 0);
   expect_update_client(mock_journaler, 0);
-  expect_start_op(mock_exclusive_lock);
   expect_object_copy_send(mock_object_copy_request);
   expect_update_client(mock_journaler, 0);
 
@@ -421,16 +398,12 @@ TEST_F(TestMockImageSyncImageCopyRequest, RestartPartialSync) {
   journal::MockJournaler mock_journaler;
   MockObjectCopyRequest mock_object_copy_request;
 
-  librbd::MockExclusiveLock mock_exclusive_lock;
-  mock_local_image_ctx.exclusive_lock = &mock_exclusive_lock;
-
   expect_get_snap_id(mock_remote_image_ctx);
 
   InSequence seq;
   expect_get_object_count(mock_remote_image_ctx, 1);
   expect_get_object_count(mock_remote_image_ctx, 2);
   expect_update_client(mock_journaler, 0);
-  expect_start_op(mock_exclusive_lock);
   expect_object_copy_send(mock_object_copy_request);
   expect_update_client(mock_journaler, 0);
 
@@ -462,16 +435,12 @@ TEST_F(TestMockImageSyncImageCopyRequest, Cancel) {
   journal::MockJournaler mock_journaler;
   MockObjectCopyRequest mock_object_copy_request;
 
-  librbd::MockExclusiveLock mock_exclusive_lock;
-  mock_local_image_ctx.exclusive_lock = &mock_exclusive_lock;
-
   expect_get_snap_id(mock_remote_image_ctx);
 
   InSequence seq;
   expect_get_object_count(mock_remote_image_ctx, 2);
   expect_get_object_count(mock_remote_image_ctx, 2);
   expect_update_client(mock_journaler, 0);
-  expect_start_op(mock_exclusive_lock);
   expect_object_copy_send(mock_object_copy_request);
 
   C_SaferCond ctx;
@@ -512,16 +481,11 @@ TEST_F(TestMockImageSyncImageCopyRequest, Cancel_Inflight_Sync) {
   journal::MockJournaler mock_journaler;
   MockObjectCopyRequest mock_object_copy_request;
 
-  librbd::MockExclusiveLock mock_exclusive_lock;
-  mock_local_image_ctx.exclusive_lock = &mock_exclusive_lock;
-
   expect_get_snap_id(mock_remote_image_ctx);
 
   expect_get_object_count(mock_remote_image_ctx, 10);
   expect_get_object_count(mock_remote_image_ctx, 0);
 
-  EXPECT_CALL(mock_exclusive_lock, start_op())
-    .Times(6).WillRepeatedly(ReturnNew<FunctionContext>([](int) {}));
   EXPECT_CALL(mock_object_copy_request, send()).Times(6);
 
   EXPECT_CALL(mock_journaler, update_client(_, _))
@@ -565,9 +529,6 @@ TEST_F(TestMockImageSyncImageCopyRequest, Cancel1) {
   journal::MockJournaler mock_journaler;
   MockObjectCopyRequest mock_object_copy_request;
 
-  librbd::MockExclusiveLock mock_exclusive_lock;
-  mock_local_image_ctx.exclusive_lock = &mock_exclusive_lock;
-
   C_SaferCond ctx;
   MockImageCopyRequest *request = create_request(mock_remote_image_ctx,
                                                  mock_local_image_ctx,
@@ -598,9 +559,6 @@ TEST_F(TestMockImageSyncImageCopyRequest, MissingSnap) {
   librbd::MockTestImageCtx mock_local_image_ctx(*m_local_image_ctx);
   journal::MockJournaler mock_journaler;
 
-  librbd::MockExclusiveLock mock_exclusive_lock;
-  mock_local_image_ctx.exclusive_lock = &mock_exclusive_lock;
-
   expect_get_snap_id(mock_remote_image_ctx);
 
   C_SaferCond ctx;
@@ -624,9 +582,6 @@ TEST_F(TestMockImageSyncImageCopyRequest, MissingFromSnap) {
   librbd::MockTestImageCtx mock_local_image_ctx(*m_local_image_ctx);
   journal::MockJournaler mock_journaler;
 
-  librbd::MockExclusiveLock mock_exclusive_lock;
-  mock_local_image_ctx.exclusive_lock = &mock_exclusive_lock;
-
   expect_get_snap_id(mock_remote_image_ctx);
 
   C_SaferCond ctx;
@@ -652,9 +607,6 @@ TEST_F(TestMockImageSyncImageCopyRequest, EmptySnapMap) {
   librbd::MockTestImageCtx mock_local_image_ctx(*m_local_image_ctx);
   journal::MockJournaler mock_journaler;
 
-  librbd::MockExclusiveLock mock_exclusive_lock;
-  mock_local_image_ctx.exclusive_lock = &mock_exclusive_lock;
-
   expect_get_snap_id(mock_remote_image_ctx);
 
   C_SaferCond ctx;
@@ -680,9 +632,6 @@ TEST_F(TestMockImageSyncImageCopyRequest, EmptySnapSeqs) {
   librbd::MockTestImageCtx mock_local_image_ctx(*m_local_image_ctx);
   journal::MockJournaler mock_journaler;
 
-  librbd::MockExclusiveLock mock_exclusive_lock;
-  mock_local_image_ctx.exclusive_lock = &mock_exclusive_lock;
-
   expect_get_snap_id(mock_remote_image_ctx);
 
   C_SaferCond ctx;
index 6d3ec7af36c0601a2858e30d2e62a980bb0c182e..dbc2560acd0254188d9809f459d4599d017ad0f6 100644 (file)
@@ -7,7 +7,6 @@
 #include "common/errno.h"
 #include "common/Timer.h"
 #include "journal/Journaler.h"
-#include "librbd/ExclusiveLock.h"
 #include "librbd/Utils.h"
 #include "tools/rbd_mirror/ProgressContext.h"
 
@@ -142,7 +141,6 @@ void ImageCopyRequest<I>::send_object_copies() {
 
   bool complete;
   {
-    RWLock::RLocker owner_locker(m_local_image_ctx->owner_lock);
     Mutex::Locker locker(m_lock);
     for (int i = 0; i < cct->_conf->rbd_concurrent_management_ops; ++i) {
       send_next_object_copy();
@@ -174,7 +172,6 @@ void ImageCopyRequest<I>::send_object_copies() {
 
 template <typename I>
 void ImageCopyRequest<I>::send_next_object_copy() {
-  assert(m_local_image_ctx->owner_lock.is_locked());
   assert(m_lock.is_locked());
 
   if (m_canceled && m_ret_val == 0) {
@@ -192,20 +189,8 @@ void ImageCopyRequest<I>::send_next_object_copy() {
 
   ++m_current_ops;
 
-  Context *finish_op_ctx = nullptr;
-  if (m_local_image_ctx->exclusive_lock != nullptr) {
-    finish_op_ctx = m_local_image_ctx->exclusive_lock->start_op();
-  }
-  if (finish_op_ctx == nullptr) {
-    derr << ": lost exclusive lock" << dendl;
-    finish(-EROFS);
-    return;
-  }
-
-  auto ctx = new FunctionContext([this, finish_op_ctx](int r) {
-      handle_object_copy(r);
-      finish_op_ctx->complete(0);
-    });
+  Context *ctx = create_context_callback<
+    ImageCopyRequest<I>, &ImageCopyRequest<I>::handle_object_copy>(this);
   ObjectCopyRequest<I> *req = ObjectCopyRequest<I>::create(
     m_local_image_ctx, m_remote_image_ctx, &m_snap_map, ono, ctx);
   req->send();
@@ -218,7 +203,6 @@ void ImageCopyRequest<I>::handle_object_copy(int r) {
   int percent;
   bool complete;
   {
-    RWLock::RLocker owner_locker(m_local_image_ctx->owner_lock);
     Mutex::Locker locker(m_lock);
     assert(m_current_ops > 0);
     --m_current_ops;