]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/FixedKVBtree: return the iterator when removing mapping
authorXuehan Xu <xuxuehan@qianxin.com>
Thu, 25 Jan 2024 07:05:33 +0000 (15:05 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Tue, 1 Jul 2025 07:36:38 +0000 (15:36 +0800)
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/os/seastore/backref/btree_backref_manager.cc
src/crimson/os/seastore/btree/fixed_kv_btree.h
src/crimson/os/seastore/lba/btree_lba_manager.cc
src/test/crimson/seastore/test_btree_lba_manager.cc

index 58b4ffd4c9a84fed63f691046647102fa7862928..51bb4d116e5293d42302dd7160312540b369b9ef 100644 (file)
@@ -526,7 +526,7 @@ BtreeBackrefManager::remove_mapping(
        return btree.remove(
          c,
          iter
-       ).si_then([ret] {
+       ).si_then([ret](auto) {
          return ret;
        });
       });
index fa1691c8cdb04f4ec8c1cf550130f1bd99654642..9ce0a1a021a5dbe7420697d7f8d9763ed0b77d26 100644 (file)
@@ -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<iterator>;
   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<iterator>(std::move(ret));
+            } else {
+              return ret.handle_boundary(c, nullptr
+              ).si_then([&ret] {
+                return std::move(ret);
+              });
+            }
+          } else {
+            return remove_iertr::make_ready_future<iterator>(std::move(ret));
+          }
+        });
       });
   }
     
index b1313fcd260305a686d7ccf79254d89585ecb7fc..bfafba7af33546f2bc391978c81c11970fb531f1 100644 (file)
@@ -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 {
index a74186ae25f0a20694b821011accaed317224ffb..2d867211edfc010aafe031e25af143b8d36648a6 100644 (file)
@@ -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();
       });
     });
   }