From a5c9a884ac3dc10b02e319a3f528969cd9fd932e Mon Sep 17 00:00:00 2001 From: junxiang Mu <1948535941@qq.com> Date: Wed, 11 Sep 2024 11:06:18 +0800 Subject: [PATCH] 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 --- src/test/librbd/test_Migration.cc | 35 +++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/test/librbd/test_Migration.cc b/src/test/librbd/test_Migration.cc index 8c0f4b61b219..000cae6de866 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) -- 2.47.3