]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/cache: replay alloc info deltas
authorXuehan Xu <xxhdx1985126@gmail.com>
Tue, 15 Mar 2022 01:18:18 +0000 (09:18 +0800)
committerXuehan Xu <xxhdx1985126@gmail.com>
Sat, 7 May 2022 05:13:38 +0000 (13:13 +0800)
Signed-off-by: Xuehan Xu <xxhdx1985126@gmail.com>
src/crimson/os/seastore/cache.cc

index 453d144175706fe1bd1962a861e9a14cb13a33bc..cf0cce2d58d86005cc6dd83ae3ae93bad9e7e758 100644 (file)
@@ -1417,6 +1417,29 @@ Cache::replay_delta(
     root->set_last_modified(last_modified);
     add_extent(root);
     return replay_delta_ertr::now();
+  } else if (delta.type == extent_types_t::ALLOC_INFO) {
+    may_roll_backref_buffer(journal_seq.offset);
+    alloc_delta_t alloc_delta;
+    decode(alloc_delta, delta.bl);
+    std::vector<backref_buf_entry_ref> backref_list;
+    for (auto &alloc_blk : alloc_delta.alloc_blk_ranges) {
+      if (alloc_blk.paddr.is_relative()) {
+       assert(alloc_blk.paddr.is_record_relative());
+       alloc_blk.paddr = record_base.add_relative(alloc_blk.paddr);
+      }
+      DEBUG("replay alloc_blk {}~{} {}, journal_seq: {}",
+       alloc_blk.paddr, alloc_blk.len, alloc_blk.laddr, journal_seq);
+      backref_list.emplace_back(
+       std::make_unique<backref_buf_entry_t>(
+         alloc_blk.paddr,
+         alloc_blk.laddr,
+         alloc_blk.len,
+         alloc_blk.type,
+         journal_seq));
+    }
+    if (!backref_list.empty())
+      backref_batch_update(std::move(backref_list), journal_seq);
+    return replay_delta_ertr::now();
   } else {
     auto _get_extent_if_cached = [this](paddr_t addr)
       -> get_extent_ertr::future<CachedExtentRef> {