]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore: adjust onode to store the two omap trees
authorMyoungwon Oh <ohmyoungwon@gmail.com>
Mon, 25 Nov 2024 09:25:58 +0000 (09:25 +0000)
committermyoungwon oh <ohmyoungwon@gmail.com>
Thu, 20 Feb 2025 12:27:30 +0000 (12:27 +0000)
Signed-off-by: Myoungwon Oh <myoungwon.oh@samsung.com>
src/crimson/os/seastore/onode.h
src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.cc
src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h

index fa2ed65c0f31c436b73dfe7ce2d6e8806a3e075c..a8d27aa4ee284488d16eccdf4ac4836a34042155 100644 (file)
@@ -32,12 +32,16 @@ struct onode_layout_t {
   ceph_le32 oi_size{0};
   ceph_le32 ss_size{0};
   omap_root_le_t omap_root;
+  omap_root_le_t log_root;
   omap_root_le_t xattr_root;
 
   object_data_le_t object_data;
 
   char oi[MAX_OI_LENGTH] = {0};
   char ss[MAX_SS_LENGTH] = {0};
+
+  onode_layout_t() : omap_root(omap_type_t::OMAP), log_root(omap_type_t::LOG),
+    xattr_root(omap_type_t::XATTR) {}
 } __attribute__((packed));
 
 class Transaction;
@@ -71,6 +75,7 @@ public:
 
   virtual void update_onode_size(Transaction&, uint32_t) = 0;
   virtual void update_omap_root(Transaction&, omap_root_t&) = 0;
+  virtual void update_log_root(Transaction&, omap_root_t&) = 0;
   virtual void update_xattr_root(Transaction&, omap_root_t&) = 0;
   virtual void update_object_data(Transaction&, object_data_t&) = 0;
   virtual void update_object_info(Transaction&, ceph::bufferlist&) = 0;
index c81d7c80ee2149784d5ce8624805b28783251fb5..e675bf346f15b6b075d12a992c4e051593124dc5 100644 (file)
@@ -28,6 +28,10 @@ void FLTreeOnode::Recorder::apply_value_delta(
       DEBUG("update omap root");
       bliter.copy(sizeof(mlayout.omap_root), (char *)&mlayout.omap_root);
       break;
+    case delta_op_t::UPDATE_LOG_ROOT:
+      DEBUG("update log root");
+      bliter.copy(sizeof(mlayout.log_root), (char *)&mlayout.log_root);
+      break;
     case delta_op_t::UPDATE_XATTR_ROOT:
       DEBUG("update xattr root");
       bliter.copy(sizeof(mlayout.xattr_root), (char *)&mlayout.xattr_root);
@@ -88,6 +92,12 @@ void FLTreeOnode::Recorder::encode_update(
       (const char *)&layout.omap_root,
       sizeof(layout.omap_root));
     break;
+  case delta_op_t::UPDATE_LOG_ROOT:
+    DEBUG("update log root");
+    encoded.append(
+      (const char *)&layout.log_root,
+      sizeof(layout.log_root));
+   break;
   case delta_op_t::UPDATE_XATTR_ROOT:
     DEBUG("update xattr root");
     encoded.append(
index 60af73c0a2c9618cc6a769adb8d942bbd8561e94..83aa0c60b8b45b8ae01cffa3d89caa9ed5ed1244 100644 (file)
@@ -49,6 +49,7 @@ struct FLTreeOnode final : Onode, Value {
     enum class delta_op_t : uint8_t {
       UPDATE_ONODE_SIZE,
       UPDATE_OMAP_ROOT,
+      UPDATE_LOG_ROOT,
       UPDATE_XATTR_ROOT,
       UPDATE_OBJECT_DATA,
       UPDATE_OBJECT_INFO,
@@ -132,6 +133,20 @@ struct FLTreeOnode final : Onode, Value {
     });
   }
 
+  void update_log_root(Transaction &t, omap_root_t &lroot) final {
+    with_mutable_layout(
+      t,
+      [&lroot](NodeExtentMutable &payload_mut, Recorder *recorder) {
+       auto &mlayout = *reinterpret_cast<onode_layout_t*>(
+          payload_mut.get_write());
+       mlayout.log_root.update(lroot);
+       if (recorder) {
+         recorder->encode_update(
+           payload_mut, Recorder::delta_op_t::UPDATE_LOG_ROOT);
+       }
+    });
+  }
+
   void update_xattr_root(Transaction &t, omap_root_t &xroot) final {
     with_mutable_layout(
       t,