From: Jason Dillaman Date: Fri, 7 Feb 2020 20:06:22 +0000 (-0500) Subject: librbd: tweak create non-primary mirror snapshot request X-Git-Tag: v15.1.1~350^2~8 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=89e37732f43e17c0163900529c3363f5400c3828;p=ceph-ci.git librbd: tweak create non-primary mirror snapshot request The replayer will need to pass in the demotion state as well as the snapshot sequences for the copied snapshots. Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/mirror/snapshot/CreateNonPrimaryRequest.cc b/src/librbd/mirror/snapshot/CreateNonPrimaryRequest.cc index 18a03964068..c70ae82d5be 100644 --- a/src/librbd/mirror/snapshot/CreateNonPrimaryRequest.cc +++ b/src/librbd/mirror/snapshot/CreateNonPrimaryRequest.cc @@ -119,8 +119,11 @@ void CreateNonPrimaryRequest::create_snapshot() { ldout(cct, 20) << dendl; cls::rbd::MirrorSnapshotNamespace ns{ - cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY, {}, + (m_demoted ? cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY_DEMOTED : + cls::rbd::MIRROR_SNAPSHOT_STATE_NON_PRIMARY), {}, m_primary_mirror_uuid, m_primary_snap_id}; + ns.snap_seqs = m_snap_seqs; + auto ctx = create_context_callback< CreateNonPrimaryRequest, &CreateNonPrimaryRequest::handle_create_snapshot>(this); diff --git a/src/librbd/mirror/snapshot/CreateNonPrimaryRequest.h b/src/librbd/mirror/snapshot/CreateNonPrimaryRequest.h index 2b0fb68cd27..4a711343980 100644 --- a/src/librbd/mirror/snapshot/CreateNonPrimaryRequest.h +++ b/src/librbd/mirror/snapshot/CreateNonPrimaryRequest.h @@ -6,6 +6,7 @@ #include "include/buffer.h" #include "cls/rbd/cls_rbd_types.h" +#include "librbd/Types.h" #include "librbd/mirror/snapshot/Types.h" #include @@ -24,24 +25,29 @@ template class CreateNonPrimaryRequest { public: static CreateNonPrimaryRequest *create(ImageCtxT *image_ctx, + bool demoted, const std::string &primary_mirror_uuid, uint64_t primary_snap_id, + const SnapSeqs& snap_seqs, const ImageState &image_state, uint64_t *snap_id, Context *on_finish) { - return new CreateNonPrimaryRequest(image_ctx, primary_mirror_uuid, - primary_snap_id, image_state, snap_id, - on_finish); + return new CreateNonPrimaryRequest(image_ctx, demoted, primary_mirror_uuid, + primary_snap_id, snap_seqs, image_state, + snap_id, on_finish); } CreateNonPrimaryRequest(ImageCtxT *image_ctx, + bool demoted, const std::string &primary_mirror_uuid, uint64_t primary_snap_id, + const SnapSeqs& snap_seqs, const ImageState &image_state, uint64_t *snap_id, Context *on_finish) - : m_image_ctx(image_ctx), m_primary_mirror_uuid(primary_mirror_uuid), - m_primary_snap_id(primary_snap_id), m_image_state(image_state), - m_snap_id(snap_id), m_on_finish(on_finish) { + : m_image_ctx(image_ctx), m_demoted(demoted), + m_primary_mirror_uuid(primary_mirror_uuid), + m_primary_snap_id(primary_snap_id), m_snap_seqs(snap_seqs), + m_image_state(image_state), m_snap_id(snap_id), m_on_finish(on_finish) { } void send(); @@ -71,8 +77,10 @@ private: */ ImageCtxT *m_image_ctx; + bool m_demoted; std::string m_primary_mirror_uuid; uint64_t m_primary_snap_id; + SnapSeqs m_snap_seqs; ImageState m_image_state; uint64_t *m_snap_id; Context *m_on_finish; diff --git a/src/librbd/mirror/snapshot/PromoteRequest.cc b/src/librbd/mirror/snapshot/PromoteRequest.cc index 347813f6a5c..418778ce038 100644 --- a/src/librbd/mirror/snapshot/PromoteRequest.cc +++ b/src/librbd/mirror/snapshot/PromoteRequest.cc @@ -59,8 +59,8 @@ void PromoteRequest::create_orphan_snapshot() { PromoteRequest, &PromoteRequest::handle_create_orphan_snapshot>(this); - auto req = CreateNonPrimaryRequest::create(m_image_ctx, "", CEPH_NOSNAP, - {}, nullptr, ctx); + auto req = CreateNonPrimaryRequest::create( + m_image_ctx, false, "", CEPH_NOSNAP, {}, {}, nullptr, ctx); req->send(); } diff --git a/src/test/librbd/mirror/snapshot/test_mock_CreateNonPrimaryRequest.cc b/src/test/librbd/mirror/snapshot/test_mock_CreateNonPrimaryRequest.cc index 29918c79316..25a85ce5319 100644 --- a/src/test/librbd/mirror/snapshot/test_mock_CreateNonPrimaryRequest.cc +++ b/src/test/librbd/mirror/snapshot/test_mock_CreateNonPrimaryRequest.cc @@ -172,8 +172,9 @@ TEST_F(TestMockMirrorSnapshotCreateNonPrimaryRequest, Success) { expect_write_image_state(mock_image_ctx, mock_write_image_state_request, 0); C_SaferCond ctx; - auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, "mirror_uuid", - 123, {}, nullptr, &ctx); + auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, false, + "mirror_uuid", 123, {{1, 2}}, {}, + nullptr, &ctx); req->send(); ASSERT_EQ(0, ctx.wait()); } @@ -191,8 +192,9 @@ TEST_F(TestMockMirrorSnapshotCreateNonPrimaryRequest, RefreshError) { expect_refresh_image(mock_image_ctx, true, -EINVAL); C_SaferCond ctx; - auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, "mirror_uuid", - 123, {}, nullptr, &ctx); + auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, false, + "mirror_uuid", 123, {{1, 2}}, {}, + nullptr, &ctx); req->send(); ASSERT_EQ(-EINVAL, ctx.wait()); } @@ -213,8 +215,9 @@ TEST_F(TestMockMirrorSnapshotCreateNonPrimaryRequest, GetMirrorImageError) { cls::rbd::MIRROR_IMAGE_STATE_ENABLED}, -EINVAL); C_SaferCond ctx; - auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, "mirror_uuid", - 123, {}, nullptr, &ctx); + auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, false, + "mirror_uuid", 123, {{1, 2}}, {}, + nullptr, &ctx); req->send(); ASSERT_EQ(-EINVAL, ctx.wait()); } @@ -237,8 +240,9 @@ TEST_F(TestMockMirrorSnapshotCreateNonPrimaryRequest, CanNotError) { expect_can_create_non_primary_snapshot(mock_utils, false); C_SaferCond ctx; - auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, "mirror_uuid", - 123, {}, nullptr, &ctx); + auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, false, + "mirror_uuid", 123, {{1, 2}}, {}, + nullptr, &ctx); req->send(); ASSERT_EQ(-EINVAL, ctx.wait()); } @@ -262,8 +266,9 @@ TEST_F(TestMockMirrorSnapshotCreateNonPrimaryRequest, CreateSnapshotError) { expect_create_snapshot(mock_image_ctx, -EINVAL); C_SaferCond ctx; - auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, "mirror_uuid", - 123, {}, nullptr, &ctx); + auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, false, + "mirror_uuid", 123, {{1, 2}}, {}, + nullptr, &ctx); req->send(); ASSERT_EQ(-EINVAL, ctx.wait()); } @@ -290,8 +295,9 @@ TEST_F(TestMockMirrorSnapshotCreateNonPrimaryRequest, WriteImageStateError) { -EINVAL); C_SaferCond ctx; - auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, "mirror_uuid", - 123, {}, nullptr, &ctx); + auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, false, + "mirror_uuid", 123, {{1, 2}}, {}, + nullptr, &ctx); req->send(); ASSERT_EQ(-EINVAL, ctx.wait()); } diff --git a/src/test/librbd/mirror/snapshot/test_mock_PromoteRequest.cc b/src/test/librbd/mirror/snapshot/test_mock_PromoteRequest.cc index 78954f183a5..2220d0e6424 100644 --- a/src/test/librbd/mirror/snapshot/test_mock_PromoteRequest.cc +++ b/src/test/librbd/mirror/snapshot/test_mock_PromoteRequest.cc @@ -89,8 +89,10 @@ struct CreateNonPrimaryRequest { Context* on_finish = nullptr; static CreateNonPrimaryRequest* s_instance; static CreateNonPrimaryRequest *create(MockTestImageCtx *image_ctx, + bool demoted, const std::string &primary_mirror_uuid, uint64_t primary_snap_id, + SnapSeqs snap_seqs, const ImageState &image_state, uint64_t *snap_id, Context *on_finish) {