]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/os/seastore/epm: add try_reserve_main and abort_main_usage
authorXuehan Xu <xuxuehan@qianxin.com>
Thu, 9 Jul 2026 05:36:51 +0000 (13:36 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Fri, 10 Jul 2026 14:24:38 +0000 (22:24 +0800)
As the counterpart of try_reserve_cold and abort_cold_usage

Signed-off-by: Xuehan Xu <xuxuehan@qianxin.com>
src/crimson/os/seastore/extent_placement_manager.cc
src/crimson/os/seastore/extent_placement_manager.h

index c143d188d4ca5998074bf620b3f5fc75715d86d5..62176db27de5a8ee6c5b8287dff912748ede104c 100644 (file)
@@ -976,23 +976,35 @@ void ExtentPlacementManager::BackgroundProcess::abort_cold_usage(
   }
 }
 
+bool ExtentPlacementManager::BackgroundProcess::try_reserve_main(
+  std::size_t usage)
+{
+  return main_cleaner->try_reserve_projected_usage(usage);
+}
+
 reserve_cleaner_result_t
 ExtentPlacementManager::BackgroundProcess::try_reserve_cleaner(
   const cleaner_usage_t &usage)
 {
   return {
-    main_cleaner->try_reserve_projected_usage(usage.main_usage),
+    try_reserve_main(usage.main_usage),
     try_reserve_cold(usage.cold_ool_usage)
   };
 }
 
+void ExtentPlacementManager::BackgroundProcess::abort_main_usage(
+  std::size_t usage, bool success)
+{
+  if (success) {
+    main_cleaner->release_projected_usage(usage);
+  }
+}
+
 void ExtentPlacementManager::BackgroundProcess::abort_cleaner_usage(
   const cleaner_usage_t &usage,
   const reserve_cleaner_result_t &result)
 {
-  if (result.reserve_main_success) {
-    main_cleaner->release_projected_usage(usage.main_usage);
-  }
+  abort_main_usage(usage.main_usage, result.reserve_main_success);
   abort_cold_usage(usage.cold_ool_usage, result.reserve_cold_success);
 }
 
@@ -1183,16 +1195,16 @@ seastar::future<> ExtentPlacementManager::BackgroundProcess::run_promote()
 
     return seastar::futurize_invoke([this] {
       if (pinboard->should_promote()) {
-        auto usage = cleaner_usage_t{pinboard->get_promotion_size(), 0};
-        auto res = try_reserve_cleaner(usage);
-        if (res.is_successful()) {
+        auto usage = pinboard->get_promotion_size();
+        auto reserved = try_reserve_main(usage);
+        if (reserved) {
           return pinboard->promote(
-          ).finally([this, usage, res] {
-            abort_cleaner_usage(usage, res);
+          ).finally([this, usage] {
+            abort_main_usage(usage, true);
           });
         } else {
           // reserve usage failed, block
-          abort_cleaner_usage(usage, res);
+          abort_main_usage(usage, false);
         }
       } // shouldn't promote, block
 
index be22735b904914d27e6a565c03e53ba497ca3bdf..55c78c6661f97c3280fee1ace317b9c0f34b4170 100644 (file)
@@ -1127,7 +1127,9 @@ private:
   private:
     // reserve helpers
     bool try_reserve_cold(std::size_t usage);
+    bool try_reserve_main(std::size_t usage);
     void abort_cold_usage(std::size_t usage, bool success);
+    void abort_main_usage(std::size_t usage, bool success);
 
     reserve_cleaner_result_t try_reserve_cleaner(const cleaner_usage_t &usage);
     void abort_cleaner_usage(const cleaner_usage_t &usage,