From a926a4a54cedc6e61510fb76bf1afadbcf9d7c0d Mon Sep 17 00:00:00 2001 From: Pere Diaz Bou Date: Wed, 10 Jul 2024 15:41:33 +0200 Subject: [PATCH] os/bluestore: assert CollectionRef count is 1 on umount Signed-off-by: Pere Diaz Bou --- src/os/bluestore/BlueStore.cc | 1 + src/test/objectstore/store_test.cc | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 4ecc7cc3a06..3140c68c18b 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 c14a5b02889..04de4c41147 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); } -- 2.47.3