From: Pere Diaz Bou Date: Wed, 10 Jul 2024 13:41:33 +0000 (+0200) Subject: os/bluestore: assert CollectionRef count is 1 on umount X-Git-Tag: v20.0.0~1331^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a926a4a54cedc6e61510fb76bf1afadbcf9d7c0d;p=ceph.git os/bluestore: assert CollectionRef count is 1 on umount Signed-off-by: Pere Diaz Bou --- diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 4ecc7cc3a062..3140c68c18bd 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -18246,6 +18246,7 @@ void BlueStore::_shutdown_cache() } ceph_assert(p.second->onode_space.empty()); ceph_assert(p.second->shared_blob_set.empty()); + ceph_assert(p.second->get_nref() == 1); } coll_map.clear(); for (auto i : onode_cache_shards) { diff --git a/src/test/objectstore/store_test.cc b/src/test/objectstore/store_test.cc index c14a5b02889b..04de4c411475 100644 --- a/src/test/objectstore/store_test.cc +++ b/src/test/objectstore/store_test.cc @@ -526,6 +526,7 @@ TEST_P(StoreTest, SimpleRemount) { r = queue_transaction(store, ch, std::move(t)); ASSERT_EQ(r, 0); } + ch.reset(); } TEST_P(StoreTest, IORemount) { @@ -3895,6 +3896,7 @@ TEST_P(StoreTest, BlueStoreUnshareBlobTest) { ASSERT_EQ(r, 0); { + ch.reset(); // this trims hoid one out of onode cache EXPECT_EQ(store->umount(), 0); EXPECT_EQ(store->mount(), 0); @@ -3908,6 +3910,7 @@ TEST_P(StoreTest, BlueStoreUnshareBlobTest) { ASSERT_EQ(r, 0); { + ch.reset(); // this ensures remove operation submitted to kv store EXPECT_EQ(store->umount(), 0); EXPECT_EQ(store->mount(), 0); @@ -3942,6 +3945,7 @@ TEST_P(StoreTest, BlueStoreUnshareBlobTest) { r = queue_transaction(store, ch, std::move(t)); ASSERT_EQ(r, 0); } + ch.reset(); } TEST_P(StoreTest, BlueStoreUnshareBlobBugTest) { @@ -3989,6 +3993,7 @@ TEST_P(StoreTest, BlueStoreUnshareBlobBugTest) { ASSERT_EQ(r, 0); { + ch.reset(); // this trims hoid one out of onode cache EXPECT_EQ(store->umount(), 0); EXPECT_EQ(store->mount(), 0); @@ -10325,6 +10330,7 @@ TEST_P(StoreTest, BluestoreStrayOmapDetection) // inject stray omap bstore->inject_stray_omap(123456, "somename"); + ch.reset(); bstore->umount(); // check we detect injected stray omap.. @@ -10365,6 +10371,7 @@ TEST_P(StoreTest, BluestorePerPoolOmapFixOnMount) bstore->inject_legacy_omap(cid, oid); bstore->inject_legacy_omap(cid, oid2); + ch.reset(); bstore->umount(); // check we injected an issue @@ -10413,6 +10420,7 @@ TEST_P(StoreTest, BluestorePerPoolOmapFixOnMount) int r = queue_transaction(store, ch, std::move(t)); ASSERT_EQ(r, 0); } + ch.reset(); bstore->umount(); // check omap's been fixed. ASSERT_EQ(bstore->fsck(false), 0); // this will fail without fix for #43824 @@ -10539,6 +10547,7 @@ TEST_P(StoreTest, SpuriousReadErrorTest) { r = queue_transaction(store, ch, std::move(t)); ASSERT_EQ(r, 0); // force cache clear + ch.reset(); EXPECT_EQ(store->umount(), 0); EXPECT_EQ(store->mount(), 0); }