]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/onode-staged-tree: validate insertion in a separate transaction
authorYingxin Cheng <yingxin.cheng@intel.com>
Wed, 23 Dec 2020 03:03:50 +0000 (11:03 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Thu, 24 Dec 2020 03:45:48 +0000 (11:45 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/onode_manager/staged-fltree/tree_utils.h
src/test/crimson/seastore/onode_tree/test_staged_fltree.cc
src/tools/crimson/perf_staged_fltree.cc

index fb61abef3543f68534494de4119e74a1f2de5565..4bbcd97b7a1f27c8416322b9f17a258c2ab67d4a 100644 (file)
@@ -294,6 +294,26 @@ class TreeBuilder {
     });
   }
 
+  future<> validate(Transaction& t) {
+    logger().info("Verifing insertion ...");
+    return seastar::do_with(
+        kvs.begin(), [&t, this] (auto& kvs_iter) {
+      return crimson::do_until([&t, this, &kvs_iter]() -> future<bool> {
+        if (kvs_iter.is_end()) {
+          logger().info("Verify done!");
+          return ertr::make_ready_future<bool>(true);
+        }
+        auto [k, v] = kvs_iter.get_kv();
+        return tree.lower_bound(t, k
+        ).safe_then([&kvs_iter, k=k, v=v] (auto cursor) {
+          Onodes::validate_cursor(cursor, k, *v);
+          ++kvs_iter;
+          return ertr::make_ready_future<bool>(false);
+        });
+      });
+    });
+  }
+
  private:
   static seastar::logger& logger() {
     return crimson::get_logger(ceph_subsys_filestore);
index 52f488f8b49aa13c788f33053ac0623a592f49c9..bcc1c909da8c86960a0d52b97b2bf01ff46d1c01 100644 (file)
@@ -1191,6 +1191,11 @@ TEST_F(d_seastore_tm_test_t, 6_random_insert_leaf_node)
       tree->get_stats(*t).unsafe_get();
       tm->submit_transaction(std::move(t)).unsafe_get();
     }
+    {
+      // Note: tm->create_weak_transaction() can also work, but too slow.
+      auto t = tm->create_transaction();
+      tree->validate(*t).unsafe_get();
+    }
     tree.reset();
   });
 }
index 2e9315e9d385ea41e93a93436e15be65cde268ab..b8d16f6c45b9e59a872370b776924cb491d99a35 100644 (file)
@@ -47,6 +47,11 @@ class PerfTree : public TMTestState {
           tree->get_stats(*t).unsafe_get();
           tm->submit_transaction(std::move(t)).unsafe_get();
         }
+        {
+          // Note: tm->create_weak_transaction() can also work, but too slow.
+          auto t = tm->create_transaction();
+          tree->validate(*t).unsafe_get();
+        }
         tree.reset();
       });
     }).then([this] {