From 222d050f022e548cf4c14383f3e6b1bc037eefa4 Mon Sep 17 00:00:00 2001 From: Yingxin Cheng Date: Thu, 25 Aug 2022 22:26:14 +0800 Subject: [PATCH] crimson/os/seastore/async_cleaner: clean up ExtentCallbackInterface ertrs Signed-off-by: Yingxin Cheng --- src/crimson/os/seastore/async_cleaner.cc | 7 ++- src/crimson/os/seastore/async_cleaner.h | 47 +++++++------------ src/crimson/os/seastore/transaction_manager.h | 3 -- 3 files changed, 22 insertions(+), 35 deletions(-) diff --git a/src/crimson/os/seastore/async_cleaner.cc b/src/crimson/os/seastore/async_cleaner.cc index 8ce1df44a5bd5..83ec658e50ebd 100644 --- a/src/crimson/os/seastore/async_cleaner.cc +++ b/src/crimson/os/seastore/async_cleaner.cc @@ -1044,6 +1044,11 @@ AsyncCleaner::gc_reclaim_space_ret AsyncCleaner::gc_reclaim_space() stats.reclaiming_bytes = 0; reclaim_state.reset(); return sm_group->release_segment(segment_to_release + ).handle_error( + gc_reclaim_space_ertr::pass_further{}, + crimson::ct_error::assert_all{ + "AsyncCleaner::gc_reclaim_space encountered invalid error in release_segment" + } ).safe_then([this, FNAME, segment_to_release] { auto old_usage = calc_utilization(segment_to_release); if(unlikely(old_usage != 0)) { @@ -1060,7 +1065,7 @@ AsyncCleaner::gc_reclaim_space_ret AsyncCleaner::gc_reclaim_space() maybe_wake_gc_blocked_io(); }); } else { - return SegmentManager::release_ertr::now(); + return gc_reclaim_space_ertr::now(); } }); }); diff --git a/src/crimson/os/seastore/async_cleaner.h b/src/crimson/os/seastore/async_cleaner.h index b7965b5b6c5ab..110e7ae8b20f3 100644 --- a/src/crimson/os/seastore/async_cleaner.h +++ b/src/crimson/os/seastore/async_cleaner.h @@ -270,6 +270,10 @@ std::ostream &operator<<(std::ostream &, const segments_info_t &); */ class ExtentCallbackInterface { public: + using base_ertr = crimson::errorator< + crimson::ct_error::input_output_error>; + using base_iertr = trans_iertr; + virtual ~ExtentCallbackInterface() = default; /// Creates empty transaction @@ -302,10 +306,7 @@ public: } /// See Cache::get_next_dirty_extents - using get_next_dirty_extents_iertr = trans_iertr< - crimson::errorator< - crimson::ct_error::input_output_error> - >; + using get_next_dirty_extents_iertr = base_iertr; using get_next_dirty_extents_ret = get_next_dirty_extents_iertr::future< std::vector>; virtual get_next_dirty_extents_ret get_next_dirty_extents( @@ -314,14 +315,6 @@ public: size_t max_bytes ///< [in] return up to max_bytes of extents ) = 0; - using extent_mapping_ertr = crimson::errorator< - crimson::ct_error::input_output_error, - crimson::ct_error::eagain>; - using extent_mapping_iertr = trans_iertr< - crimson::errorator< - crimson::ct_error::input_output_error> - >; - /** * rewrite_extent * @@ -330,7 +323,7 @@ public: * handle finding the current instance if it is still alive and * otherwise ignore it. */ - using rewrite_extent_iertr = extent_mapping_iertr; + using rewrite_extent_iertr = base_iertr; using rewrite_extent_ret = rewrite_extent_iertr::future<>; virtual rewrite_extent_ret rewrite_extent( Transaction &t, @@ -347,7 +340,7 @@ public: * See TransactionManager::get_extent_if_live and * LBAManager::get_physical_extent_if_live. */ - using get_extents_if_live_iertr = extent_mapping_iertr; + using get_extents_if_live_iertr = base_iertr; using get_extents_if_live_ret = get_extents_if_live_iertr::future< std::list>; virtual get_extents_if_live_ret get_extents_if_live( @@ -362,10 +355,7 @@ public: * * Submits transaction without any space throttling. */ - using submit_transaction_direct_iertr = trans_iertr< - crimson::errorator< - crimson::ct_error::input_output_error> - >; + using submit_transaction_direct_iertr = base_iertr; using submit_transaction_direct_ret = submit_transaction_direct_iertr::future<>; virtual submit_transaction_direct_ret submit_transaction_direct( @@ -664,6 +654,9 @@ class AsyncCleaner : public SegmentProvider, public JournalTrimmer { } state = cleaner_state_t::STOP; public: + using base_ertr = crimson::errorator< + crimson::ct_error::input_output_error>; + /// Config struct config_t { /// Number of minimum bytes to stop trimming dirty. @@ -850,8 +843,7 @@ public: ecb = cb; } - using mount_ertr = crimson::errorator< - crimson::ct_error::input_output_error>; + using mount_ertr = base_ertr; using mount_ret = mount_ertr::future<>; mount_ret mount(); @@ -968,9 +960,6 @@ public: bool check_usage(); - using work_ertr = ExtentCallbackInterface::extent_mapping_ertr; - using work_iertr = ExtentCallbackInterface::extent_mapping_iertr; - private: /* * 10 buckets for the number of closed segments by usage @@ -1161,21 +1150,17 @@ private: bool is_running_until_halt = false; } gc_process; - using gc_ertr = work_ertr::extend_ertr< - SegmentManagerGroup::scan_valid_records_ertr - >; - gc_cycle_ret do_gc_cycle(); - using gc_trim_dirty_ertr = gc_ertr; + using gc_trim_dirty_ertr = base_ertr; using gc_trim_dirty_ret = gc_trim_dirty_ertr::future<>; gc_trim_dirty_ret gc_trim_dirty(); - using gc_trim_alloc_ertr = gc_ertr; + using gc_trim_alloc_ertr = base_ertr; using gc_trim_alloc_ret = gc_trim_alloc_ertr::future<>; gc_trim_alloc_ret gc_trim_alloc(); - using do_reclaim_space_ertr = gc_ertr; + using do_reclaim_space_ertr = base_ertr; using do_reclaim_space_ret = do_reclaim_space_ertr::future<>; do_reclaim_space_ret do_reclaim_space( const std::vector &backref_extents, @@ -1183,7 +1168,7 @@ private: std::size_t &reclaimed, std::size_t &runs); - using gc_reclaim_space_ertr = gc_ertr; + using gc_reclaim_space_ertr = base_ertr; using gc_reclaim_space_ret = gc_reclaim_space_ertr::future<>; gc_reclaim_space_ret gc_reclaim_space(); diff --git a/src/crimson/os/seastore/transaction_manager.h b/src/crimson/os/seastore/transaction_manager.h index 18cf0aed644c6..f72d74be2e694 100644 --- a/src/crimson/os/seastore/transaction_manager.h +++ b/src/crimson/os/seastore/transaction_manager.h @@ -60,9 +60,6 @@ auto repeat_eagain(F &&f) { */ class TransactionManager : public ExtentCallbackInterface { public: - using base_ertr = Cache::base_ertr; - using base_iertr = Cache::base_iertr; - TransactionManager( JournalRef journal, CacheRef cache, -- 2.39.5