From 8f58b862f8e77f6520951cf0a13dd8c7da7b2b2a Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Sat, 29 Jun 2024 16:13:02 +0800 Subject: [PATCH] crimson/os/seastore/onode: add hobject_t into Onode So that we can see the onodes' identities in the logs Signed-off-by: Xuehan Xu --- src/crimson/os/seastore/onode.cc | 1 + src/crimson/os/seastore/onode.h | 8 ++++++-- .../onode_manager/staged-fltree/fltree_onode_manager.cc | 2 ++ .../onode_manager/staged-fltree/fltree_onode_manager.h | 8 ++++---- .../os/seastore/onode_manager/staged-fltree/tree.h | 2 +- .../os/seastore/onode_manager/staged-fltree/value.h | 5 +++-- src/test/crimson/seastore/onode_tree/test_value.h | 6 +++++- src/test/crimson/seastore/test_object_data_handler.cc | 2 +- 8 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/crimson/os/seastore/onode.cc b/src/crimson/os/seastore/onode.cc index 96b69fb7c30..f3fd6eb18a5 100644 --- a/src/crimson/os/seastore/onode.cc +++ b/src/crimson/os/seastore/onode.cc @@ -10,6 +10,7 @@ std::ostream& operator<<(std::ostream &out, const Onode &rhs) { auto &layout = rhs.get_layout(); return out << "Onode(" + << "hobj=" << rhs.hobj << ", " << "size=" << static_cast(layout.size) << ")"; } diff --git a/src/crimson/os/seastore/onode.h b/src/crimson/os/seastore/onode.h index e803a2e4e74..de72a658435 100644 --- a/src/crimson/os/seastore/onode.h +++ b/src/crimson/os/seastore/onode.h @@ -8,6 +8,7 @@ #include #include +#include "common/hobject.h" #include "include/byteorder.h" #include "seastore_types.h" @@ -56,10 +57,12 @@ protected: virtual laddr_t get_hint() const = 0; const uint32_t default_metadata_offset = 0; const uint32_t default_metadata_range = 0; + const hobject_t hobj; public: - Onode(uint32_t ddr, uint32_t dmr) + Onode(uint32_t ddr, uint32_t dmr, const hobject_t &hobj) : default_metadata_offset(ddr), - default_metadata_range(dmr) + default_metadata_range(dmr), + hobj(hobj) {} virtual bool is_alive() const = 0; @@ -85,6 +88,7 @@ public: laddr_t get_data_hint() const { return get_hint(); } + friend std::ostream& operator<<(std::ostream &out, const Onode &rhs); }; 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 9a29072fe8b..bedcff107e2 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 @@ -151,6 +151,7 @@ FLTreeOnodeManager::get_onode_ret FLTreeOnodeManager::get_onode( auto val = OnodeRef(new FLTreeOnode( default_data_reservation, default_metadata_range, + hoid.hobj, cursor.value())); return get_onode_iertr::make_ready_future( val @@ -173,6 +174,7 @@ FLTreeOnodeManager::get_or_create_onode( auto onode = new FLTreeOnode( default_data_reservation, default_metadata_range, + hoid.hobj, cursor.value()); if (created) { DEBUGT("created onode for entry for {}", trans, hoid); 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 33109e50f6a..155776046ef 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 @@ -36,13 +36,13 @@ struct FLTreeOnode final : Onode, Value { FLTreeOnode& operator=(const FLTreeOnode&) = delete; template - FLTreeOnode(uint32_t ddr, uint32_t dmr, T&&... args) - : Onode(ddr, dmr), + FLTreeOnode(uint32_t ddr, uint32_t dmr, const hobject_t &hobj, T&&... args) + : Onode(ddr, dmr, hobj), Value(std::forward(args)...) {} template - FLTreeOnode(T&&... args) - : Onode(0, 0), + FLTreeOnode(const hobject_t &hobj, T&&... args) + : Onode(0, 0, hobj), Value(std::forward(args)...) {} struct Recorder : public ValueDeltaRecorder { diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/tree.h b/src/crimson/os/seastore/onode_manager/staged-fltree/tree.h index 7385e080c8f..68f8a55e6c7 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/tree.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/tree.h @@ -92,7 +92,7 @@ class Btree { ValueImpl value() { assert(!is_end()); return p_tree->value_builder.build_value( - *p_tree->nm, p_tree->value_builder, p_cursor); + get_ghobj().hobj, *p_tree->nm, p_tree->value_builder, p_cursor); } bool operator==(const Cursor& o) const { return operator<=>(o) == 0; } diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/value.h b/src/crimson/os/seastore/onode_manager/staged-fltree/value.h index d9f0c231a17..f32d5f1e668 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/value.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/value.h @@ -312,11 +312,12 @@ struct ValueBuilderImpl final : public ValueBuilder { return ret; } - ValueImpl build_value(NodeExtentManager& nm, + ValueImpl build_value(const hobject_t &hobj, + NodeExtentManager& nm, const ValueBuilder& vb, Ref& p_cursor) const { assert(vb.get_header_magic() == get_header_magic()); - return ValueImpl(nm, vb, p_cursor); + return ValueImpl(hobj, nm, vb, p_cursor); } }; diff --git a/src/test/crimson/seastore/onode_tree/test_value.h b/src/test/crimson/seastore/onode_tree/test_value.h index 98249f8c956..c913f85e6d6 100644 --- a/src/test/crimson/seastore/onode_tree/test_value.h +++ b/src/test/crimson/seastore/onode_tree/test_value.h @@ -176,7 +176,11 @@ class TestValue final : public Value { } }; - TestValue(NodeExtentManager& nm, const ValueBuilder& vb, Ref& p_cursor) + TestValue( + const hobject_t &hobj, + NodeExtentManager& nm, + const ValueBuilder& vb, + Ref& p_cursor) : Value(nm, vb, p_cursor) {} ~TestValue() override = default; diff --git a/src/test/crimson/seastore/test_object_data_handler.cc b/src/test/crimson/seastore/test_object_data_handler.cc index 0e258b9a36c..0f05bae2e93 100644 --- a/src/test/crimson/seastore/test_object_data_handler.cc +++ b/src/test/crimson/seastore/test_object_data_handler.cc @@ -26,7 +26,7 @@ class TestOnode final : public Onode { bool dirty = false; public: - TestOnode(uint32_t ddr, uint32_t dmr) : Onode(ddr, dmr) {} + TestOnode(uint32_t ddr, uint32_t dmr) : Onode(ddr, dmr, hobject_t()) {} const onode_layout_t &get_layout() const final { return layout; }