From: junxiang Mu <1948535941@qq.com> Date: Wed, 11 Sep 2024 03:06:18 +0000 (+0800) Subject: test/librbd: add unit test for flatten migration X-Git-Tag: v20.0.0~340^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F57997%2Fhead;p=ceph.git test/librbd: add unit test for flatten migration Fixes: https://tracker.ceph.com/issues/65743 Co-authored-by: Ilya Dryomov Signed-off-by: junxiang Mu <1948535941@qq.com> Signed-off-by: Ilya Dryomov --- diff --git a/src/test/librbd/test_Migration.cc b/src/test/librbd/test_Migration.cc index 8c0f4b61b21..000cae6de86 100644 --- a/src/test/librbd/test_Migration.cc +++ b/src/test/librbd/test_Migration.cc @@ -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 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)