From 5fc980e4e263be4645e127c2c0c01542da556935 Mon Sep 17 00:00:00 2001 From: Igor Fedotov Date: Wed, 10 Jan 2024 19:28:13 +0300 Subject: [PATCH] test/store_test: get rid off explicit offset specifications in shared blob repair test case. Signed-off-by: Igor Fedotov (cherry picked from commit 482e5b85f08a07200c1f18db509b6b0f2ebcf3e6) --- src/os/bluestore/BlueStore.cc | 6 ++++++ src/os/bluestore/BlueStore.h | 2 ++ src/test/objectstore/store_test.cc | 21 +++++++++++++++++---- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index d3f98fa6cc37..208d95f00260 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -10120,6 +10120,12 @@ out_scan: return repair ? errors + warnings - (int)repaired : errors; } +int BlueStore::get_shared_blob(const string& key, + bufferlist& bl) +{ + return db->get(PREFIX_SHARED_BLOB, key, &bl); +}; + /// methods to inject various errors fsck can repair void BlueStore::inject_broken_shared_blob_key(const string& key, const bufferlist& bl) diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 7f20f3eaefc2..ca792a0a8552 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -3285,6 +3285,8 @@ public: } /// methods to inject various errors fsck can repair + int get_shared_blob(const std::string& key, + ceph::buffer::list& bl); void inject_broken_shared_blob_key(const std::string& key, const ceph::buffer::list& bl); void inject_no_shared_blob_key(); diff --git a/src/test/objectstore/store_test.cc b/src/test/objectstore/store_test.cc index a4172c8268f2..3b31ac0b54a5 100644 --- a/src/test/objectstore/store_test.cc +++ b/src/test/objectstore/store_test.cc @@ -9766,13 +9766,26 @@ TEST_P(StoreTestSpecificAUSize, BluestoreRepairSharedBlobTest) { bstore->umount(); bstore->mount(); { + bufferlist bl; string key; _key_encode_u64(1, &key); bluestore_shared_blob_t sb(1); - sb.ref_map.get(0x822000, block_size); - sb.ref_map.get(0x824000, block_size); - sb.ref_map.get(0x824000, block_size); - bufferlist bl; + int r = bstore->get_shared_blob(key, bl); + ASSERT_EQ(r, 0); + decode(sb, bl); + cout << sb.ref_map << std::endl; + ASSERT_EQ(sb.ref_map.ref_map.size(), 2); + auto it = sb.ref_map.ref_map.begin(); + ASSERT_EQ(it->second.refs, 1); + ASSERT_EQ(it->second.length, block_size); + it++; + ASSERT_EQ(it->second.refs, 1); + ASSERT_EQ(it->second.length, block_size); + + sb.ref_map.get(it->first, block_size); + cout << sb.ref_map << std::endl; + + bl.clear(); encode(sb, bl); bstore->inject_broken_shared_blob_key(key, bl); } -- 2.47.3