From: Mykola Golub Date: Wed, 20 May 2020 15:32:02 +0000 (+0100) Subject: librbd: add flags param to Operations::execute_snap_create X-Git-Tag: v16.1.0~2202^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1bfdc84fd96fcc1efc92a28a20fe4dbe09f444a9;p=ceph.git librbd: add flags param to Operations::execute_snap_create and pass skip_object_map as a flag instead of a bool param. Signed-off-by: Mykola Golub --- diff --git a/src/librbd/Operations.cc b/src/librbd/Operations.cc index 43098d7764d..ee401bb61be 100644 --- a/src/librbd/Operations.cc +++ b/src/librbd/Operations.cc @@ -742,7 +742,7 @@ void Operations::snap_create(const cls::rbd::SnapshotNamespace &snap_namespac m_image_ctx, "snap_create", exclusive_lock::OPERATION_REQUEST_TYPE_GENERAL, true, boost::bind(&Operations::execute_snap_create, this, snap_namespace, snap_name, - _1, 0, false, boost::ref(*prog_ctx)), + _1, 0, 0, boost::ref(*prog_ctx)), boost::bind(&ImageWatcher::notify_snap_create, m_image_ctx.image_watcher, request_id, snap_namespace, snap_name, boost::ref(*prog_ctx), _1), @@ -755,7 +755,7 @@ void Operations::execute_snap_create(const cls::rbd::SnapshotNamespace &snap_ const std::string &snap_name, Context *on_finish, uint64_t journal_op_tid, - bool skip_object_map, + uint64_t flags, ProgressContext &prog_ctx) { ceph_assert(ceph_mutex_is_locked(m_image_ctx.owner_lock)); ceph_assert(m_image_ctx.exclusive_lock == nullptr || @@ -781,7 +781,7 @@ void Operations::execute_snap_create(const cls::rbd::SnapshotNamespace &snap_ operation::SnapshotCreateRequest *req = new operation::SnapshotCreateRequest( m_image_ctx, new C_NotifyUpdate(m_image_ctx, on_finish), - snap_namespace, snap_name, journal_op_tid, skip_object_map, prog_ctx); + snap_namespace, snap_name, journal_op_tid, flags, prog_ctx); req->send(); } diff --git a/src/librbd/Operations.h b/src/librbd/Operations.h index b1fbfe1dd66..705d8027344 100644 --- a/src/librbd/Operations.h +++ b/src/librbd/Operations.h @@ -54,9 +54,8 @@ public: void snap_create(const cls::rbd::SnapshotNamespace &snap_namespace, const std::string& snap_name, Context *on_finish); void execute_snap_create(const cls::rbd::SnapshotNamespace &snap_namespace, - const std::string &snap_name, - Context *on_finish, - uint64_t journal_op_tid, bool skip_object_map, + const std::string &snap_name, Context *on_finish, + uint64_t journal_op_tid, uint64_t flags, ProgressContext &prog_ctx); int snap_rollback(const cls::rbd::SnapshotNamespace& snap_namespace, diff --git a/src/librbd/Types.h b/src/librbd/Types.h index 2e014b8b476..42d605be720 100644 --- a/src/librbd/Types.h +++ b/src/librbd/Types.h @@ -99,6 +99,10 @@ enum ImageReadOnlyFlag { IMAGE_READ_ONLY_FLAG_NON_PRIMARY = 1 << 1, }; +enum SnapCreateFlag { + SNAP_CREATE_FLAG_SKIP_OBJECT_MAP = 1 << 0, +}; + struct MigrationInfo { int64_t pool_id = -1; std::string pool_namespace; diff --git a/src/librbd/deep_copy/SnapshotCreateRequest.cc b/src/librbd/deep_copy/SnapshotCreateRequest.cc index 2674da3dd31..ca22e5d1c03 100644 --- a/src/librbd/deep_copy/SnapshotCreateRequest.cc +++ b/src/librbd/deep_copy/SnapshotCreateRequest.cc @@ -81,9 +81,9 @@ void SnapshotCreateRequest::send_create_snap() { finish_op_ctx->complete(0); }); std::shared_lock owner_locker{m_dst_image_ctx->owner_lock}; - m_dst_image_ctx->operations->execute_snap_create(m_snap_namespace, - m_snap_name.c_str(), ctx, 0U, - true, m_prog_ctx); + m_dst_image_ctx->operations->execute_snap_create( + m_snap_namespace, m_snap_name.c_str(), ctx, 0U, + SNAP_CREATE_FLAG_SKIP_OBJECT_MAP, m_prog_ctx); } template diff --git a/src/librbd/journal/Replay.cc b/src/librbd/journal/Replay.cc index f5b30e57bb5..9efeeae0b11 100644 --- a/src/librbd/journal/Replay.cc +++ b/src/librbd/journal/Replay.cc @@ -42,7 +42,7 @@ struct ExecuteOp : public Context { image_ctx.operations->execute_snap_create(event.snap_namespace, event.snap_name, on_op_complete, - event.op_tid, false, + event.op_tid, 0, no_op_progress_callback); } diff --git a/src/librbd/operation/SnapshotCreateRequest.cc b/src/librbd/operation/SnapshotCreateRequest.cc index 7c5f14244d8..38f489c408d 100644 --- a/src/librbd/operation/SnapshotCreateRequest.cc +++ b/src/librbd/operation/SnapshotCreateRequest.cc @@ -30,11 +30,12 @@ SnapshotCreateRequest::SnapshotCreateRequest(I &image_ctx, const cls::rbd::SnapshotNamespace &snap_namespace, const std::string &snap_name, uint64_t journal_op_tid, - bool skip_object_map, + uint64_t flags, ProgressContext &prog_ctx) : Request(image_ctx, on_finish, journal_op_tid), m_snap_namespace(snap_namespace), m_snap_name(snap_name), - m_skip_object_map(skip_object_map), m_prog_ctx(prog_ctx) { + m_skip_object_map(flags & SNAP_CREATE_FLAG_SKIP_OBJECT_MAP), + m_prog_ctx(prog_ctx) { } template diff --git a/src/librbd/operation/SnapshotCreateRequest.h b/src/librbd/operation/SnapshotCreateRequest.h index 544c04165c8..9f53399a9fb 100644 --- a/src/librbd/operation/SnapshotCreateRequest.h +++ b/src/librbd/operation/SnapshotCreateRequest.h @@ -71,7 +71,7 @@ public: SnapshotCreateRequest(ImageCtxT &image_ctx, Context *on_finish, const cls::rbd::SnapshotNamespace &snap_namespace, const std::string &snap_name, uint64_t journal_op_tid, - bool skip_object_map, ProgressContext &prog_ctx); + uint64_t flags, ProgressContext &prog_ctx); protected: void send_op() override; diff --git a/src/test/librbd/deep_copy/test_mock_SnapshotCreateRequest.cc b/src/test/librbd/deep_copy/test_mock_SnapshotCreateRequest.cc index 17ed8b71cf1..975aea937d8 100644 --- a/src/test/librbd/deep_copy/test_mock_SnapshotCreateRequest.cc +++ b/src/test/librbd/deep_copy/test_mock_SnapshotCreateRequest.cc @@ -108,7 +108,8 @@ public: void expect_snap_create(librbd::MockTestImageCtx &mock_image_ctx, const std::string &snap_name, uint64_t snap_id, int r) { EXPECT_CALL(*mock_image_ctx.operations, - execute_snap_create(_, StrEq(snap_name), _, 0, true, _)) + execute_snap_create(_, StrEq(snap_name), _, 0, + SNAP_CREATE_FLAG_SKIP_OBJECT_MAP, _)) .WillOnce(DoAll(InvokeWithoutArgs([&mock_image_ctx, snap_id, snap_name]() { inject_snap(mock_image_ctx, snap_id, snap_name); }), diff --git a/src/test/librbd/journal/test_mock_Replay.cc b/src/test/librbd/journal/test_mock_Replay.cc index 37a5ce7536f..c0c77517c53 100644 --- a/src/test/librbd/journal/test_mock_Replay.cc +++ b/src/test/librbd/journal/test_mock_Replay.cc @@ -219,7 +219,7 @@ public: Context **on_finish, const char *snap_name, uint64_t op_tid) { EXPECT_CALL(*mock_image_ctx.operations, execute_snap_create(_, StrEq(snap_name), _, - op_tid, false, _)) + op_tid, 0, _)) .WillOnce(DoAll(SaveArg<2>(on_finish), NotifyInvoke(&m_invoke_lock, &m_invoke_cond))); } diff --git a/src/test/librbd/mock/MockOperations.h b/src/test/librbd/mock/MockOperations.h index ca30e55defe..93fd2fa4502 100644 --- a/src/test/librbd/mock/MockOperations.h +++ b/src/test/librbd/mock/MockOperations.h @@ -32,7 +32,7 @@ struct MockOperations { const std::string &snap_name, Context *on_finish, uint64_t journal_op_tid, - bool skip_object_map, + uint64_t flags, ProgressContext &prog_ctx)); MOCK_METHOD3(snap_remove, void(const cls::rbd::SnapshotNamespace &snap_namespace, const std::string &snap_name, diff --git a/src/test/librbd/operation/test_mock_SnapshotCreateRequest.cc b/src/test/librbd/operation/test_mock_SnapshotCreateRequest.cc index c80f7627e6b..cba2d5633e0 100644 --- a/src/test/librbd/operation/test_mock_SnapshotCreateRequest.cc +++ b/src/test/librbd/operation/test_mock_SnapshotCreateRequest.cc @@ -188,7 +188,7 @@ TEST_F(TestMockOperationSnapshotCreateRequest, Success) { librbd::NoOpProgressContext prog_ctx; MockSnapshotCreateRequest *req = new MockSnapshotCreateRequest( mock_image_ctx, &cond_ctx, cls::rbd::UserSnapshotNamespace(), - "snap1", 0, false, prog_ctx); + "snap1", 0, 0, prog_ctx); { std::shared_lock owner_locker{mock_image_ctx.owner_lock}; req->send(); @@ -211,7 +211,7 @@ TEST_F(TestMockOperationSnapshotCreateRequest, NotifyQuiesceError) { librbd::NoOpProgressContext prog_ctx; MockSnapshotCreateRequest *req = new MockSnapshotCreateRequest( mock_image_ctx, &cond_ctx, cls::rbd::UserSnapshotNamespace(), - "snap1", 0, false, prog_ctx); + "snap1", 0, 0, prog_ctx); { std::shared_lock owner_locker{mock_image_ctx.owner_lock}; req->send(); @@ -244,7 +244,7 @@ TEST_F(TestMockOperationSnapshotCreateRequest, AllocateSnapIdError) { librbd::NoOpProgressContext prog_ctx; MockSnapshotCreateRequest *req = new MockSnapshotCreateRequest( mock_image_ctx, &cond_ctx, cls::rbd::UserSnapshotNamespace(), - "snap1", 0, false, prog_ctx); + "snap1", 0, 0, prog_ctx); { std::shared_lock owner_locker{mock_image_ctx.owner_lock}; req->send(); @@ -286,7 +286,7 @@ TEST_F(TestMockOperationSnapshotCreateRequest, CreateSnapStale) { librbd::NoOpProgressContext prog_ctx; MockSnapshotCreateRequest *req = new MockSnapshotCreateRequest( mock_image_ctx, &cond_ctx, cls::rbd::UserSnapshotNamespace(), - "snap1", 0, false, prog_ctx); + "snap1", 0, 0, prog_ctx); { std::shared_lock owner_locker{mock_image_ctx.owner_lock}; req->send(); @@ -320,7 +320,7 @@ TEST_F(TestMockOperationSnapshotCreateRequest, CreateSnapError) { librbd::NoOpProgressContext prog_ctx; MockSnapshotCreateRequest *req = new MockSnapshotCreateRequest( mock_image_ctx, &cond_ctx, cls::rbd::UserSnapshotNamespace(), - "snap1", 0, false, prog_ctx); + "snap1", 0, 0, prog_ctx); { std::shared_lock owner_locker{mock_image_ctx.owner_lock}; req->send(); @@ -354,7 +354,7 @@ TEST_F(TestMockOperationSnapshotCreateRequest, ReleaseSnapIdError) { librbd::NoOpProgressContext prog_ctx; MockSnapshotCreateRequest *req = new MockSnapshotCreateRequest( mock_image_ctx, &cond_ctx, cls::rbd::UserSnapshotNamespace(), - "snap1", 0, false, prog_ctx); + "snap1", 0, 0, prog_ctx); { std::shared_lock owner_locker{mock_image_ctx.owner_lock}; req->send(); @@ -394,7 +394,7 @@ TEST_F(TestMockOperationSnapshotCreateRequest, SkipObjectMap) { librbd::NoOpProgressContext prog_ctx; MockSnapshotCreateRequest *req = new MockSnapshotCreateRequest( mock_image_ctx, &cond_ctx, cls::rbd::UserSnapshotNamespace(), - "snap1", 0, true, prog_ctx); + "snap1", 0, SNAP_CREATE_FLAG_SKIP_OBJECT_MAP, prog_ctx); { std::shared_lock owner_locker{mock_image_ctx.owner_lock}; req->send(); @@ -441,7 +441,7 @@ TEST_F(TestMockOperationSnapshotCreateRequest, SetImageState) { mock_image_ctx, &cond_ctx, cls::rbd::MirrorSnapshotNamespace{ cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY, {}, "", CEPH_NOSNAP}, - "snap1", 0, false, prog_ctx); + "snap1", 0, 0, prog_ctx); { std::shared_lock owner_locker{mock_image_ctx.owner_lock}; req->send();