]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/os/seastore/epm: reserve the space in the cold tier before
authorXuehan Xu <xuxuehan@qianxin.com>
Thu, 9 Jul 2026 06:40:12 +0000 (14:40 +0800)
committerXuehan Xu <xuxuehan@qianxin.com>
Fri, 31 Jul 2026 01:40:20 +0000 (09:40 +0800)
demoting

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 64e9ff1ae3e811642efceeca9a2c4dbb88a0ac70..6fca0efb8fd8890b85717b9ca0217954ea20442b 100644 (file)
@@ -1129,8 +1129,17 @@ ExtentPlacementManager::BackgroundProcess::do_background_cycle()
       }
     }
 
+    if (proceed_demote &&
+        !try_reserve_cold(logical_bucket_demote_size_per_cycle)) {
+      abort_cold_usage(logical_bucket_demote_size_per_cycle, false);
+      proceed_demote = false;
+    }
+
     if (!proceed_clean_main && !proceed_clean_cold && !proceed_demote) {
-      ceph_abort_msg("no background process will start");
+      // abort when the system is full, following the enospc handling
+      // in ObjectDataHandler
+      ceph_abort_msg("no background process will start, "
+                     "this probably means the underlying disks are full");
     }
     return seastar::when_all(
       [this, FNAME, proceed_clean_main, abort_cold_cleaner_usage,
@@ -1178,7 +1187,10 @@ ExtentPlacementManager::BackgroundProcess::do_background_cycle()
         if (!proceed_demote) {
           return seastar::now();
         }
-        return logical_bucket->demote();
+        return logical_bucket->demote(
+        ).finally([this] {
+          abort_cold_usage(logical_bucket_demote_size_per_cycle, true);
+        });
       }
     ).discard_result();
   }
index a6e220a273b28f0203d48bb51462a38e2f266cc4..ee4a8a4a90cfdbed75e7554baa232d04fab17db8 100644 (file)
@@ -926,9 +926,11 @@ private:
         ceph_assert(pinboard != nullptr);
         pinboard->set_background_callback(this);
 
+        logical_bucket_demote_size_per_cycle =
+          get_conf<Option::size_t>("seastore_logical_bucket_proceed_size_per_cycle");
         logical_bucket = create_logical_bucket(
           get_conf<Option::size_t>("seastore_logical_bucket_capacity"),
-          get_conf<Option::size_t>("seastore_logical_bucket_proceed_size_per_cycle"));
+          logical_bucket_demote_size_per_cycle);
         logical_bucket->set_background_callback(this);
       }
       LOG_PREFIX(BackgroundProcess::init);
@@ -1372,6 +1374,7 @@ private:
     AsyncCleanerRef main_cleaner;
     ExtentPinboard *pinboard = nullptr;
     LogicalBucketRef logical_bucket;
+    std::size_t logical_bucket_demote_size_per_cycle = 0;
 
     /*
      * cold tier (optional, see has_cold_tier())