From bf86258020521a907be9f02eab620df8985eb572 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Tue, 15 Mar 2022 10:28:01 +0800 Subject: [PATCH] crimson/os/seastore: add depth parameter to FixedKVBtree::mapped_space_visitor_t Signed-off-by: Xuehan Xu --- src/crimson/os/seastore/btree/fixed_kv_btree.h | 18 ++++++++++++------ src/crimson/os/seastore/lba_manager.h | 2 +- .../lba_manager/btree/btree_lba_manager.cc | 2 +- src/crimson/os/seastore/transaction_manager.cc | 2 +- .../seastore/test_transaction_manager.cc | 2 +- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/crimson/os/seastore/btree/fixed_kv_btree.h b/src/crimson/os/seastore/btree/fixed_kv_btree.h index 19515b94b0f35..4b07b729cff0a 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_btree.h +++ b/src/crimson/os/seastore/btree/fixed_kv_btree.h @@ -58,7 +58,7 @@ public: using iterator_fut = base_iertr::future; using mapped_space_visitor_t = std::function< - void(paddr_t, extent_len_t)>; + void(paddr_t, extent_len_t, depth_t)>; class iterator { public: @@ -1108,7 +1108,10 @@ private: min_max_t::max ).si_then([this, visitor, &iter](InternalNodeRef root_node) { iter.get_internal(root.get_depth()).node = root_node; - if (visitor) (*visitor)(root_node->get_paddr(), root_node->get_length()); + if (visitor) (*visitor)( + root_node->get_paddr(), + root_node->get_length(), + root.get_depth()); return lookup_root_iertr::now(); }); } else { @@ -1117,9 +1120,12 @@ private: root.get_location(), min_max_t::min, min_max_t::max - ).si_then([visitor, &iter](LeafNodeRef root_node) { + ).si_then([visitor, &iter, this](LeafNodeRef root_node) { iter.leaf.node = root_node; - if (visitor) (*visitor)(root_node->get_paddr(), root_node->get_length()); + if (visitor) (*visitor)( + root_node->get_paddr(), + root_node->get_length(), + root.get_depth()); return lookup_root_iertr::now(); }); } @@ -1156,7 +1162,7 @@ private: auto node_iter = f(*node); assert(node_iter != node->end()); entry.pos = node_iter->get_offset(); - if (visitor) (*visitor)(node->get_paddr(), node->get_length()); + if (visitor) (*visitor)(node->get_paddr(), node->get_length(), depth); return seastar::now(); }); } @@ -1189,7 +1195,7 @@ private: iter.leaf.node = node; auto node_iter = f(*node); iter.leaf.pos = node_iter->get_offset(); - if (visitor) (*visitor)(node->get_paddr(), node->get_length()); + if (visitor) (*visitor)(node->get_paddr(), node->get_length(), 1); return seastar::now(); }); } diff --git a/src/crimson/os/seastore/lba_manager.h b/src/crimson/os/seastore/lba_manager.h index b898ed2cc64c5..122d0ada7af69 100644 --- a/src/crimson/os/seastore/lba_manager.h +++ b/src/crimson/os/seastore/lba_manager.h @@ -145,7 +145,7 @@ public: using scan_mapped_space_iertr = base_iertr; using scan_mapped_space_ret = scan_mapped_space_iertr::future<>; using scan_mapped_space_func_t = std::function< - void(paddr_t, extent_len_t)>; + void(paddr_t, extent_len_t, depth_t)>; virtual scan_mapped_space_ret scan_mapped_space( Transaction &t, scan_mapped_space_func_t &&f) = 0; diff --git a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc index 287ee7b45a227..d4bebf764f3b0 100644 --- a/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc +++ b/src/crimson/os/seastore/lba_manager/btree/btree_lba_manager.cc @@ -406,7 +406,7 @@ BtreeLBAManager::scan_mapped_space_ret BtreeLBAManager::scan_mapped_space( interruptible::ready_future_marker{}, seastar::stop_iteration::yes); } - visitor(pos.get_val().paddr, pos.get_val().len); + visitor(pos.get_val().paddr, pos.get_val().len, 0); return LBABtree::iterate_repeat_ret_inner( interruptible::ready_future_marker{}, seastar::stop_iteration::no); diff --git a/src/crimson/os/seastore/transaction_manager.cc b/src/crimson/os/seastore/transaction_manager.cc index 795dc29e572ed..6977c716d507b 100644 --- a/src/crimson/os/seastore/transaction_manager.cc +++ b/src/crimson/os/seastore/transaction_manager.cc @@ -117,7 +117,7 @@ TransactionManager::mount_ertr::future<> TransactionManager::mount() *segment_cleaner->get_empty_space_tracker())); return lba_manager->scan_mapped_space( t, - [this, FNAME, &t](paddr_t addr, extent_len_t len) { + [this, FNAME, &t](paddr_t addr, extent_len_t len, depth_t depth) { TRACET( "marking {}~{} used", t, diff --git a/src/test/crimson/seastore/test_transaction_manager.cc b/src/test/crimson/seastore/test_transaction_manager.cc index 43d3367037865..ad3de7dc39753 100644 --- a/src/test/crimson/seastore/test_transaction_manager.cc +++ b/src/test/crimson/seastore/test_transaction_manager.cc @@ -390,7 +390,7 @@ struct transaction_manager_test_t : [this, &tracker](auto &t) { return lba_manager->scan_mapped_space( t, - [&tracker](auto offset, auto len) { + [&tracker](auto offset, auto len, depth_t) { tracker->allocate( offset.as_seg_paddr().get_segment_id(), offset.as_seg_paddr().get_segment_off(), -- 2.39.5