]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
librbd: link group snapshot when creating non-primary snapshot
authorMykola Golub <mgolub@suse.com>
Fri, 19 Mar 2021 14:37:17 +0000 (14:37 +0000)
committerIlya Dryomov <idryomov@gmail.com>
Sun, 28 Sep 2025 18:24:59 +0000 (20:24 +0200)
Signed-off-by: Mykola Golub <mgolub@suse.com>
Signed-off-by: Prasanna Kumar Kalever <prasanna.kalever@redhat.com>
src/librbd/mirror/snapshot/CreateNonPrimaryRequest.cc
src/librbd/mirror/snapshot/CreateNonPrimaryRequest.h
src/librbd/mirror/snapshot/PromoteRequest.cc
src/test/librbd/mirror/snapshot/test_mock_CreateNonPrimaryRequest.cc
src/test/librbd/mirror/snapshot/test_mock_PromoteRequest.cc
src/test/rbd_mirror/image_replayer/snapshot/test_mock_Replayer.cc
src/tools/rbd_mirror/image_replayer/snapshot/Replayer.cc

index f7dbe405d50711d01c2f90f203c069db11ebabe0..60202b156c10d22c983792af16fa991539e200ca 100644 (file)
@@ -31,11 +31,15 @@ template <typename I>
 CreateNonPrimaryRequest<I>::CreateNonPrimaryRequest(
     I* 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)
+    int64_t group_pool_id, const std::string &group_id,
+    const std::string &group_snap_id, const ImageState &image_state,
+    uint64_t *snap_id, Context *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) {
+    m_group_pool_id(group_pool_id), m_group_id(group_id),
+    m_group_snap_id(group_snap_id), m_image_state(image_state),
+    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("");
 }
@@ -190,6 +194,8 @@ void CreateNonPrimaryRequest<I>::create_snapshot() {
     ns.mirror_peer_uuids = m_mirror_peer_uuids;
   }
   ns.snap_seqs = m_snap_seqs;
+  ns.group_spec = {m_group_id, m_group_pool_id};
+  ns.group_snap_id = m_group_snap_id;
   ns.complete = is_orphan();
   ldout(cct, 15) << "ns=" << ns << dendl;
 
index 36f155413c60923138252803fdcd2c2ea013f6b6..17d97f2d5ec6cfe23581e76056c5dd515bfffb1e 100644 (file)
@@ -30,12 +30,16 @@ public:
                                          const std::string &primary_mirror_uuid,
                                          uint64_t primary_snap_id,
                                          const SnapSeqs& snap_seqs,
+                                         int64_t group_pool_id,
+                                         const std::string &group_id,
+                                         const std::string &group_snap_id,
                                          const ImageState &image_state,
                                          uint64_t *snap_id,
                                          Context *on_finish) {
     return new CreateNonPrimaryRequest(image_ctx, demoted, primary_mirror_uuid,
-                                       primary_snap_id, snap_seqs, image_state,
-                                       snap_id, on_finish);
+                                       primary_snap_id, snap_seqs,
+                                       group_pool_id, group_id, group_snap_id,
+                                       image_state, snap_id, on_finish);
   }
 
   CreateNonPrimaryRequest(ImageCtxT *image_ctx,
@@ -43,6 +47,9 @@ public:
                           const std::string &primary_mirror_uuid,
                           uint64_t primary_snap_id,
                           const SnapSeqs& snap_seqs,
+                          int64_t group_pool_id,
+                          const std::string &group_id,
+                          const std::string &group_snap_id,
                           const ImageState &image_state, uint64_t *snap_id,
                           Context *on_finish);
 
@@ -76,11 +83,14 @@ 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;
+  const bool m_demoted;
+  const std::string m_primary_mirror_uuid;
+  const uint64_t m_primary_snap_id;
+  const SnapSeqs m_snap_seqs;
+  const int64_t m_group_pool_id;
+  const std::string m_group_id;
+  const std::string m_group_snap_id;
+  const ImageState m_image_state;
   uint64_t *m_snap_id;
   Context *m_on_finish;
 
index 068c96a307dfb8ecca962d8421b509b942462531..eb2858cb4a27bb0a09a20300baf7dd0a3f6318d5 100644 (file)
@@ -62,7 +62,7 @@ void PromoteRequest<I>::create_orphan_snapshot() {
     &PromoteRequest<I>::handle_create_orphan_snapshot>(this);
 
   auto req = CreateNonPrimaryRequest<I>::create(
-    m_image_ctx, false, "", CEPH_NOSNAP, {}, {}, nullptr, ctx);
+    m_image_ctx, false, "", CEPH_NOSNAP, {}, -1, {}, {}, {}, nullptr, ctx);
   req->send();
 }
 
index bba726149d82ebc06f0a40696f063e6e4d8c79aa..e73dd6d5c3b7c660be4f0249e0a27a67489a2612 100644 (file)
@@ -195,8 +195,8 @@ TEST_F(TestMockMirrorSnapshotCreateNonPrimaryRequest, Success) {
 
   C_SaferCond ctx;
   auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, false,
-                                             "mirror_uuid", 123, {{1, 2}}, {},
-                                             nullptr, &ctx);
+                                             "mirror_uuid", 123, {{1, 2}}, -1, {},
+                                             {}, {}, nullptr, &ctx);
   req->send();
   ASSERT_EQ(0, ctx.wait());
 }
