]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/cache: add retire_absent_extent_addr() interface
authorXuehan Xu <xuxuehan@qianxin.com>
Thu, 9 May 2024 12:01:29 +0000 (20:01 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Fri, 17 May 2024 02:41:22 +0000 (10:41 +0800)
Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/os/seastore/cache.cc
src/crimson/os/seastore/cache.h

index 801ba356fbe4f65ad84d89d34f46ef00978dea96..bfe002bb2a509bd9146b4e44f3a9f193b6c2fe28 100644 (file)
@@ -104,6 +104,33 @@ Cache::retire_extent_ret Cache::retire_extent_addr(
   return retire_extent_iertr::now();
 }
 
+void Cache::retire_absent_extent_addr(
+  Transaction &t, paddr_t addr, extent_len_t length)
+{
+#ifndef NDEBUG
+  CachedExtentRef ext;
+  auto result = t.get_extent(addr, &ext);
+  assert(result != Transaction::get_extent_ret::PRESENT
+    && result != Transaction::get_extent_ret::RETIRED);
+  assert(!query_cache(addr, nullptr));
+#endif
+  LOG_PREFIX(Cache::retire_absent_extent_addr);
+  // add a new placeholder to Cache
+  ext = CachedExtent::make_cached_extent_ref<
+    RetiredExtentPlaceholder>(length);
+  ext->init(CachedExtent::extent_state_t::CLEAN,
+           addr,
+           PLACEMENT_HINT_NULL,
+           NULL_GENERATION,
+           TRANS_ID_NULL);
+  DEBUGT("retire {}~{} as placeholder, add extent -- {}",
+        t, addr, length, *ext);
+  const auto t_src = t.get_src();
+  add_extent(ext, &t_src);
+  t.add_to_read_set(ext);
+  t.add_to_retired_set(ext);
+}
+
 void Cache::dump_contents()
 {
   LOG_PREFIX(Cache::dump_contents);
index 0bf03abf6a9093a5b506f3057483695c5b405060..fb7f44b4ee1c11fa4e7b5db17e767fe1b3e38961 100644 (file)
@@ -246,6 +246,9 @@ public:
   retire_extent_ret retire_extent_addr(
     Transaction &t, paddr_t addr, extent_len_t length);
 
+  void retire_absent_extent_addr(
+    Transaction &t, paddr_t addr, extent_len_t length);
+
   /**
    * get_root
    *