From 1bfdc84fd96fcc1efc92a28a20fe4dbe09f444a9 Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Wed, 20 May 2020 16:32:02 +0100 Subject: [PATCH] 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 --- src/librbd/Operations.cc | 6 +++--- src/librbd/Operations.h | 5 ++--- src/librbd/Types.h | 4 ++++ src/librbd/deep_copy/SnapshotCreateRequest.cc | 6 +++--- src/librbd/journal/Replay.cc | 2 +- src/librbd/operation/SnapshotCreateRequest.cc | 5 +++-- src/librbd/operation/SnapshotCreateRequest.h | 2 +- .../deep_copy/test_mock_SnapshotCreateRequest.cc | 3 ++- src/test/librbd/journal/test_mock_Replay.cc | 2 +- src/test/librbd/mock/MockOperations.h | 2 +- .../operation/test_mock_SnapshotCreateRequest.cc | 16 ++++++++-------- 11 files changed, 29 insertions(+), 24 deletions(-) diff --git a/src/librbd/Operations.cc b/src/librbd/Operations.cc index 43098d7764d6..ee401bb61bed 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 b1fbfe1dd66a..705d80273440 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 2e014b8b4764..42d605be7200 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 2674da3dd31a..ca22e5d1c03a 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 f5b30e57bb5f..9efeeae0b114 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 7c5f14244d86..38f489c408dc 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 544c04165c88..9f53399a9fb9 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 17ed8b71cf14..975aea937d86 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 37a5ce7536fb..c0c77517c538 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 ca30e55defe4..93fd2fa45027 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 c80f7627e6b8..cba2d5633e0c 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(); -- 2.47.3