From: Myoungwon Oh Date: Mon, 25 Nov 2024 09:25:58 +0000 (+0000) Subject: crimson/os/seastore: adjust onode to store the two omap trees X-Git-Tag: v20.0.0~24^2~15 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=868b8160df45a1bac4e4de38b299969c8017e899;p=ceph.git crimson/os/seastore: adjust onode to store the two omap trees Signed-off-by: Myoungwon Oh --- diff --git a/src/crimson/os/seastore/onode.h b/src/crimson/os/seastore/onode.h index fa2ed65c0f31..a8d27aa4ee28 100644 --- a/src/crimson/os/seastore/onode.h +++ b/src/crimson/os/seastore/onode.h @@ -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; diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.cc b/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.cc index c81d7c80ee21..e675bf346f15 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.cc +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.cc @@ -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( diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h b/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h index 60af73c0a2c9..83aa0c60b8b4 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h @@ -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( + 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,