]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/lba_manager: do full merge if the donor node is *AT* its minimum... 43977/head
authorXuehan Xu <xxhdx1985126@gmail.com>
Wed, 17 Nov 2021 01:10:59 +0000 (09:10 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Wed, 17 Nov 2021 01:22:21 +0000 (09:22 +0800)
Fixes: https://tracker.ceph.com/issues/53273
Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
src/crimson/os/seastore/lba_manager/btree/lba_btree.cc
src/crimson/os/seastore/lba_manager/btree/lba_btree_node.h

index ed9d4f5ed3e51140df3123a331afafbc43971801..2d1a7aba64dc938cc5e3a25dfbacb893aa1bc3b5 100644 (file)
@@ -675,7 +675,7 @@ LBABtree::handle_merge_ret merge_level(
     auto [liter, riter] = donor_is_left ?
       std::make_pair(donor_iter, iter) : std::make_pair(iter, donor_iter);
 
-    if (donor->below_min_capacity()) {
+    if (donor->at_min_capacity()) {
       auto replacement = l->make_full_merge(c, r);
 
       parent_pos.node->update(
index 09a9a1f44c665068f3cadf41052b9ee03bf6cd7e..7f5c97c8893dfd72102d20eccf737ec2f040e45a 100644 (file)
@@ -322,6 +322,11 @@ struct LBAInternalNode
     return get_size() == get_capacity();
   }
 
+  bool at_min_capacity() const {
+    assert(get_size() >= (get_min_capacity() - 1));
+    return get_size() <= get_min_capacity();
+  }
+
   bool below_min_capacity() const {
     assert(get_size() >= (get_min_capacity() - 1));
     return get_size() < get_min_capacity();
@@ -545,6 +550,11 @@ struct LBALeafNode
     return get_size() == get_capacity();
   }
 
+  bool at_min_capacity() const {
+    assert(get_size() >= (get_min_capacity() - 1));
+    return get_size() <= get_min_capacity();
+  }
+
   bool below_min_capacity() const {
     assert(get_size() >= (get_min_capacity() - 1));
     return get_size() < get_min_capacity();