]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/async_cleaner: clean up ExtentCallbackInterface ertrs
authorYingxin Cheng <yingxin.cheng@intel.com>
Thu, 25 Aug 2022 14:26:14 +0000 (22:26 +0800)
committerYingxin Cheng <yingxin.cheng@intel.com>
Fri, 26 Aug 2022 09:47:30 +0000 (17:47 +0800)
Signed-off-by: Yingxin Cheng <yingxin.cheng@intel.com>
src/crimson/os/seastore/async_cleaner.cc
src/crimson/os/seastore/async_cleaner.h
src/crimson/os/seastore/transaction_manager.h

index 8ce1df44a5bd503c4981ead9b2d9e1234778f875..83ec658e50ebd2dd2a02d165e9b1794f93d888b7 100644 (file)
@@ -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();
         }
       });
     });
index b7965b5b6c5ab9280b6221baf1d8b2b054123c0b..110e7ae8b20f3c9eca2b4dc31b6492edef448b5d 100644 (file)
@@ -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<base_ertr>;
+
   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<CachedExtentRef>>;
   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<CachedExtentRef>>;
   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<CachedExtentRef> &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();
 
index 18cf0aed644c636a12677765d948c997eef1a94b..f72d74be2e6941c640b74f5855571b9e54ef31b4 100644 (file)
@@ -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,