]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/seastore: simplify errors in OnodeManager
authorYingxin Cheng <yingxin.cheng@intel.com>
Fri, 14 May 2021 07:42:35 +0000 (15:42 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Fri, 21 May 2021 06:47:48 +0000 (14:47 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/onode_manager.h
src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.cc
src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h
src/crimson/os/seastore/seastore.cc
src/crimson/os/seastore/transaction_manager.h

index 95045bc411ab2f6e4e97432b7517ee3f1de1eb58..abb4a92ef490cdacc80f758b6e3b5e571321b8f1 100644 (file)
 #include "include/ceph_assert.h"
 #include "common/hobject.h"
 
+#include "crimson/common/errorator.h"
 #include "crimson/os/seastore/onode.h"
 #include "crimson/os/seastore/seastore_types.h"
-#include "crimson/os/seastore/transaction_manager.h"
 #include "crimson/osd/exceptions.h"
 
 namespace crimson::os::seastore {
 
 class OnodeManager {
-  using base_ertr = TransactionManager::base_ertr;
+  using base_ertr = crimson::errorator<
+    crimson::ct_error::eagain>;
+
 public:
-  using mkfs_ertr = TransactionManager::mkfs_ertr;
+  using mkfs_ertr = base_ertr;
   using mkfs_ret = mkfs_ertr::future<>;
   virtual mkfs_ret mkfs(Transaction &t) = 0;
 
index bdd8ba556a0f87219d3557abce566acf633f5a91..95628b2ecf0e49c20865cf348b01478d02f56052 100644 (file)
@@ -12,14 +12,7 @@ FLTreeOnodeManager::contains_onode_ret FLTreeOnodeManager::contains_onode(
   Transaction &trans,
   const ghobject_t &hoid)
 {
-  return tree.contains(
-    trans, hoid
-  ).handle_error(
-    contains_onode_ertr::pass_further{},
-    crimson::ct_error::assert_all{
-      "Invalid error in FLTreeOnodeManager::contains_onode"
-    }
-  );
+  return tree.contains(trans, hoid);
 }
 
 FLTreeOnodeManager::get_onode_ret FLTreeOnodeManager::get_onode(
@@ -39,12 +32,7 @@ FLTreeOnodeManager::get_onode_ret FLTreeOnodeManager::get_onode(
     return seastar::make_ready_future<OnodeRef>(
       val
     );
-  }).handle_error(
-    get_onode_ertr::pass_further{},
-    crimson::ct_error::assert_all{
-      "Invalid error in FLTreeOnodeManager::get_onode"
-    }
-  );
+  });
 }
 
 FLTreeOnodeManager::get_or_create_onode_ret
@@ -71,12 +59,7 @@ FLTreeOnodeManager::get_or_create_onode(
     return seastar::make_ready_future<OnodeRef>(
       val
     );
-  }).handle_error(
-    get_or_create_onode_ertr::pass_further{},
-    crimson::ct_error::assert_all{
-      "Invalid error in FLTreeOnodeManager::get_or_create_onode"
-    }
-  );
+  });
 }
 
 FLTreeOnodeManager::get_or_create_onodes_ret
@@ -123,12 +106,7 @@ FLTreeOnodeManager::write_dirty_ret FLTreeOnodeManager::write_dirty(
       default:
         __builtin_unreachable();
       }
-    }).handle_error(
-      write_dirty_ertr::pass_further{},
-      crimson::ct_error::assert_all{
-        "Invalid error in FLTreeOnodeManager::write_dirty"
-      }
-    );
+    });
 }
 
 FLTreeOnodeManager::erase_onode_ret FLTreeOnodeManager::erase_onode(
@@ -180,12 +158,7 @@ FLTreeOnodeManager::list_onodes_ret FLTreeOnodeManager::list_onodes(
             std::move(ret));
       });
     });
-  }).handle_error(
-    list_onodes_ertr::pass_further{},
-    crimson::ct_error::assert_all{
-      "Invalid error in FLTreeOnodeManager::list_onodes"
-    }
-  );
+  });
 }
 
 FLTreeOnodeManager::~FLTreeOnodeManager() {}
index 2a24dc1829068f8981eceb88925489f349cc8419..ca4ccf478d6e99608f345e220c0aaaf0668d1423 100644 (file)
@@ -99,13 +99,7 @@ public:
            tm, laddr_t{})) {}
 
   mkfs_ret mkfs(Transaction &t) {
-    return tree.mkfs(t
-    ).handle_error(
-      mkfs_ertr::pass_further{},
-      crimson::ct_error::assert_all{
-        "Invalid error in FLTreeOnodeManager::mkfs"
-      }
-    );
+    return tree.mkfs(t);
   }
 
   contains_onode_ret contains_onode(
index 8ed529b29f58b2291bb0566c4c9577f5b79b2eb2..e286a173b808bc84d45342051da07e184a36e54c 100644 (file)
@@ -120,7 +120,7 @@ SeaStore::list_objects(CollectionRef ch,
   return seastar::do_with(
       RetType(),
       [this, start, end, limit] (auto& ret) {
-    return repeat_eagain([this, start, end, limit, &ret] {
+    return repeat_eagain2([this, start, end, limit, &ret] {
       return seastar::do_with(
           transaction_manager->create_transaction(),
           [this, start, end, limit, &ret] (auto& t) {
@@ -129,14 +129,10 @@ SeaStore::list_objects(CollectionRef ch,
           ret = std::move(_ret);
         });
       });
-    }).safe_then([&ret] {
+    }).then([&ret] {
       return std::move(ret);
     });
-  }).handle_error(
-    crimson::ct_error::assert_all{
-      "Invalid error in SeaStore::list_objects"
-    }
-  );
+  });
 }
 
 seastar::future<CollectionRef> SeaStore::create_new_collection(const coll_t& cid)
index 55119476bac87f0a7e5993e4a9998004dce0b33a..47401194c3347026470b84b996f1187ad8746496 100644 (file)
@@ -54,6 +54,29 @@ auto repeat_eagain(F &&f) {
     });
 }
 
+// non-errorated version
+template <typename F>
+auto repeat_eagain2(F &&f) {
+  LOG_PREFIX("repeat_eagain");
+  return seastar::do_with(
+    std::forward<F>(f),
+    [FNAME](auto &f) {
+      return seastar::repeat(
+       [FNAME, &f] {
+         return std::invoke(f
+         ).safe_then([] {
+           return seastar::stop_iteration::yes;
+         }).handle_error(
+           [FNAME](const crimson::ct_error::eagain &e) {
+             DEBUG("hit eagain, restarting");
+             return seastar::make_ready_future<seastar::stop_iteration>(
+                 seastar::stop_iteration::no);
+           }
+         );
+       });
+    });
+}
+
 /**
  * TransactionManager
  *