Skip to content

Commit d10ca1a

Browse files
authored
Merge pull request ceph#58511 from pereman2/ch-umount
os/bluestore: assert CollectionRef count is 1 on umount
2 parents d6abf6d + 56feeb4 commit d10ca1a

File tree

3 files changed

+12
-0
lines changed

3 files changed

+12
-0
lines changed

src/os/bluestore/BlueStore.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18273,6 +18273,7 @@ void BlueStore::_shutdown_cache()
1827318273
}
1827418274
ceph_assert(p.second->onode_space.empty());
1827518275
ceph_assert(p.second->shared_blob_set.empty());
18276+
ceph_assert(p.second->get_nref() == 1);
1827618277
}
1827718278
coll_map.clear();
1827818279
for (auto i : onode_cache_shards) {

src/test/objectstore/store_test.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -517,6 +517,7 @@ TEST_P(StoreTest, SimpleRemount) {
517517
r = queue_transaction(store, ch, std::move(t));
518518
ASSERT_EQ(r, 0);
519519
}
520+
ch.reset();
520521
}
521522

522523
TEST_P(StoreTest, IORemount) {
@@ -3886,6 +3887,7 @@ TEST_P(StoreTest, BlueStoreUnshareBlobTest) {
38863887
ASSERT_EQ(r, 0);
38873888

38883889
{
3890+
ch.reset();
38893891
// this trims hoid one out of onode cache
38903892
EXPECT_EQ(store->umount(), 0);
38913893
EXPECT_EQ(store->mount(), 0);
@@ -3899,6 +3901,7 @@ TEST_P(StoreTest, BlueStoreUnshareBlobTest) {
38993901
ASSERT_EQ(r, 0);
39003902

39013903
{
3904+
ch.reset();
39023905
// this ensures remove operation submitted to kv store
39033906
EXPECT_EQ(store->umount(), 0);
39043907
EXPECT_EQ(store->mount(), 0);
@@ -3933,6 +3936,7 @@ TEST_P(StoreTest, BlueStoreUnshareBlobTest) {
39333936
r = queue_transaction(store, ch, std::move(t));
39343937
ASSERT_EQ(r, 0);
39353938
}
3939+
ch.reset();
39363940
}
39373941

39383942
TEST_P(StoreTest, BlueStoreUnshareBlobBugTest) {
@@ -3980,6 +3984,7 @@ TEST_P(StoreTest, BlueStoreUnshareBlobBugTest) {
39803984
ASSERT_EQ(r, 0);
39813985

39823986
{
3987+
ch.reset();
39833988
// this trims hoid one out of onode cache
39843989
EXPECT_EQ(store->umount(), 0);
39853990
EXPECT_EQ(store->mount(), 0);
@@ -10008,6 +10013,7 @@ TEST_P(StoreTestSpecificAUSize, BluestoreRepairTest) {
1000810013
bstore->inject_zombie_spanning_blob(cid, hoid4, 23457);
1000910014
}
1001010015

10016+
ch.reset(nullptr);
1001110017
bstore->umount();
1001210018
ASSERT_EQ(bstore->fsck(false), 1);
1001310019
ASSERT_LE(bstore->repair(false), 0);
@@ -10504,6 +10510,7 @@ TEST_P(StoreTest, BluestoreStrayOmapDetection)
1050410510
// inject stray omap
1050510511
bstore->inject_stray_omap(123456, "somename");
1050610512

10513+
ch.reset();
1050710514
bstore->umount();
1050810515
// check we detect injected stray omap..
1050910516

@@ -10544,6 +10551,7 @@ TEST_P(StoreTest, BluestorePerPoolOmapFixOnMount)
1054410551
bstore->inject_legacy_omap(cid, oid);
1054510552
bstore->inject_legacy_omap(cid, oid2);
1054610553

10554+
ch.reset();
1054710555
bstore->umount();
1054810556

1054910557
// check we injected an issue
@@ -10592,6 +10600,7 @@ TEST_P(StoreTest, BluestorePerPoolOmapFixOnMount)
1059210600
int r = queue_transaction(store, ch, std::move(t));
1059310601
ASSERT_EQ(r, 0);
1059410602
}
10603+
ch.reset();
1059510604
bstore->umount();
1059610605
// check omap's been fixed.
1059710606
ASSERT_EQ(bstore->fsck(false), 0); // this will fail without fix for #43824
@@ -10718,6 +10727,7 @@ TEST_P(StoreTest, SpuriousReadErrorTest) {
1071810727
r = queue_transaction(store, ch, std::move(t));
1071910728
ASSERT_EQ(r, 0);
1072010729
// force cache clear
10730+
ch.reset();
1072110731
EXPECT_EQ(store->umount(), 0);
1072210732
EXPECT_EQ(store->mount(), 0);
1072310733
}

src/tools/ceph_objectstore_tool.cc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4879,6 +4879,7 @@ int main(int argc, char **argv)
48794879
cout << ostr.str() << std::endl;
48804880
}
48814881

4882+
ch.reset(nullptr);
48824883
int r = mount_readonly ? fs->umount_readonly() : fs->umount();
48834884
if (r < 0) {
48844885
cerr << "umount failed: " << cpp_strerror(r) << std::endl;

0 commit comments

Comments
 (0)