From bdde0426f59d4364eee7e3d42818b23365f16426 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Fri, 14 May 2021 15:42:35 +0800 Subject: [PATCH] crimson/seastore: simplify errors in OnodeManager Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/onode_manager.h | 8 ++-- .../staged-fltree/fltree_onode_manager.cc | 37 +++---------------- .../staged-fltree/fltree_onode_manager.h | 8 +--- src/crimson/os/seastore/seastore.cc | 10 ++--- src/crimson/os/seastore/transaction_manager.h | 23 ++++++++++++ 5 files changed, 37 insertions(+), 49 deletions(-) diff --git a/src/crimson/os/seastore/onode_manager.h b/src/crimson/os/seastore/onode_manager.h index 95045bc411ab2..abb4a92ef490c 100644 --- a/src/crimson/os/seastore/onode_manager.h +++ b/src/crimson/os/seastore/onode_manager.h @@ -13,17 +13,19 @@ #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; diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.cc b/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.cc index bdd8ba556a0f8..95628b2ecf0e4 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.cc +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.cc @@ -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( 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( 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() {} diff --git a/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h b/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h index 2a24dc1829068..ca4ccf478d6e9 100644 --- a/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h +++ b/src/crimson/os/seastore/onode_manager/staged-fltree/fltree_onode_manager.h @@ -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( diff --git a/src/crimson/os/seastore/seastore.cc b/src/crimson/os/seastore/seastore.cc index 8ed529b29f58b..e286a173b808b 100644 --- a/src/crimson/os/seastore/seastore.cc +++ b/src/crimson/os/seastore/seastore.cc @@ -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 SeaStore::create_new_collection(const coll_t& cid) diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index 55119476bac87..47401194c3347 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -54,6 +54,29 @@ auto repeat_eagain(F &&f) { }); } +// non-errorated version +template +auto repeat_eagain2(F &&f) { + LOG_PREFIX("repeat_eagain"); + return seastar::do_with( + std::forward(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::no); + } + ); + }); + }); +} + /** * TransactionManager * -- 2.39.5