From: Jason Dillaman Date: Wed, 22 Apr 2020 15:42:17 +0000 (-0400) Subject: librbd: pass clean_since_snap_id to CreatePrimaryRequest X-Git-Tag: v15.2.2~44^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=dca8caa5e3068e07feefdb27a2e24bca1d8733be;p=ceph.git librbd: pass clean_since_snap_id to CreatePrimaryRequest This will be stored in the primary MirrorSnapshotNamespace for use by the rbd-mirror snapshot replayer. Signed-off-by: Jason Dillaman (cherry picked from commit 959d5e60d8a7eec96c71875cf69d1d4a7d80816d) --- diff --git a/src/librbd/api/Mirror.cc b/src/librbd/api/Mirror.cc index 29736034cb5e..902229d3fa08 100644 --- a/src/librbd/api/Mirror.cc +++ b/src/librbd/api/Mirror.cc @@ -1997,7 +1997,7 @@ int Mirror::image_snapshot_create(I *ictx, uint64_t *snap_id) { C_SaferCond on_finish; auto req = mirror::snapshot::CreatePrimaryRequest::create( - ictx, mirror_image.global_image_id, 0U, snap_id, &on_finish); + ictx, mirror_image.global_image_id, CEPH_NOSNAP, 0U, snap_id, &on_finish); req->send(); return on_finish.wait(); } diff --git a/src/librbd/mirror/EnableRequest.cc b/src/librbd/mirror/EnableRequest.cc index b99f9d71b306..1c6dcfe6766c 100644 --- a/src/librbd/mirror/EnableRequest.cc +++ b/src/librbd/mirror/EnableRequest.cc @@ -188,7 +188,7 @@ void EnableRequest::create_primary_snapshot() { EnableRequest, &EnableRequest::handle_create_primary_snapshot>(this); auto req = snapshot::CreatePrimaryRequest::create( - m_image_ctx, m_mirror_image.global_image_id, + m_image_ctx, m_mirror_image.global_image_id, CEPH_NOSNAP, snapshot::CREATE_PRIMARY_FLAG_IGNORE_EMPTY_PEERS, &m_snap_id, ctx); req->send(); } diff --git a/src/librbd/mirror/snapshot/CreatePrimaryRequest.cc b/src/librbd/mirror/snapshot/CreatePrimaryRequest.cc index 6c5cb5d9d50c..c9937e6a6548 100644 --- a/src/librbd/mirror/snapshot/CreatePrimaryRequest.cc +++ b/src/librbd/mirror/snapshot/CreatePrimaryRequest.cc @@ -27,10 +27,12 @@ using librbd::util::create_rados_callback; template CreatePrimaryRequest::CreatePrimaryRequest( - I *image_ctx, const std::string& global_image_id, uint32_t flags, - uint64_t *snap_id, Context *on_finish) + I *image_ctx, const std::string& global_image_id, + uint64_t clean_since_snap_id, uint32_t flags, uint64_t *snap_id, + Context *on_finish) : m_image_ctx(image_ctx), m_global_image_id(global_image_id), - m_flags(flags), m_snap_id(snap_id), m_on_finish(on_finish) { + m_clean_since_snap_id(clean_since_snap_id), m_flags(flags), + m_snap_id(snap_id), m_on_finish(on_finish) { m_default_ns_ctx.dup(m_image_ctx->md_ctx); m_default_ns_ctx.set_namespace(""); } @@ -111,7 +113,7 @@ void CreatePrimaryRequest::create_snapshot() { ((m_flags & CREATE_PRIMARY_FLAG_DEMOTED) != 0 ? cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY_DEMOTED : cls::rbd::MIRROR_SNAPSHOT_STATE_PRIMARY), - m_mirror_peer_uuids, "", CEPH_NOSNAP}; + m_mirror_peer_uuids, "", m_clean_since_snap_id}; CephContext *cct = m_image_ctx->cct; ldout(cct, 20) << "name=" << m_snap_name << ", " diff --git a/src/librbd/mirror/snapshot/CreatePrimaryRequest.h b/src/librbd/mirror/snapshot/CreatePrimaryRequest.h index 69c0ed447019..94e85c9d9d44 100644 --- a/src/librbd/mirror/snapshot/CreatePrimaryRequest.h +++ b/src/librbd/mirror/snapshot/CreatePrimaryRequest.h @@ -26,15 +26,18 @@ class CreatePrimaryRequest { public: static CreatePrimaryRequest *create(ImageCtxT *image_ctx, const std::string& global_image_id, + uint64_t clean_since_snap_id, uint32_t flags, uint64_t *snap_id, Context *on_finish) { - return new CreatePrimaryRequest(image_ctx, global_image_id, flags, snap_id, + return new CreatePrimaryRequest(image_ctx, global_image_id, + clean_since_snap_id, flags, snap_id, on_finish); } CreatePrimaryRequest(ImageCtxT *image_ctx, const std::string& global_image_id, - uint32_t flags, uint64_t *snap_id, Context *on_finish); + uint64_t clean_since_snap_id, uint32_t flags, + uint64_t *snap_id, Context *on_finish); void send(); @@ -64,6 +67,7 @@ private: ImageCtxT *m_image_ctx; std::string m_global_image_id; + uint64_t m_clean_since_snap_id; const uint32_t m_flags; uint64_t *m_snap_id; Context *m_on_finish; diff --git a/src/librbd/mirror/snapshot/DemoteRequest.cc b/src/librbd/mirror/snapshot/DemoteRequest.cc index 23cbd1d47976..17d157d41e17 100644 --- a/src/librbd/mirror/snapshot/DemoteRequest.cc +++ b/src/librbd/mirror/snapshot/DemoteRequest.cc @@ -72,7 +72,7 @@ void DemoteRequest::create_snapshot() { DemoteRequest, &DemoteRequest::handle_create_snapshot>(this); auto req = CreatePrimaryRequest::create( - m_image_ctx, m_global_image_id, + m_image_ctx, m_global_image_id, CEPH_NOSNAP, (snapshot::CREATE_PRIMARY_FLAG_IGNORE_EMPTY_PEERS | snapshot::CREATE_PRIMARY_FLAG_DEMOTED), nullptr, ctx); req->send(); diff --git a/src/librbd/mirror/snapshot/PromoteRequest.cc b/src/librbd/mirror/snapshot/PromoteRequest.cc index ef62c0813960..f9cf4b5b973d 100644 --- a/src/librbd/mirror/snapshot/PromoteRequest.cc +++ b/src/librbd/mirror/snapshot/PromoteRequest.cc @@ -295,7 +295,7 @@ void PromoteRequest::create_promote_snapshot() { &PromoteRequest::handle_create_promote_snapshot>(this); auto req = CreatePrimaryRequest::create( - m_image_ctx, m_global_image_id, + m_image_ctx, m_global_image_id, CEPH_NOSNAP, (snapshot::CREATE_PRIMARY_FLAG_IGNORE_EMPTY_PEERS | snapshot::CREATE_PRIMARY_FLAG_FORCE), nullptr, ctx); req->send(); diff --git a/src/test/librbd/mirror/snapshot/test_mock_CreatePrimaryRequest.cc b/src/test/librbd/mirror/snapshot/test_mock_CreatePrimaryRequest.cc index 6e69e8002563..a79bd0cc45ff 100644 --- a/src/test/librbd/mirror/snapshot/test_mock_CreatePrimaryRequest.cc +++ b/src/test/librbd/mirror/snapshot/test_mock_CreatePrimaryRequest.cc @@ -210,8 +210,8 @@ TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, Success) { expect_create_snapshot(mock_image_ctx, 0); C_SaferCond ctx; - auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", 0U, nullptr, - &ctx); + auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP, + 0U, nullptr, &ctx); req->send(); ASSERT_EQ(0, ctx.wait()); } @@ -231,8 +231,8 @@ TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, CanNotError) { expect_can_create_primary_snapshot(mock_utils, false, false, false); C_SaferCond ctx; - auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", 0U, nullptr, - &ctx); + auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP, + 0U, nullptr, &ctx); req->send(); ASSERT_EQ(-EINVAL, ctx.wait()); } @@ -255,8 +255,8 @@ TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, GetMirrorPeersError) { "mirror", "mirror uuid"}}, -EINVAL); C_SaferCond ctx; - auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", 0U, nullptr, - &ctx); + auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP, + 0U, nullptr, &ctx); req->send(); ASSERT_EQ(-EINVAL, ctx.wait()); } @@ -280,8 +280,8 @@ TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, CreateSnapshotError) { expect_create_snapshot(mock_image_ctx, -EINVAL); C_SaferCond ctx; - auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", 0U, nullptr, - &ctx); + auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP, + 0U, nullptr, &ctx); req->send(); ASSERT_EQ(-EINVAL, ctx.wait()); } @@ -315,8 +315,8 @@ TEST_F(TestMockMirrorSnapshotCreatePrimaryRequest, SuccessUnlinkPeer) { expect_unlink_peer(mock_image_ctx, mock_unlink_peer_request, snap_id, "uuid", 0); C_SaferCond ctx; - auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", 0U, nullptr, - &ctx); + auto req = new MockCreatePrimaryRequest(&mock_image_ctx, "gid", CEPH_NOSNAP, + 0U, nullptr, &ctx); req->send(); ASSERT_EQ(0, 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 3e1faf4873ec..0965ab4644be 100644 --- a/src/test/librbd/mirror/snapshot/test_mock_PromoteRequest.cc +++ b/src/test/librbd/mirror/snapshot/test_mock_PromoteRequest.cc @@ -122,6 +122,7 @@ struct CreatePrimaryRequest { static CreatePrimaryRequest* s_instance; static CreatePrimaryRequest *create(MockTestImageCtx *image_ctx, const std::string& global_image_id, + uint64_t clean_since_snap_id, uint32_t flags, uint64_t *snap_id, Context *on_finish) { ceph_assert(s_instance != nullptr); diff --git a/src/test/librbd/mirror/snapshot/test_mock_Utils.cc b/src/test/librbd/mirror/snapshot/test_mock_Utils.cc index d2374332a10c..410dc3eba723 100644 --- a/src/test/librbd/mirror/snapshot/test_mock_Utils.cc +++ b/src/test/librbd/mirror/snapshot/test_mock_Utils.cc @@ -8,7 +8,6 @@ #include "test/librbd/mock/MockOperations.h" #include "test/librados_test_stub/MockTestMemIoCtxImpl.h" #include "test/librados_test_stub/MockTestMemRadosClient.h" -#include "librbd/mirror/snapshot/CreatePrimaryRequest.h" #include "librbd/mirror/snapshot/UnlinkPeerRequest.h" #include "librbd/mirror/snapshot/Utils.h"