]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.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>
Wed, 30 Oct 2024 16:22:44 +0000 (16:22 +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 f7b2ffaaf0fe112fae68ddb29ff28b74a8ebbf3b..f26c63ca5ffb5f2740d4daf9c4bd9e4b3b126271 100644 (file)
@@ -11254,6 +11254,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 07690d54b0f7c1695e6e73ab60ec308e069994d9..d7086c6645c323290b4a7b221085cdf4b9c51045 100644 (file)
@@ -3375,6 +3375,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 486aa6be529c37f89ba66d9ee2fc4f4219d026e5..3ad072a5304a0d8eb85a4e20331a63234fa0cbb0 100644 (file)
@@ -9751,13 +9751,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);
   }