@@ -227,8 +227,8 @@ TEST_F(TestMockMirrorSnapshotCreateNonPrimaryRequest, SuccessDemoted) {
 
   C_SaferCond ctx;
   auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, true,
-                                             "mirror_uuid", 123, {{1, 2}}, {},
-                                             nullptr, &ctx);
+                                             "mirror_uuid", 123, {{1, 2}}, -1,
+                                             {}, {}, {}, nullptr, &ctx);
   req->send();
   ASSERT_EQ(0, ctx.wait());
 }
@@ -247,8 +247,8 @@ TEST_F(TestMockMirrorSnapshotCreateNonPrimaryRequest, RefreshError) {
 
   C_SaferCond ctx;
   auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, false,
-                                             "mirror_uuid", 123, {{1, 2}}, {},
-                                             nullptr, &ctx);
+                                             "mirror_uuid", 123, {{1, 2}}, -1,
+                                             {}, {}, {}, nullptr, &ctx);
   req->send();
   ASSERT_EQ(-EINVAL, ctx.wait());
 }
@@ -270,8 +270,8 @@ TEST_F(TestMockMirrorSnapshotCreateNonPrimaryRequest, GetMirrorImageError) {
 
   C_SaferCond ctx;
   auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, false,
-                                             "mirror_uuid", 123, {{1, 2}}, {},
-                                             nullptr, &ctx);
+                                             "mirror_uuid", 123, {{1, 2}}, -1,
+                                             {}, {}, {}, nullptr, &ctx);
   req->send();
   ASSERT_EQ(-EINVAL, ctx.wait());
 }
@@ -295,8 +295,8 @@ TEST_F(TestMockMirrorSnapshotCreateNonPrimaryRequest, CanNotError) {
 
   C_SaferCond ctx;
   auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, false,
-                                             "mirror_uuid", 123, {{1, 2}}, {},
-                                             nullptr, &ctx);
+                                             "mirror_uuid", 123, {{1, 2}}, -1,
+                                             {}, {}, {}, nullptr, &ctx);
   req->send();
   ASSERT_EQ(-EINVAL, ctx.wait());
 }
@@ -322,8 +322,8 @@ TEST_F(TestMockMirrorSnapshotCreateNonPrimaryRequest, GetMirrorPeersError) {
 
   C_SaferCond ctx;
   auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, true,
-                                             "mirror_uuid", 123, {{1, 2}}, {},
-                                             nullptr, &ctx);
+                                             "mirror_uuid", 123, {{1, 2}}, -1,
+                                             {}, {}, {}, nullptr, &ctx);
   req->send();
   ASSERT_EQ(-EPERM, ctx.wait());
 }
@@ -348,8 +348,8 @@ TEST_F(TestMockMirrorSnapshotCreateNonPrimaryRequest, CreateSnapshotError) {
 
   C_SaferCond ctx;
   auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, false,
-                                             "mirror_uuid", 123, {{1, 2}}, {},
-                                             nullptr, &ctx);
+                                             "mirror_uuid", 123, {{1, 2}}, -1,
+                                             {}, {}, {}, nullptr, &ctx);
   req->send();
   ASSERT_EQ(-EINVAL, ctx.wait());
 }
@@ -377,8 +377,8 @@ TEST_F(TestMockMirrorSnapshotCreateNonPrimaryRequest, WriteImageStateError) {
 
   C_SaferCond ctx;
   auto req = new MockCreateNonPrimaryRequest(&mock_image_ctx, false,
-                                             "mirror_uuid", 123, {{1, 2}}, {},
-                                             nullptr, &ctx);
+                                             "mirror_uuid", 123, {{1, 2}}, -1,
+                                             {}, {}, {}, nullptr, &ctx);
   req->send();
   ASSERT_EQ(-EINVAL, ctx.wait());
 }
index 6dcde3d25f516b3175ea152c98d7ed7645579c14..3bb51dbfb3aec49a4e5874ea9f2226831c84959a 100644 (file)
@@ -95,6 +95,9 @@ struct CreateNonPrimaryRequest<MockTestImageCtx> {
                                          const std::string &primary_mirror_uuid,
                                          uint64_t primary_snap_id,
                                          SnapSeqs snap_seqs,
+                                         int64_t group_pool_id,
+                                         const std::string &group_id,
+                                         const std::string &group_snap_id,
                                          const ImageState &image_state,
                                          uint64_t *snap_id,
                                          Context *on_finish) {
index 21afa6d52bb552100d8b0c8f856d38e46205bea8..3d899300addbd7a905c70e631227fdcaa06f8a27 100644 (file)
@@ -161,6 +161,9 @@ struct CreateNonPrimaryRequest<MockTestImageCtx> {
                                          const std::string &primary_mirror_uuid,
                                          uint64_t primary_snap_id,
                                          const SnapSeqs& snap_seqs,
+                                         uint64_t local_group_pool_id,
+                                         const std::string &local_group_id,
+                                         const std::string &local_group_snap_id,
                                          const ImageState &image_state,
                                          uint64_t *snap_id,
                                          Context *on_finish) {
index 20fe59ebdf7d5741c87fcb9ecf9c89537294ad15..668f5a252989bc861a13350a13e7044f75e4b0da 100644 (file)
@@ -1008,7 +1008,8 @@ void Replayer<I>::create_non_primary_snapshot() {
   auto req = librbd::mirror::snapshot::CreateNonPrimaryRequest<I>::create(
     local_image_ctx, m_remote_mirror_snap_ns.is_demoted(),
     m_state_builder->remote_mirror_uuid, m_remote_snap_id_end,
-    m_local_mirror_snap_ns.snap_seqs, m_image_state, &m_local_snap_id_end, ctx);
+    m_local_mirror_snap_ns.snap_seqs, -1, {}, {}, m_image_state,
+    &m_local_snap_id_end, ctx);
   req->send();
 }