From 06ae16141470a9052224fbe76c842fa13bbf4520 Mon Sep 17 00:00:00 2001 From: Xuehan Xu Date: Tue, 13 Sep 2022 15:53:53 +0800 Subject: [PATCH] crimson/os/seastore/cached_extent: duplicate_for_write accepts the transaction ref as its parameter Signed-off-by: Xuehan Xu --- src/crimson/os/seastore/btree/fixed_kv_node.h | 4 ++-- src/crimson/os/seastore/cache.cc | 2 +- src/crimson/os/seastore/cached_extent.cc | 1 + src/crimson/os/seastore/cached_extent.h | 4 ++-- .../os/seastore/collection_manager/collection_flat_node.h | 2 +- src/crimson/os/seastore/object_data_handler.h | 2 +- .../os/seastore/omap_manager/btree/omap_btree_node_impl.h | 4 ++-- .../onode_manager/staged-fltree/node_extent_manager/dummy.h | 2 +- .../staged-fltree/node_extent_manager/seastore.h | 2 +- .../staged-fltree/node_extent_manager/test_replay.h | 2 +- src/crimson/os/seastore/root_block.h | 2 +- src/test/crimson/seastore/test_block.h | 4 ++-- 12 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/crimson/os/seastore/btree/fixed_kv_node.h b/src/crimson/os/seastore/btree/fixed_kv_node.h index 5658d0bf5d40f..75628f6fcbff7 100644 --- a/src/crimson/os/seastore/btree/fixed_kv_node.h +++ b/src/crimson/os/seastore/btree/fixed_kv_node.h @@ -109,7 +109,7 @@ struct FixedKVInternalNode ? &delta_buffer : nullptr; } - CachedExtentRef duplicate_for_write() override { + CachedExtentRef duplicate_for_write(Transaction&) override { assert(delta_buffer.empty()); return CachedExtentRef(new node_type_t(*this)); }; @@ -338,7 +338,7 @@ struct FixedKVLeafNode return this->is_mutation_pending() ? &delta_buffer : nullptr; } - CachedExtentRef duplicate_for_write() override { + CachedExtentRef duplicate_for_write(Transaction&) override { assert(delta_buffer.empty()); return CachedExtentRef(new node_type_t(*this)); }; diff --git a/src/crimson/os/seastore/cache.cc b/src/crimson/os/seastore/cache.cc index 65c0f8ef5fe40..8209e37499404 100644 --- a/src/crimson/os/seastore/cache.cc +++ b/src/crimson/os/seastore/cache.cc @@ -1012,7 +1012,7 @@ CachedExtentRef Cache::duplicate_for_write( return i; } - auto ret = i->duplicate_for_write(); + auto ret = i->duplicate_for_write(t); ret->pending_for_transaction = t.get_trans_id(); ret->prior_instance = i; // duplicate_for_write won't occur after ool write finished diff --git a/src/crimson/os/seastore/cached_extent.cc b/src/crimson/os/seastore/cached_extent.cc index dc7b8e6165b85..84f5f89c99b25 100644 --- a/src/crimson/os/seastore/cached_extent.cc +++ b/src/crimson/os/seastore/cached_extent.cc @@ -2,6 +2,7 @@ // vim: ts=8 sw=2 smarttab #include "crimson/os/seastore/cached_extent.h" +#include "crimson/os/seastore/transaction.h" #include "crimson/common/log.h" diff --git a/src/crimson/os/seastore/cached_extent.h b/src/crimson/os/seastore/cached_extent.h index 7f76c26145302..f79eb3e644ee9 100644 --- a/src/crimson/os/seastore/cached_extent.h +++ b/src/crimson/os/seastore/cached_extent.h @@ -192,7 +192,7 @@ public: * structure which defers updating the actual buffer until * on_delta_write(). */ - virtual CachedExtentRef duplicate_for_write() = 0; + virtual CachedExtentRef duplicate_for_write(Transaction &t) = 0; /** * prepare_write @@ -846,7 +846,7 @@ public: extent_len_t get_length() const final { return length; } - CachedExtentRef duplicate_for_write() final { + CachedExtentRef duplicate_for_write(Transaction&) final { ceph_assert(0 == "Should never happen for a placeholder"); return CachedExtentRef(); } diff --git a/src/crimson/os/seastore/collection_manager/collection_flat_node.h b/src/crimson/os/seastore/collection_manager/collection_flat_node.h index c35500ffd6795..1652eb92f227b 100644 --- a/src/crimson/os/seastore/collection_manager/collection_flat_node.h +++ b/src/crimson/os/seastore/collection_manager/collection_flat_node.h @@ -105,7 +105,7 @@ struct CollectionNode coll_map_t decoded; delta_buffer_t delta_buffer; - CachedExtentRef duplicate_for_write() final { + CachedExtentRef duplicate_for_write(Transaction&) final { assert(delta_buffer.empty()); return CachedExtentRef(new CollectionNode(*this)); } diff --git a/src/crimson/os/seastore/object_data_handler.h b/src/crimson/os/seastore/object_data_handler.h index 510dd8f1449dc..6fd73dc762a3a 100644 --- a/src/crimson/os/seastore/object_data_handler.h +++ b/src/crimson/os/seastore/object_data_handler.h @@ -24,7 +24,7 @@ struct ObjectDataBlock : crimson::os::seastore::LogicalCachedExtent { ObjectDataBlock(const ObjectDataBlock &other) : LogicalCachedExtent(other) {} - CachedExtentRef duplicate_for_write() final { + CachedExtentRef duplicate_for_write(Transaction&) final { return CachedExtentRef(new ObjectDataBlock(*this)); }; diff --git a/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.h b/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.h index 574f29bea9668..a2b51bbb0e135 100644 --- a/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.h +++ b/src/crimson/os/seastore/omap_manager/btree/omap_btree_node_impl.h @@ -46,7 +46,7 @@ struct OMapInnerNode bool extent_is_below_min() const { return below_min(); } uint32_t get_node_size() { return get_size(); } - CachedExtentRef duplicate_for_write() final { + CachedExtentRef duplicate_for_write(Transaction&) final { assert(delta_buffer.empty()); return CachedExtentRef(new OMapInnerNode(*this)); } @@ -164,7 +164,7 @@ struct OMapLeafNode bool extent_is_below_min() const { return below_min(); } uint32_t get_node_size() { return get_size(); } - CachedExtentRef duplicate_for_write() final { + CachedExtentRef duplicate_for_write(Transaction&) final { assert(delta_buffer.empty()); return CachedExtentRef(new OMapLeafNode(*this)); } diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/dummy.h b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/dummy.h index e18112ab6e6eb..24df8b548e933 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/dummy.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/dummy.h @@ -55,7 +55,7 @@ class DummyNodeExtent final: public NodeExtent { ceph_abort("impossible path"); } DeltaRecorder* get_recorder() const override { return nullptr; } - CachedExtentRef duplicate_for_write() override { + CachedExtentRef duplicate_for_write(Transaction&) override { ceph_abort("impossible path"); } extent_types_t get_type() const override { return extent_types_t::TEST_BLOCK; } diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h index b648baacf00a4..f7cfa8c2112d6 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h @@ -59,7 +59,7 @@ class SeastoreNodeExtent final: public NodeExtent { return recorder.get(); } - CachedExtentRef duplicate_for_write() override { + CachedExtentRef duplicate_for_write(Transaction&) override { return CachedExtentRef(new SeastoreNodeExtent(*this)); } ceph::bufferlist get_delta() override { diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/test_replay.h b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/test_replay.h index b63a362f845ed..bce74e3814058 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/test_replay.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/test_replay.h @@ -47,7 +47,7 @@ class TestReplayExtent final: public NodeExtent { ceph_abort("impossible path"); } DeltaRecorder* get_recorder() const override { ceph_abort("impossible path"); } - CachedExtentRef duplicate_for_write() override { + CachedExtentRef duplicate_for_write(Transaction&) override { ceph_abort("impossible path"); } extent_types_t get_type() const override { return extent_types_t::TEST_BLOCK; } diff --git a/src/crimson/os/seastore/root_block.h b/src/crimson/os/seastore/root_block.h index b686e56a46497..435860ff36bb1 100644 --- a/src/crimson/os/seastore/root_block.h +++ b/src/crimson/os/seastore/root_block.h @@ -42,7 +42,7 @@ struct RootBlock : CachedExtent { RootBlock(const RootBlock &rhs) = default; - CachedExtentRef duplicate_for_write() final { + CachedExtentRef duplicate_for_write(Transaction&) final { return CachedExtentRef(new RootBlock(*this)); }; diff --git a/src/test/crimson/seastore/test_block.h b/src/test/crimson/seastore/test_block.h index 26588321d0979..ccdafb7843fec 100644 --- a/src/test/crimson/seastore/test_block.h +++ b/src/test/crimson/seastore/test_block.h @@ -54,7 +54,7 @@ struct TestBlock : crimson::os::seastore::LogicalCachedExtent { TestBlock(const TestBlock &other) : LogicalCachedExtent(other) {} - CachedExtentRef duplicate_for_write() final { + CachedExtentRef duplicate_for_write(Transaction&) final { return CachedExtentRef(new TestBlock(*this)); }; @@ -93,7 +93,7 @@ struct TestBlockPhysical : crimson::os::seastore::CachedExtent{ TestBlockPhysical(const TestBlockPhysical &other) : CachedExtent(other) {} - CachedExtentRef duplicate_for_write() final { + CachedExtentRef duplicate_for_write(Transaction&) final { return CachedExtentRef(new TestBlockPhysical(*this)); }; -- 2.39.5