]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/onode-staged-tree: use fine-grained errorator in NodeExtentManager
authorYingxin Cheng <yingxin.cheng@intel.com>
Wed, 12 May 2021 06:57:09 +0000 (14:57 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Thu, 20 May 2021 03:21:11 +0000 (11:21 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/onode_manager/staged-fltree/fwd.h
src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager.h
src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/dummy.h
src/crimson/os/seastore/onode_manager/staged-fltree/node_extent_manager/seastore.h

index 65aa3bf806bd6837b558d3bd971dcf066a94dbfe..f23e44a083826c89513c66d30511e89b5e03d542 100644 (file)
@@ -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;
index 12f998dbe645bd6fb49349209d51b5dd9ae871d9..d6a651c87b24bfdf5382d0d22b9fdcec3238d92b 100644 (file)
@@ -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 <class ValueT=void>
-  using tm_future = tm_ertr::future<ValueT>;
 
   virtual bool is_read_isolated() const = 0;
-  virtual tm_future<NodeExtentRef> read_extent(
+
+  using read_ertr = base_ertr::extend<
+    crimson::ct_error::invarg,
+    crimson::ct_error::enoent,
+    crimson::ct_error::erange>;
+  virtual read_ertr::future<NodeExtentRef> read_extent(
       Transaction&, laddr_t, extent_len_t) = 0;
-  virtual tm_future<NodeExtentRef> alloc_extent(Transaction&, extent_len_t) = 0;
-  virtual tm_future<> retire_extent(Transaction&, NodeExtentRef) = 0;
-  virtual tm_future<Super::URef> get_super(Transaction&, RootNodeTracker&) = 0;
+
+  using alloc_ertr = base_ertr;
+  virtual alloc_ertr::future<NodeExtentRef> 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<Super::URef> get_super(
+      Transaction&, RootNodeTracker&) = 0;
+
   virtual std::ostream& print(std::ostream& os) const = 0;
 
   static NodeExtentManagerURef create_dummy(bool is_sync);
index 32c09d2324899ebc69149126e2dd3dbb09b1c34e..c868d4448bb56445a37533cd3059b44043426b88 100644 (file)
@@ -74,7 +74,7 @@ class DummyNodeExtentManager final: public NodeExtentManager {
  protected:
   bool is_read_isolated() const override { return false; }
 
-  tm_future<NodeExtentRef> read_extent(
+  read_ertr::future<NodeExtentRef> 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<NodeExtentRef> alloc_extent(
+  alloc_ertr::future<NodeExtentRef> 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<Super::URef> get_super(
+  getsuper_ertr::future<Super::URef> 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<NodeExtentRef> read_extent_sync(
+  read_ertr::future<NodeExtentRef> 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<NodeExtentRef>(extent);
+    return read_ertr::make_ready_future<NodeExtentRef>(extent);
   }
 
-  tm_future<NodeExtentRef> alloc_extent_sync(
+  alloc_ertr::future<NodeExtentRef> 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<NodeExtentRef>(extent);
+    return alloc_ertr::make_ready_future<NodeExtentRef>(extent);
   }
 
-  tm_future<> retire_extent_sync(
+  retire_ertr::future<> retire_extent_sync(
       Transaction& t, NodeExtentRef _extent) {
     auto& extent = static_cast<DummyNodeExtent&>(*_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<Super::URef> get_super_sync(
+  getsuper_ertr::future<Super::URef> get_super_sync(
       Transaction& t, RootNodeTracker& tracker) {
     TRACET("got root {:#x}", t, root_laddr);
-    return tm_ertr::make_ready_future<Super::URef>(
+    return getsuper_ertr::make_ready_future<Super::URef>(
         Super::URef(new DummySuper(t, tracker, &root_laddr)));
   }
 
index bd5792dea43b38d6b9e4d8acfd70ce69474bf62c..a60dc8ece79418e429c8114ea76c1bd039295686 100644 (file)
@@ -70,7 +70,7 @@ class SeastoreNodeExtentManager final: public NodeExtentManager {
  protected:
   bool is_read_isolated() const override { return true; }
 
-  tm_future<NodeExtentRef> read_extent(
+  read_ertr::future<NodeExtentRef> read_extent(
       Transaction& t, laddr_t addr, extent_len_t len) override {
     TRACET("reading {}B at {:#x} ...", t, len, addr);
     return tm.read_extent<SeastoreNodeExtent>(t, addr, len
@@ -84,7 +84,7 @@ class SeastoreNodeExtentManager final: public NodeExtentManager {
     });
   }
 
-  tm_future<NodeExtentRef> alloc_extent(
+  alloc_ertr::future<NodeExtentRef> alloc_extent(
       Transaction& t, extent_len_t len) override {
     TRACET("allocating {}B ...", t, len);
     return tm.alloc_extent<SeastoreNodeExtent>(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<Super::URef> get_super(
+  getsuper_ertr::future<Super::URef> 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) {