]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: pass strict flag to bluestore_blob_use_tracker_t::equal() 15705/head
authorxie xingguo <xie.xingguo@zte.com.cn>
Thu, 22 Jun 2017 01:18:40 +0000 (09:18 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Thu, 29 Jun 2017 01:12:45 +0000 (09:12 +0800)
And if that flag is true, we'll do a strict equivalence comparison instead.

Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/os/bluestore/bluestore_types.cc
src/os/bluestore/bluestore_types.h
src/test/objectstore/test_bluestore_types.cc

index fdb14ebd86cbf5c8eeb01f4b8391b43ab243a098..cceefa83333db6de5c893b065e5b3bcf2acc5400 100644 (file)
@@ -488,7 +488,8 @@ void bluestore_blob_use_tracker_t::split(
 }
 
 bool bluestore_blob_use_tracker_t::equal(
-  const bluestore_blob_use_tracker_t& other) const
+  const bluestore_blob_use_tracker_t& other,
+  bool strict) const
 {
   if (!num_au && !other.num_au) {
     return total_bytes == other.total_bytes && au_size == other.au_size;
@@ -504,6 +505,10 @@ bool bluestore_blob_use_tracker_t::equal(
     return true;
   }
 
+  if (strict) {
+    return false;
+  }
+
   uint32_t n = num_au ? num_au : other.num_au;
   uint32_t referenced = 
     num_au ? other.get_referenced_bytes() : get_referenced_bytes();
index 654246fa6b91d30567309a758483984d32ec3cd6..1ba3467b6a97b50dd84c3a20afc3a1fefdc3088b 100644 (file)
@@ -421,7 +421,8 @@ struct bluestore_blob_use_tracker_t {
     bluestore_blob_use_tracker_t* r);
 
   bool equal(
-    const bluestore_blob_use_tracker_t& other) const;
+    const bluestore_blob_use_tracker_t& other,
+    bool strict = true) const;
     
   void bound_encode(size_t& p) const {
     denc_varint(au_size, p);
index 39c3918043ad7a54cae9cbf33c903838cd597770..0db8c258562d9f2e74b923ec9fe3d957844d6735 100644 (file)
@@ -1489,7 +1489,43 @@ TEST(GarbageCollector, BasicTest)
     em.clear();
     old_extents.clear();
   }
- }
+}
+
+TEST(bluestore_blob_use_tracker_t, equal)
+{
+  bluestore_blob_use_tracker_t t1, t2, t3;
+
+  ASSERT_TRUE(t1.equal(t2));
+  ASSERT_TRUE(t1.equal(t2, false));
+
+  t1.init(0x8000, 0x1000);
+  t2.init(0x8000, 0x1000);
+  ASSERT_TRUE(t1.equal(t2));
+  ASSERT_TRUE(t1.equal(t2, false));
+
+  t1.get(0, 0x1000);
+  ASSERT_TRUE(!t1.equal(t2));
+  ASSERT_TRUE(!t1.equal(t2, false));
+  t2.get(0, 0x1000);
+  ASSERT_TRUE(t1.equal(t2));
+  ASSERT_TRUE(t1.equal(t2, false));
+
+  t1.get(0x1000, 0x1000);
+  t2.get(0x2000, 0x1000);
+  ASSERT_TRUE(!t1.equal(t2));
+  ASSERT_TRUE(!t1.equal(t2, false));
+
+  t3.init(0x8000, 0x8000);
+  t3.get(0x4000, 0x2000);
+  ASSERT_TRUE(!t3.equal(t1));
+  ASSERT_TRUE(t3.equal(t1, false));
+  ASSERT_TRUE(!t3.equal(t2));
+  ASSERT_TRUE(t3.equal(t2, false));
+
+  t1.clear();
+  t2.clear();
+  t3.clear();
+}
 
 int main(int argc, char **argv) {
   vector<const char*> args;