From: Xuehan Xu Date: Thu, 25 Jan 2024 07:05:33 +0000 (+0800) Subject: crimson/os/seastore/FixedKVBtree: return the iterator when removing mapping X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=c54eec799624fda633c4f8ad791ce5c7bf0656e2;p=ceph.git crimson/os/seastore/FixedKVBtree: return the iterator when removing mapping Signed-off-by: Xuehan Xu --- diff --git a/src/crimson/os/seastore/backref/btree_backref_manager.cc b/src/crimson/os/seastore/backref/btree_backref_manager.cc index 58b4ffd4c9a84..51bb4d116e529 100644 --- a/src/crimson/os/seastore/backref/btree_backref_manager.cc +++ b/src/crimson/os/seastore/backref/btree_backref_manager.cc @@ -526,7 +526,7 @@ BtreeBackrefManager::remove_mapping( return btree.remove( c, iter - ).si_then([ret] { + ).si_then([ret](auto) { return ret; }); }); diff --git a/src/crimson/os/seastore/btree/fixed_kv_btree.h b/src/crimson/os/seastore/btree/fixed_kv_btree.h index fa1691c8cdb04..9ce0a1a021a5d 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_btree.h +++ b/src/crimson/os/seastore/btree/fixed_kv_btree.h @@ -972,7 +972,7 @@ public: * @param iter [in] iterator to element to remove, must not be end */ using remove_iertr = base_iertr; - using remove_ret = remove_iertr::future<>; + using remove_ret = remove_iertr::future; remove_ret remove( op_context_t c, iterator iter) @@ -999,7 +999,21 @@ public: return handle_merge( c, ret - ); + ).si_then([&ret, c] { + if (ret.is_end()) { + if (ret.is_begin()) { + assert(ret.leaf.node->get_node_meta().is_root()); + return remove_iertr::make_ready_future(std::move(ret)); + } else { + return ret.handle_boundary(c, nullptr + ).si_then([&ret] { + return std::move(ret); + }); + } + } else { + return remove_iertr::make_ready_future(std::move(ret)); + } + }); }); } diff --git a/src/crimson/os/seastore/lba/btree_lba_manager.cc b/src/crimson/os/seastore/lba/btree_lba_manager.cc index b1313fcd26030..bfafba7af3354 100644 --- a/src/crimson/os/seastore/lba/btree_lba_manager.cc +++ b/src/crimson/os/seastore/lba/btree_lba_manager.cc @@ -884,7 +884,7 @@ BtreeLBAManager::_decref_intermediate( if (val.refcount == 0) { return btree.remove(c, iter - ).si_then([key, val] { + ).si_then([key, val](auto) { return ref_iertr::make_ready_future< update_mapping_ret_bare_t>(key, val); }); @@ -1070,7 +1070,7 @@ BtreeLBAManager::_update_mapping( return btree.remove( c, iter - ).si_then([addr, ret] { + ).si_then([addr, ret](auto) { return update_mapping_ret_bare_t(addr, ret); }); } else { diff --git a/src/test/crimson/seastore/test_btree_lba_manager.cc b/src/test/crimson/seastore/test_btree_lba_manager.cc index a74186ae25f0a..2d867211edfc0 100644 --- a/src/test/crimson/seastore/test_btree_lba_manager.cc +++ b/src/test/crimson/seastore/test_btree_lba_manager.cc @@ -363,7 +363,7 @@ struct lba_btree_test : btree_test_base { EXPECT_TRUE(iter.get_val().len == len); return btree.remove( get_op_context(t), iter - ); + ).discard_result(); }); }); }