]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
test/store_test: get rid off explicit offset specifications in shared
authorIgor Fedotov <igor.fedotov@croit.io>
Wed, 10 Jan 2024 16:28:13 +0000 (19:28 +0300)
committerAdam Kupczyk <akupczyk@ibm.com>
Fri, 17 Jan 2025 08:38:32 +0000 (08:38 +0000)
blob repair test case.

Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
(cherry picked from commit 482e5b85f08a07200c1f18db509b6b0f2ebcf3e6)

src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h
src/test/objectstore/store_test.cc

index d3f98fa6cc379fd9929388f6d5e129ccf32524a8..208d95f002603ed17a18ec9e8952ca611e2aa1a1 100644 (file)
@@ -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)
index 7f20f3eaefc232ae27148909d24fa37d499410b3..ca792a0a855214fc1987ba0a8c5fe0ce705a2044 100644 (file)
@@ -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();
index a4172c8268f25f067a7451c64aa9468ca2e54309..3b31ac0b54a5cc9b26f4745d4cf5d0f870a836c8 100644 (file)
@@ -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);
   }