From: Yingxin Cheng Date: Wed, 12 May 2021 06:57:09 +0000 (+0800) Subject: crimson/onode-staged-tree: use fine-grained errorator in NodeExtentManager X-Git-Tag: v17.1.0~1880^2~16 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=7789e8a3ec2027ff235de635a3cc471df44004c0;p=ceph.git crimson/onode-staged-tree: use fine-grained errorator in NodeExtentManager Signed-off-by: Yingxin Cheng --- diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/fwd.h b/src/crimson/os/seastore/onode_manager/staged-fltree/fwd.h index 65aa3bf806bd6..f23e44a083826 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/fwd.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/fwd.h @@ -17,6 +17,9 @@ namespace crimson::os::seastore::onode { +using eagain_ertr = crimson::errorator< + crimson::ct_error::eagain>; + using crimson::os::seastore::Transaction; using crimson::os::seastore::TransactionRef; using crimson::os::seastore::laddr_t; diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager.h b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager.h index 12f998dbe645b..d6a651c87b24b 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager.h @@ -55,23 +55,42 @@ class NodeExtent : public LogicalCachedExtent { using crimson::os::seastore::TransactionManager; class NodeExtentManager { + using base_ertr = eagain_ertr::extend< + crimson::ct_error::input_output_error>; + public: virtual ~NodeExtentManager() = default; + + // TODO: remove the coarse-grained errorator using tm_ertr = crimson::errorator< crimson::ct_error::input_output_error, crimson::ct_error::invarg, crimson::ct_error::enoent, crimson::ct_error::erange, crimson::ct_error::eagain>; - template - using tm_future = tm_ertr::future; virtual bool is_read_isolated() const = 0; - virtual tm_future read_extent( + + using read_ertr = base_ertr::extend< + crimson::ct_error::invarg, + crimson::ct_error::enoent, + crimson::ct_error::erange>; + virtual read_ertr::future read_extent( Transaction&, laddr_t, extent_len_t) = 0; - virtual tm_future alloc_extent(Transaction&, extent_len_t) = 0; - virtual tm_future<> retire_extent(Transaction&, NodeExtentRef) = 0; - virtual tm_future get_super(Transaction&, RootNodeTracker&) = 0; + + using alloc_ertr = base_ertr; + virtual alloc_ertr::future alloc_extent( + Transaction&, extent_len_t) = 0; + + using retire_ertr = base_ertr::extend< + crimson::ct_error::enoent>; + virtual retire_ertr::future<> retire_extent( + Transaction&, NodeExtentRef) = 0; + + using getsuper_ertr = base_ertr; + virtual getsuper_ertr::future get_super( + Transaction&, RootNodeTracker&) = 0; + virtual std::ostream& print(std::ostream& os) const = 0; static NodeExtentManagerURef create_dummy(bool is_sync); 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 32c09d2324899..c868d4448bb56 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 @@ -74,7 +74,7 @@ class DummyNodeExtentManager final: public NodeExtentManager { protected: bool is_read_isolated() const override { return false; } - tm_future read_extent( + read_ertr::future read_extent( Transaction& t, laddr_t addr, extent_len_t len) override { TRACET("reading {}B at {:#x} ...", t, len, addr); if constexpr (SYNC) { @@ -87,7 +87,7 @@ class DummyNodeExtentManager final: public NodeExtentManager { } } - tm_future alloc_extent( + alloc_ertr::future alloc_extent( Transaction& t, extent_len_t len) override { TRACET("allocating {}B ...", t, len); if constexpr (SYNC) { @@ -100,7 +100,7 @@ class DummyNodeExtentManager final: public NodeExtentManager { } } - tm_future<> retire_extent( + retire_ertr::future<> retire_extent( Transaction& t, NodeExtentRef extent) override { TRACET("retiring {}B at {:#x} ...", t, extent->get_length(), extent->get_laddr()); @@ -114,7 +114,7 @@ class DummyNodeExtentManager final: public NodeExtentManager { } } - tm_future get_super( + getsuper_ertr::future get_super( Transaction& t, RootNodeTracker& tracker) override { TRACET("get root ...", t); if constexpr (SYNC) { @@ -132,7 +132,7 @@ class DummyNodeExtentManager final: public NodeExtentManager { } private: - tm_future read_extent_sync( + read_ertr::future read_extent_sync( Transaction& t, laddr_t addr, extent_len_t len) { auto iter = allocate_map.find(addr); assert(iter != allocate_map.end()); @@ -140,10 +140,10 @@ class DummyNodeExtentManager final: public NodeExtentManager { TRACET("read {}B at {:#x}", t, extent->get_length(), extent->get_laddr()); assert(extent->get_laddr() == addr); assert(extent->get_length() == len); - return tm_ertr::make_ready_future(extent); + return read_ertr::make_ready_future(extent); } - tm_future alloc_extent_sync( + alloc_ertr::future alloc_extent_sync( Transaction& t, extent_len_t len) { assert(len % ALIGNMENT == 0); auto r = ceph::buffer::create_aligned(len, ALIGNMENT); @@ -155,10 +155,10 @@ class DummyNodeExtentManager final: public NodeExtentManager { allocate_map.insert({extent->get_laddr(), extent}); DEBUGT("allocated {}B at {:#x}", t, extent->get_length(), extent->get_laddr()); assert(extent->get_length() == len); - return tm_ertr::make_ready_future(extent); + return alloc_ertr::make_ready_future(extent); } - tm_future<> retire_extent_sync( + retire_ertr::future<> retire_extent_sync( Transaction& t, NodeExtentRef _extent) { auto& extent = static_cast(*_extent.get()); auto addr = extent.get_laddr(); @@ -168,13 +168,13 @@ class DummyNodeExtentManager final: public NodeExtentManager { assert(iter != allocate_map.end()); allocate_map.erase(iter); DEBUGT("retired {}B at {:#x}", t, len, addr); - return tm_ertr::now(); + return retire_ertr::now(); } - tm_future get_super_sync( + getsuper_ertr::future get_super_sync( Transaction& t, RootNodeTracker& tracker) { TRACET("got root {:#x}", t, root_laddr); - return tm_ertr::make_ready_future( + return getsuper_ertr::make_ready_future( Super::URef(new DummySuper(t, tracker, &root_laddr))); } 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 bd5792dea43b3..a60dc8ece7941 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 @@ -70,7 +70,7 @@ class SeastoreNodeExtentManager final: public NodeExtentManager { protected: bool is_read_isolated() const override { return true; } - tm_future read_extent( + read_ertr::future read_extent( Transaction& t, laddr_t addr, extent_len_t len) override { TRACET("reading {}B at {:#x} ...", t, len, addr); return tm.read_extent(t, addr, len @@ -84,7 +84,7 @@ class SeastoreNodeExtentManager final: public NodeExtentManager { }); } - tm_future alloc_extent( + alloc_ertr::future alloc_extent( Transaction& t, extent_len_t len) override { TRACET("allocating {}B ...", t, len); return tm.alloc_extent(t, addr_min, len @@ -97,7 +97,7 @@ class SeastoreNodeExtentManager final: public NodeExtentManager { }); } - tm_future<> retire_extent( + retire_ertr::future<> retire_extent( Transaction& t, NodeExtentRef _extent) override { LogicalCachedExtentRef extent = _extent; auto addr = extent->get_laddr(); @@ -109,7 +109,7 @@ class SeastoreNodeExtentManager final: public NodeExtentManager { }); } - tm_future get_super( + getsuper_ertr::future get_super( Transaction& t, RootNodeTracker& tracker) override { TRACET("get root ...", t); return tm.read_onode_root(t).safe_then([this, &t, &tracker](auto root_addr) {