]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/cache: replace backref_buf_t by backref_entry_refs_t
authorYingxin Cheng <yingxin.cheng@intel.com>
Wed, 3 Aug 2022 02:06:46 +0000 (10:06 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Fri, 5 Aug 2022 06:44:58 +0000 (14:44 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/backref/btree_backref_manager.cc
src/crimson/os/seastore/cache.cc
src/crimson/os/seastore/cache.h

index b82db7e3092a3f94e966c848ee7a1e0f43626b13..c0996272e81545abf344f85ca0e22168a767ad32 100644 (file)
@@ -228,32 +228,37 @@ BtreeBackrefManager::merge_cached_backrefs(
             seastar::stop_iteration::yes);
         }
         auto &seq = iter->first;
-        auto &backref_list = iter->second.br_list;
+        auto &backref_entry_refs = iter->second;
         LOG_PREFIX(BtreeBackrefManager::merge_cached_backrefs);
         DEBUGT("seq {}, limit {}, num_fresh_backref {}"
           , t, seq, limit, t.get_num_fresh_backref());
         if (seq <= limit && t.get_num_fresh_backref() * BACKREF_NODE_SIZE < max) {
           inserted_to = seq;
           return trans_intr::do_for_each(
-            backref_list,
-            [this, &t](auto &backref) {
+            backref_entry_refs,
+            [this, &t](auto &backref_entry_ref) {
             LOG_PREFIX(BtreeBackrefManager::merge_cached_backrefs);
-            if (backref.laddr != L_ADDR_NULL) {
+            auto &backref_entry = *backref_entry_ref;
+            if (backref_entry.laddr != L_ADDR_NULL) {
               DEBUGT("new mapping: {}~{} -> {}",
-                t, backref.paddr, backref.len, backref.laddr);
+                t,
+                backref_entry.paddr,
+                backref_entry.len,
+                backref_entry.laddr);
               return new_mapping(
                 t,
-                backref.paddr,
-                backref.len,
-                backref.laddr,
-                backref.type).si_then([](auto &&pin) {
+                backref_entry.paddr,
+                backref_entry.len,
+                backref_entry.laddr,
+                backref_entry.type).si_then([](auto &&pin) {
                 return seastar::now();
               });
             } else {
-              DEBUGT("remove mapping: {}", t, backref.paddr);
+              DEBUGT("remove mapping: {}", t, backref_entry.paddr);
               return remove_mapping(
                 t,
-                backref.paddr).si_then([](auto&&) {
+                backref_entry.paddr
+              ).si_then([](auto&&) {
                 return seastar::now();
               }).handle_error_interruptible(
                 crimson::ct_error::input_output_error::pass_further(),
index 47ba0363ef9916bb8aed69f30320504ff148a61a..f4d55d41a667bddc2153042e2c526464f2178b65 100644 (file)
@@ -1400,11 +1400,8 @@ void Cache::backref_batch_update(
   if (iter == backref_entryrefs_by_seq.end()) {
     backref_entryrefs_by_seq.emplace(seq, std::move(list));
   } else {
-    for (auto &ref : list) {
-      iter->second.br_list.push_back(*ref);
-    }
-    iter->second.backrefs.insert(
-      iter->second.backrefs.end(),
+    iter->second.insert(
+      iter->second.end(),
       std::make_move_iterator(list.begin()),
       std::make_move_iterator(list.end()));
   }
index c46f9e138fe5b2241379ac19c658b9cbe5de1a50..a06aa0bde6b9c3c3e9d2092498ff51aefda8222e 100644 (file)
@@ -74,13 +74,6 @@ struct backref_buf_entry_t {
       boost::intrusive::link_mode<
        boost::intrusive::auto_unlink>>;
   set_hook_t backref_set_hook;
-
-  using list_hook_t =
-    boost::intrusive::list_member_hook<
-      boost::intrusive::link_mode<
-       boost::intrusive::auto_unlink>>;
-  list_hook_t backref_buf_hook;
-
   using backref_set_member_options = boost::intrusive::member_hook<
     backref_buf_entry_t,
     set_hook_t,
@@ -90,14 +83,6 @@ struct backref_buf_entry_t {
     backref_set_member_options,
     boost::intrusive::constant_time_size<false>>;
 
-  using backref_list_member_options = boost::intrusive::member_hook<
-    backref_buf_entry_t,
-    list_hook_t,
-    &backref_buf_entry_t::backref_buf_hook>;
-  using list_t = boost::intrusive::list<
-    backref_buf_entry_t,
-    backref_list_member_options,
-    boost::intrusive::constant_time_size<false>>;
   struct cmp_t {
     using is_transparent = paddr_t;
     bool operator()(
@@ -116,22 +101,10 @@ struct backref_buf_entry_t {
 
 std::ostream &operator<<(std::ostream &out, const backref_buf_entry_t &ent);
 
-using backref_buf_entry_ref =
-  std::unique_ptr<backref_buf_entry_t>;
-
+using backref_buf_entry_ref = std::unique_ptr<backref_buf_entry_t>;
 using backref_set_t = backref_buf_entry_t::set_t;
-
-struct backref_buf_t {
-  backref_buf_t(std::vector<backref_buf_entry_ref> &&refs) : backrefs(std::move(refs)) {
-    for (auto &ref : backrefs) {
-      br_list.push_back(*ref);
-    }
-  }
-  std::vector<backref_buf_entry_ref> backrefs;
-  backref_buf_entry_t::list_t br_list;
-};
-
-using backref_entryrefs_by_seq_t = std::map<journal_seq_t, backref_buf_t>;
+using backref_entry_refs_t = std::vector<backref_buf_entry_ref>;
+using backref_entryrefs_by_seq_t = std::map<journal_seq_t, backref_entry_refs_t>;
 
 /**
  * Cache