]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
temp dev-lbc
authorXuehan Xu <xuxuehan@qianxin.com>
Wed, 27 May 2026 01:48:16 +0000 (09:48 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Fri, 29 May 2026 06:08:32 +0000 (14:08 +0800)
src/crimson/os/seastore/cached_extent.cc
src/crimson/os/seastore/lba/btree_lba_manager.cc
src/crimson/os/seastore/lba/lba_btree_node.h
src/crimson/os/seastore/transaction_manager.h

index 8ce636a580ad7fc66b963a46cac69394315c757b..e8242e0fc6ca1f6fd9058a5b9a7da2ea72460c24 100644 (file)
@@ -542,10 +542,14 @@ void ExtentCommitter::_share_prior_data_to_mutations() {
           if (it != merged.end()) {
             TRACE("{} -> {}, {} -> {}",
               me, mextent, (pladdr_t)buf.val.pladdr, it->second);
-            buf.val.pladdr = pladdr_le_t(it->second);
+            buf.val = lba::lba_map_val_le_t(it->second);
           }
         }
       });
+      // "me" is the actual prev of mextent, so before mextent enters
+      // the "prepare" pipeline phase, its last_committed_crc should be
+      // that of "me"'s
+      mextent.set_last_committed_crc(me.get_last_committed_crc());
     } else {
       auto &mextent = static_cast<CachedExtent&>(mext);
       TRACE("{} -> {}", extent, mextent);
@@ -553,6 +557,7 @@ void ExtentCommitter::_share_prior_data_to_mutations() {
         0, extent.get_length(), mextent.get_bptr().c_str());
       mextent.on_data_commit();
       mextent.reapply_delta();
+      mextent.set_last_committed_crc(extent.get_last_committed_crc());
     }
   }
 }
index e2993065391804937ec6d2ffb651f9259a475534..558d1f4d693447172074e855815f8c79712dac08 100644 (file)
@@ -303,7 +303,7 @@ BtreeLBAManager::promote_extent(
           t, iter.get_key(), new_val.shadow_paddr, paddr);
     assert(extent->is_pending());
     assert(!extent->has_parent_tracker());
-    iter = co_await btree.update(c, iter, new_val, extent);
+    iter = btree.update(c, iter, new_val, extent);
     assert(extent->has_parent_tracker());
   } else {
     auto insert_iter = co_await btree.remove(c, std::move(iter));
index 2d76d9233b8a24ab5706d5aea29000957e47467f..17b4daddca3cdd408906bd9b3d9fcf830db283a3 100644 (file)
@@ -153,8 +153,9 @@ struct LBALeafNode
     laddr_t pivot,
     lba_map_val_t val) {
     LOG_PREFIX(FixedKVInternalNode::replace);
+    assert(this->t != nullptr);
     SUBTRACE(seastore_fixedkv_tree, "trans.{}, pos {}, old key {}, key {}",
-      this->pending_for_transaction,
+      this->t->get_trans_id(),
       iter.get_offset(),
       iter.get_key(),
       pivot);
@@ -306,14 +307,14 @@ struct LBALeafNode
 
   std::ostream &print_detail(std::ostream &out) const final;
 
-  std::map<laddr_t, pladdr_t> merge_content_to(
+  std::map<laddr_t, lba_map_val_t> merge_content_to(
     Transaction &t,
     LBALeafNode &pending_version,
     iterator &iter)
   {
     LOG_PREFIX(LBALeafNode::merge_content_to);
     SUBTRACET(seastore_lba, "merging with {}", t, pending_version);
-    std::map<laddr_t, pladdr_t> modified;
+    std::map<laddr_t, lba_map_val_t> modified;
     auto it = pending_version.begin();
     while (it != pending_version.end() && iter != this->end()) {
       const auto &v1 = iter->get_val();
@@ -376,7 +377,7 @@ struct LBALeafNode
             m_v2.checksum = v1.checksum;
           }
           it->set_val(m_v2);
-          auto [_it, inserted] = modified.emplace(it->get_key(), paddr);
+          auto [_it, inserted] = modified.emplace(it->get_key(), m_v2);
           ceph_assert(inserted);
         }
         it++;
index eefba35366663de1b2ecd087e22d0e4e91723b14..95d389623eea4000b14e36768994282a46856793 100644 (file)
@@ -1567,7 +1567,6 @@ private:
               }
             );
           }
-
         }
       }
 
@@ -1591,6 +1590,25 @@ private:
         SUBTRACET(seastore_tm, "retire extent...", t);
         assert(extent->is_seen_by_users());
         cache->retire_extent(t, extent);
+        if (pin.has_shadow_val()) {
+          if (auto shadow = extent->get_shadow()) {
+            t.add_absent_to_retired_set(shadow);
+          } else {
+            auto laddr = pin.get_key();
+            cache->retire_absent_extent_addr_by_type(
+              t, laddr, pin.get_shadow_val(),
+              original_len, pin.get_extent_type(),
+              [laddr, extent](auto &ext) {
+                auto lextent = ext.template cast<LogicalChildNode>();
+                assert(ext.is_logical());
+                assert(!lextent->has_laddr());
+                assert(!ext.has_been_invalidated());
+                lextent->set_laddr(laddr);
+                extent->set_shadow(lextent);
+              }
+            );
+          }
+        }
       }
       for (auto &remap : remaps) {
         auto remap_offset = remap.offset;