]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: introduce get_omap_root()
authorYingxin Cheng <yingxin.cheng@intel.com>
Wed, 11 Dec 2024 07:00:35 +0000 (15:00 +0800)
committermyoungwon oh <ohmyoungwon@gmail.com>
Sun, 2 Mar 2025 09:25:38 +0000 (09:25 +0000)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
Signed-off-by: Myoungwon Oh <ohmyoungwon@gmail.com>
src/crimson/os/seastore/onode.h
src/crimson/os/seastore/seastore.cc
src/crimson/os/seastore/seastore.h

index 548239c6718972da130701606917eaf82f7dea25..6acae932642759a093d3237623dbda175ad3e903 100644 (file)
@@ -49,7 +49,7 @@ struct onode_layout_t {
     } else if (type == omap_type_t::OMAP) {
       return omap_root;
     } else {
-      ceph_assert(type == omap_type_t::LOG);
+      assert(type == omap_type_t::LOG);
       return log_root;
     }
   }
@@ -105,6 +105,10 @@ public:
   laddr_t get_data_hint() const {
     return get_hint();
   }
+  omap_root_t get_root(omap_type_t type, extent_len_t block_size) const {
+    return get_layout().get_root(type).get(
+      get_metadata_hint(block_size));
+  }
   friend std::ostream& operator<<(std::ostream &out, const Onode &rhs);
 };
 
index 0413b81231e08ab4ab8c58289326112ab55c702a..7be7cbe45f0aeb1d0bead961133c6bd538c7b94d 100644 (file)
@@ -1236,11 +1236,7 @@ SeaStore::Shard::_get_attr(
     return seastar::make_ready_future<ceph::bufferlist>(std::move(bl));
   }
   DEBUGT("name={} ...", t, name);
-  return _omap_get_value(
-    t,
-    layout.xattr_root.get(
-      onode.get_metadata_hint(device->get_block_size())),
-    name);
+  return _omap_get_value(t, get_omap_root(omap_type_t::XATTR, onode), name);
 }
 
 SeaStore::Shard::get_attr_errorator::future<ceph::bufferlist>
