]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
test/store_test: get rid off explicit offset specifications in shared 55130/head
authorIgor Fedotov <igor.fedotov@croit.io>
Wed, 10 Jan 2024 16:28:13 +0000 (19:28 +0300)
committerIgor Fedotov <igor.fedotov@croit.io>
Mon, 11 Mar 2024 13:14:36 +0000 (16:14 +0300)
blob repair test case.

Signed-off-by: Igor Fedotov <igor.fedotov@croit.io>
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h
src/test/objectstore/store_test.cc

index 724d27d9acda35d12b569c799610c54112db5215..27214300bb125c4990a0e3f43625add1b1873a3b 100644 (file)
@@ -10815,6 +10815,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 95c30307ab64b67e24bd5d07fb1d29c5a15e9fec..e21867be4d3bdd9ad1965c84deca76ff8289ded1 100644 (file)
@@ -3345,6 +3345,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 75fc4835638547c2d82053a78248e18307c14007..56127d45ca6d068d02f3660f02490b3f65f72f09 100644 (file)
@@ -9670,13 +9670,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);
   }