public:
PerfTree(bool is_dummy) : is_dummy{is_dummy} {}
- seastar::future<> run(KVPool<test_item_t>& kvs) {
- return tm_setup().then([this, &kvs] {
- return seastar::async([this, &kvs] {
+ seastar::future<> run(KVPool<test_item_t>& kvs, double erase_ratio) {
+ return tm_setup().then([this, &kvs, erase_ratio] {
+ return seastar::async([this, &kvs, erase_ratio] {
auto tree = std::make_unique<TreeBuilder<TRACK, test_item_t>>(kvs,
(is_dummy ? NodeExtentManager::create_dummy(true)
: NodeExtentManager::create_seastore(*tm)));
logger().warn("submit_transaction() done! {}s", duration.count());
}
{
+ // Note: tm->create_weak_transaction() can also work, but too slow.
auto t = tm->create_transaction();
tree->get_stats(*t).unsafe_get();
+ tree->validate(*t).unsafe_get();
+ }
+ {
+ auto t = tm->create_transaction();
+ tree->erase(*t, kvs.size() * erase_ratio).unsafe_get();
tm->submit_transaction(std::move(t)).unsafe_get();
segment_cleaner->run_until_halt().get0();
}
{
- // Note: tm->create_weak_transaction() can also work, but too slow.
auto t = tm->create_transaction();
+ tree->get_stats(*t).unsafe_get();
tree->validate(*t).unsafe_get();
}
tree.reset();
ceph_assert(range1.size() == 2);
auto range0 = config["range0"].as<std::vector<unsigned>>();
ceph_assert(range0.size() == 2);
+ auto erase_ratio = config["erase-ratio"].as<double>();
+ ceph_assert(erase_ratio >= 0);
+ ceph_assert(erase_ratio <= 1);
auto kvs = KVPool<test_item_t>::create_raw_range(
str_sizes, onode_sizes,
{range1[0], range1[1]},
{range0[0], range0[1]});
PerfTree<TRACK> perf{is_dummy};
- perf.run(kvs).get0();
+ perf.run(kvs, erase_ratio).get0();
});
}
"range of ns-oid strings [a, b)")
("range0", bpo::value<std::vector<unsigned>>()->default_value(
{0, 4}),
- "range of snap-gen [a, b)");
+ "range of snap-gen [a, b)")
+ ("erase-ratio", bpo::value<double>()->default_value(
+ 0.8),
+ "erase-ratio of all the inserted onodes");
return app.run(argc, argv, [&app] {
auto&& config = app.configuration();
auto tracked = config["tracked"].as<bool>();