From: Xuehan Xu Date: Tue, 13 Sep 2022 07:53:53 +0000 (+0800) Subject: crimson/os/seastore/cached_extent: duplicate_for_write accepts the transaction ref... X-Git-Tag: v18.1.0~34^2~19 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=9438dba9fd90ffe159bbb4d58b3bc2742490bd76;p=ceph.git crimson/os/seastore/cached_extent: duplicate_for_write accepts the transaction ref as its parameter Signed-off-by: Xuehan Xu (cherry picked from commit 06ae16141470a9052224fbe76c842fa13bbf4520) --- diff --git a/src/crimson/os/seastore/btree/fixed_kv_node.h b/src/crimson/os/seastore/btree/fixed_kv_node.h index 5658d0bf5d40..75628f6fcbff 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 65c0f8ef5fe4..8209e3749940 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 dc7b8e6165b8..84f5f89c99b2 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 7f76c2614530..f79eb3e644ee 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 c35500ffd679..1652eb92f227 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 510dd8f1449d..6fd73dc762a3 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 574f29bea966..a2b51bbb0e13 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 e18112ab6e6e..24df8b548e93 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 b648baacf00a..f7cfa8c2112d 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 b63a362f845e..bce74e381405 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 b686e56a4649..435860ff36bb 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 26588321d097..ccdafb7843fe 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)); };