]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test/librbd: add unit test for flatten migration 57997/head
authorjunxiang Mu <1948535941@qq.com>
Wed, 11 Sep 2024 03:06:18 +0000 (11:06 +0800)
committerIlya Dryomov <idryomov@gmail.com>
Wed, 22 Jan 2025 08:55:34 +0000 (09:55 +0100)
Fixes: https://tracker.ceph.com/issues/65743
Co-authored-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: junxiang Mu <1948535941@qq.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
src/test/librbd/test_Migration.cc

index 8c0f4b61b21914a81ed0ae0b295ce3b5c4cc7c21..000cae6de8660f46baddb045e687a46e5f69328c 100644 (file)
@@ -330,6 +330,16 @@ struct TestMigration : public TestFixture {
     ASSERT_EQ(0, m_ictx->operations->resize(size, true, no_op));
   }
 
+  void test_children(bool have, std::string initial_image_name) {
+    std::vector<librbd::linked_image_spec_t> images;
+    librbd::ImageCtx *initial_ictx = nullptr;
+    open_image(m_ioctx, initial_image_name, &initial_ictx);
+    EXPECT_EQ(0, librbd::api::Image<>::snap_set(
+                initial_ictx, cls::rbd::UserSnapshotNamespace(), "snap"));
+    ASSERT_EQ(0, librbd::api::Image<>::list_children(initial_ictx, &images));
+    ASSERT_EQ(have, !images.empty());
+  }
+
   void test_no_snaps() {
     uint64_t len = (1 << m_ictx->order) * 2 + 1;
     write(0 * len, len, '1');
@@ -1051,16 +1061,41 @@ TEST_F(TestMigration, CloneUpdateAfterPrepare)
 {
   REQUIRE_FEATURE(RBD_FEATURE_LAYERING);
 
+  auto initial_image_name = m_image_name;
+
+  write(0, 10, 'X');
+  snap_create("snap");
+  clone("snap");
+
+  migration_prepare(m_ioctx, m_image_name);
+
+  write(0, 1, 'Y');
+
+  test_children(true, initial_image_name);
+  migration_execute(m_ioctx, m_image_name);
+  migration_commit(m_ioctx, m_image_name);
+  test_children(true, initial_image_name);
+}
+
+TEST_F(TestMigration, CloneFlatten)
+{
+  REQUIRE_FEATURE(RBD_FEATURE_LAYERING);
+
+  auto initial_image_name = m_image_name;
+
   write(0, 10, 'X');
   snap_create("snap");
   clone("snap");
 
+  ASSERT_EQ(0, m_opts.set(RBD_IMAGE_OPTION_FLATTEN, 1));
   migration_prepare(m_ioctx, m_image_name);
 
   write(0, 1, 'Y');
 
+  test_children(true, initial_image_name);
   migration_execute(m_ioctx, m_image_name);
   migration_commit(m_ioctx, m_image_name);
+  test_children(false, initial_image_name);
 }
 
 TEST_F(TestMigration, TriggerAssertSnapcSeq)