@@ -1280,10 +1276,8 @@ SeaStore::Shard::_get_attrs(
   LOG_PREFIX(SeaStoreS::_get_attrs);
   DEBUGT("...", t);
   auto& layout = onode.get_layout();
-  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)
+    t, onode, std::nullopt, get_omap_root(omap_type_t::XATTR, onode)
   ).si_then([&layout, &t, FNAME](auto p) {
     auto& attrs = std::get<1>(p);
     DEBUGT("got {} attrs, OI length=0x{:x}, SS length=0x{:x}",
@@ -2034,12 +2028,9 @@ SeaStore::Shard::_rename(
 {
   auto olayout = onode->get_layout();
   uint32_t size = olayout.size;
-  auto omap_root = olayout.omap_root.get(
-    d_onode->get_metadata_hint(device->get_block_size()));
-  auto xattr_root = olayout.xattr_root.get(
-    d_onode->get_metadata_hint(device->get_block_size()));
-  auto log_root = olayout.log_root.get(
-    d_onode->get_metadata_hint(device->get_block_size()));
+  auto omap_root = get_omap_root(omap_type_t::OMAP, *onode);
+  auto xattr_root = get_omap_root(omap_type_t::XATTR, *onode);
+  auto log_root = get_omap_root(omap_type_t::LOG, *onode);
   auto object_data = olayout.object_data.get();
   auto oi_bl = ceph::bufferlist::static_from_mem(
     &olayout.oi[0],
@@ -2145,18 +2136,15 @@ SeaStore::Shard::_remove(
 {
   return omaptree_clear_no_onode(
     *ctx.transaction,
-    onode->get_layout().omap_root.get(
-      onode->get_metadata_hint(device->get_block_size()))
+    get_omap_root(omap_type_t::OMAP, *onode)
   ).si_then([this, &ctx, &onode] {
     return omaptree_clear_no_onode(
       *ctx.transaction,
-      onode->get_layout().xattr_root.get(
-       onode->get_metadata_hint(device->get_block_size())));
+      get_omap_root(omap_type_t::XATTR, *onode));
   }).si_then([this, &ctx, &onode] {
     return omaptree_clear_no_onode(
       *ctx.transaction,
-      onode->get_layout().log_root.get(
-       onode->get_metadata_hint(device->get_block_size())));
+      get_omap_root(omap_type_t::LOG, *onode));
   }).si_then([this, &ctx, &onode] {
     return seastar::do_with(
       ObjectDataHandler(max_object_size),
@@ -2230,14 +2218,7 @@ 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,
-       std::move(root),
-       *ctx.transaction,
-       start,
-       config
+      return omap_list(*onode, get_omap_root(type, *onode), *ctx.transaction, start, config
       ).si_then([&ctx, &onode, &d_onode, this, type, &start](auto p) {
        auto complete = std::get<0>(p);
        auto &attrs = std::get<1>(p);
@@ -2248,13 +2229,11 @@ 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()),
-         std::move(root)
+         get_omap_root(type, *d_onode)
        ).si_then([complete, nstart=std::move(nstart), &start]() mutable {
          if (complete) {
            return seastar::make_ready_future<
@@ -2389,14 +2368,13 @@ SeaStore::Shard::_omap_clear(
 {
   return _xattr_rmattr(
     ctx,
+    get_omap_root(omap_type_t::XATTR, *onode),
     onode,
     std::string(OMAP_HEADER_XATTR_KEY)
   ).si_then([this, &ctx, &onode] {
-    auto root = onode->get_layout().omap_root.get(
-      onode->get_metadata_hint(device->get_block_size()));
     return omaptree_clear(
       *ctx.transaction,
-      std::move(root),
+      get_omap_root(omap_type_t::OMAP, *onode),
       *onode);
   });
 }
@@ -2507,6 +2485,7 @@ SeaStore::Shard::_setattrs(
        // need to remove it first
        fut = _xattr_rmattr(
           ctx,
+          get_omap_root(omap_type_t::XATTR, *onode),
           onode,
           OI_ATTR);
       }
@@ -2525,6 +2504,7 @@ SeaStore::Shard::_setattrs(
       if (!layout.ss_size) {
        fut = _xattr_rmattr(
           ctx,
+          get_omap_root(omap_type_t::XATTR, *onode),
           onode,
           SS_ATTR);
       }
@@ -2544,13 +2524,11 @@ 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),
-      std::move(root));
+      get_omap_root(omap_type_t::XATTR, *onode));
   });
 }
 
@@ -2570,6 +2548,7 @@ SeaStore::Shard::_rmattr(
   } else {
     return _xattr_rmattr(
       ctx,
+      get_omap_root(omap_type_t::XATTR, *onode),
       onode,
       std::move(name));
   }
@@ -2578,13 +2557,12 @@ SeaStore::Shard::_rmattr(
 SeaStore::Shard::tm_ret
 SeaStore::Shard::_xattr_rmattr(
   internal_context_t &ctx,
+  omap_root_t&& root,
   OnodeRef &onode,
   std::string &&name)
 {
   LOG_PREFIX(SeaStoreS::_xattr_rmattr);
   DEBUGT("onode={}", *ctx.transaction, *onode);
-  auto root = onode->get_layout().xattr_root.get(
-    onode->get_metadata_hint(device->get_block_size()));
   if (root.is_null()) {
     return base_iertr::now();
   }
@@ -2610,11 +2588,9 @@ SeaStore::Shard::_rmattrs(
 {
   onode->clear_object_info(*ctx.transaction);
   onode->clear_snapset(*ctx.transaction);
-  auto root = onode->get_layout().xattr_root.get(
-    onode->get_metadata_hint(device->get_block_size()));
   return omaptree_clear(
     *ctx.transaction,
-    std::move(root),
+    get_omap_root(omap_type_t::XATTR, *onode),
     *onode);
 }
 
index ebacef1ff6605a3f48bbf4ec928d9313ee51255f..2feb4f556c50c9bf2148ddece435480c2a6249fe 100644 (file)
@@ -482,6 +482,7 @@ public:
       OnodeRef &onode);
     tm_ret _xattr_rmattr(
       internal_context_t &ctx,
+      omap_root_t&& root,
       OnodeRef &onode,
       std::string &&name);
     tm_ret _create_collection(
@@ -516,6 +517,10 @@ public:
      * omaptree interfaces
      */
 
+    omap_root_t get_omap_root(omap_type_t type, Onode& onode) const {
+      return onode.get_root(type, device->get_block_size());
+    }
+
     base_iertr::future<omap_root_t> omaptree_do_clear(
       Transaction& t,
       omap_root_t&& root);