]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: cleanups around omap_root_t
authorYingxin Cheng <yingxin.cheng@intel.com>
Wed, 11 Dec 2024 04:50:50 +0000 (12:50 +0800)
committermyoungwon oh <ohmyoungwon@gmail.com>
Sat, 1 Mar 2025 15:43:48 +0000 (15:43 +0000)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
Signed-off-by: Myoungwon Oh <ohmyoungwon@gmail.com>
src/crimson/os/seastore/seastore.cc
src/crimson/os/seastore/seastore.h

index 2ce07132168d2d9d259841b69362da8c7e634616..0413b81231e08ab4ab8c58289326112ab55c702a 100644 (file)
@@ -1280,8 +1280,10 @@ SeaStore::Shard::_get_attrs(
   LOG_PREFIX(SeaStoreS::_get_attrs);
   DEBUGT("...", t);
   auto& layout = onode.get_layout();
-  return do_omap_get_values(t, onode, std::nullopt,
-    onode.get_layout().xattr_root
+  auto root = onode.get_layout().xattr_root.get(
+    onode.get_metadata_hint(device->get_block_size()));
+  return do_omap_get_values(
+    t, onode, std::nullopt, std::move(root)
   ).si_then([&layout, &t, FNAME](auto p) {
     auto& attrs = std::get<1>(p);
     DEBUGT("got {} attrs, OI length=0x{:x}, SS length=0x{:x}",
@@ -1496,13 +1498,11 @@ SeaStore::Shard::_omap_get_values(
 SeaStore::Shard::omap_list_ret
 SeaStore::Shard::omap_list(
   Onode &onode,
-  const omap_root_le_t& _root,
+  omap_root_t&& root,
   Transaction& t,
   const std::optional<std::string>& start,
   OMapManager::omap_list_config_t config) const
 {
-  auto root = _root.get(
-    onode.get_metadata_hint(device->get_block_size()));
   if (root.is_null()) {
     return seastar::make_ready_future<omap_list_bare_ret>(
       true, omap_values_t{}
@@ -1524,7 +1524,7 @@ SeaStore::Shard::do_omap_get_values(
   Transaction& t,
   Onode& onode,
   const std::optional<std::string>& start,
-  const omap_root_le_t& root) const
+  omap_root_t&& root) const
 {
   LOG_PREFIX(SeaStoreS::do_omap_get_values);
   DEBUGT("start={} type={} ...", t, start.has_value() ? *start : "",
@@ -1532,7 +1532,7 @@ SeaStore::Shard::do_omap_get_values(
   auto config = OMapManager::omap_list_config_t()
     .with_inclusive(false, false)
     .without_max();
-  return omap_list(onode, root, t, start, config
+  return omap_list(onode, std::move(root), t, start, config
   ).si_then([FNAME, &t](omap_values_paged_t ret) {
     DEBUGT("got {} values, complete={}",
            t, std::get<1>(ret).size(), std::get<0>(ret));
@@ -1557,9 +1557,12 @@ SeaStore::Shard::omap_get_values(
     "omap_get_values2",
     op_type_t::OMAP_GET_VALUES2,
     op_flags,
-    [this, start](auto &t, auto &onode) {
-    const auto &root = select_log_omap_root(onode);
-    return do_omap_get_values(t, onode, start, root);
+    [this, start](auto &t, auto &onode)
+  {
+    auto root = select_log_omap_root(onode).get(
+      onode.get_metadata_hint(device->get_block_size()));
+    return do_omap_get_values(
+      t, onode, start, std::move(root));
   }).finally([this] {
     assert(shard_stats.pending_read_num);
     --(shard_stats.pending_read_num);
@@ -1890,14 +1893,15 @@ SeaStore::Shard::_do_transaction_step(
       {
         std::map<std::string, ceph::bufferlist> aset;
         i.decode_attrset(aset);
-       const omap_root_le_t &root = select_log_omap_root(*onode);
+       auto root = select_log_omap_root(*onode).get(
+         onode->get_metadata_hint(device->get_block_size()));
         DEBUGT("op OMAP_SETKEYS, oid={}, omap size={}, type={} ...",
                *ctx.transaction, oid, aset.size(), root.get_type());
         return _omap_set_values(
           ctx,
           onode,
           std::move(aset),
-         root);
+          std::move(root));
       }
       case Transaction::OP_OMAP_SETHEADER:
       {
@@ -1911,28 +1915,30 @@ SeaStore::Shard::_do_transaction_step(
       {
         omap_keys_t keys;
         i.decode_keyset(keys);
-       const omap_root_le_t &root = select_log_omap_root(*onode);
+       auto root = select_log_omap_root(*onode).get(
+         onode->get_metadata_hint(device->get_block_size()));
         DEBUGT("op OMAP_RMKEYS, oid={}, omap size={}, type={} ...",
                *ctx.transaction, oid, keys.size(), root.get_type());
         return _omap_rmkeys(
           ctx,
           onode,
           std::move(keys),
-         root);
+          std::move(root));
       }
       case Transaction::OP_OMAP_RMKEYRANGE:
       {
         std::string first, last;
         first = i.decode_string();
         last = i.decode_string();
-       const omap_root_le_t &root = select_log_omap_root(*onode);
+       auto root = select_log_omap_root(*onode).get(
+         onode->get_metadata_hint(device->get_block_size()));
         DEBUGT("op OMAP_RMKEYRANGE, oid={}, first={}, last={}, type={}...",
                *ctx.transaction, oid, first, last, root.get_type());
         return _omap_rmkeyrange(
           ctx,
           onode,
           std::move(first), std::move(last),
-         root);
+          std::move(root));
       }
       case Transaction::OP_OMAP_CLEAR:
       {
@@ -2224,9 +2230,11 @@ SeaStore::Shard::_clone_omaps(
     {
       auto config = OMapManager::omap_list_config_t()
         .with_inclusive(false, false);
+      auto root = onode->get_layout().get_root(type).get(
+        onode->get_metadata_hint(device->get_block_size()));
       return omap_list(
        *onode,
-       onode->get_layout().get_root(type),
+       std::move(root),
        *ctx.transaction,
        start,
        config
@@ -2240,13 +2248,14 @@ SeaStore::Shard::_clone_omaps(
              seastar::stop_iteration::yes);
        }
        std::string nstart = attrs.rbegin()->first;
+       auto root = d_onode->get_layout().get_root(type).get(
+         d_onode->get_metadata_hint(device->get_block_size()));
        return _omap_set_values(
          ctx,
          d_onode,
          std::map<std::string, ceph::bufferlist>(attrs.begin(), attrs.end()),
-         d_onode->get_layout().get_root(type)
-       ).si_then([complete, nstart=std::move(nstart),
-                 &start]() mutable {
+         std::move(root)
+       ).si_then([complete, nstart=std::move(nstart), &start]() mutable {
          if (complete) {
            return seastar::make_ready_future<
              seastar::stop_iteration>(
@@ -2329,12 +2338,12 @@ SeaStore::Shard::_omap_set_values(
   internal_context_t &ctx,
   OnodeRef &onode,
   std::map<std::string, ceph::bufferlist> &&kvs,
-  const omap_root_le_t &_root)
+  omap_root_t&& root)
 {
   Transaction& t = *ctx.transaction;
   return seastar::do_with(
     BtreeOMapManager(*transaction_manager),
-    _root.get(onode->get_metadata_hint(device->get_block_size())),
+    std::move(root),
     [this, &t, &onode, kvs=std::move(kvs)]
     (auto &omap_manager, auto &root) mutable
   {
@@ -2397,10 +2406,8 @@ SeaStore::Shard::_omap_rmkeys(
   internal_context_t &ctx,
   OnodeRef &onode,
   omap_keys_t &&keys,
-  const omap_root_le_t &_root)
+  omap_root_t&& root)
 {
-  auto root = _root.get(
-    onode->get_metadata_hint(device->get_block_size()));
   if (root.is_null()) {
     return seastar::now();
   }
@@ -2431,15 +2438,13 @@ SeaStore::Shard::_omap_rmkeyrange(
   OnodeRef &onode,
   std::string first,
   std::string last,
-  const omap_root_le_t &_root)
+  omap_root_t &&root)
 {
   if (first > last) {
     LOG_PREFIX(SeaStoreS::_omap_rmkeyrange);
     ERRORT("range error, first:{} > last:{}", *ctx.transaction, first, last);
     ceph_abort();
   }
-  auto root = _root.get(
-    onode->get_metadata_hint(device->get_block_size()));
   if (root.is_null()) {
     return seastar::now();
   }
@@ -2539,11 +2544,13 @@ SeaStore::Shard::_setattrs(
   DEBUGT("set attrs in omap", *ctx.transaction);
   return std::move(fut
   ).si_then([this, onode, &ctx, aset=std::move(aset)]() mutable {
+    auto root = onode->get_layout().xattr_root.get(
+      onode->get_metadata_hint(device->get_block_size()));
     return _omap_set_values(
       ctx,
       onode,
       std::move(aset),
-      onode->get_layout().xattr_root);
+      std::move(root));
   });
 }
 
index 2bc4f925e75cef63950654862e1e13297aec2cbf..ebacef1ff6605a3f48bbf4ec928d9313ee51255f 100644 (file)
@@ -352,7 +352,7 @@ public:
     using omap_list_ret = OMapManager::omap_list_ret;
     omap_list_ret omap_list(
       Onode& onode,
-      const omap_root_le_t& omap_root,
+      omap_root_t&& omap_root,
       Transaction& t,
       const std::optional<std::string>& start,
       OMapManager::omap_list_config_t config) const;
@@ -398,7 +398,7 @@ public:
       Transaction& t,
       Onode& onode,
       const std::optional<std::string>& start,
-      const omap_root_le_t& omap_root) const;
+      omap_root_t&& omap_root) const;
 
     base_iertr::future<fiemap_ret_t> _fiemap(
       Transaction &t,
@@ -447,7 +447,7 @@ public:
       internal_context_t &ctx,
       OnodeRef &onode,
       std::map<std::string, ceph::bufferlist> &&aset,
-      const omap_root_le_t &omap_root);
+      omap_root_t&& omap_root);
     tm_ret _omap_set_header(
       internal_context_t &ctx,
       OnodeRef &onode,
@@ -459,13 +459,13 @@ public:
       internal_context_t &ctx,
       OnodeRef &onode,
       omap_keys_t &&aset,
-      const omap_root_le_t &_omap_root);
+      omap_root_t &&_omap_root);
     tm_ret _omap_rmkeyrange(
       internal_context_t &ctx,
       OnodeRef &onode,
       std::string first,
       std::string last,
-      const omap_root_le_t &_omap_root);
+      omap_root_t &&_omap_root);
     tm_ret _truncate(
       internal_context_t &ctx,
       OnodeRef &onode, uint64_t size);