From 02f9ea4b3f9b99632c37ab2aba051e886779daec Mon Sep 17 00:00:00 2001 From: Jason Dillaman Date: Wed, 7 Jun 2017 10:06:59 -0400 Subject: [PATCH] rbd-mirror: partial revert of 649b29d Signed-off-by: Jason Dillaman --- .../image_sync/test_mock_ImageCopyRequest.cc | 51 ------------------- .../rbd_mirror/image_sync/ImageCopyRequest.cc | 20 +------- 2 files changed, 2 insertions(+), 69 deletions(-) diff --git a/src/test/rbd_mirror/image_sync/test_mock_ImageCopyRequest.cc b/src/test/rbd_mirror/image_sync/test_mock_ImageCopyRequest.cc index 4fbf13c6b4fa9..81c0ea931b15b 100644 --- a/src/test/rbd_mirror/image_sync/test_mock_ImageCopyRequest.cc +++ b/src/test/rbd_mirror/image_sync/test_mock_ImageCopyRequest.cc @@ -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([](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([](int) {})); EXPECT_CALL(mock_object_copy_request, send()).Times(object_count); boost::optional 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([](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; diff --git a/src/tools/rbd_mirror/image_sync/ImageCopyRequest.cc b/src/tools/rbd_mirror/image_sync/ImageCopyRequest.cc index 6d3ec7af36c06..dbc2560acd025 100644 --- a/src/tools/rbd_mirror/image_sync/ImageCopyRequest.cc +++ b/src/tools/rbd_mirror/image_sync/ImageCopyRequest.cc @@ -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::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::send_object_copies() { template void ImageCopyRequest::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::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, &ImageCopyRequest::handle_object_copy>(this); ObjectCopyRequest *req = ObjectCopyRequest::create( m_local_image_ctx, m_remote_image_ctx, &m_snap_map, ono, ctx); req->send(); @@ -218,7 +203,6 @@ void ImageCopyRequest::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; -- 2.39.5