]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/background_recovery: switch to unified SchedulerClass and introduce get_avera...
authorMohit Agrawal <moagrawa@redhat.com>
Mon, 28 Jul 2025 13:19:14 +0000 (18:49 +0530)
committerMohit Agrawal <moagrawa@redhat.com>
Wed, 3 Dec 2025 12:30:17 +0000 (18:00 +0530)
1)  Replace usage of crimson::osd::scheduler::scheduler_class_t
    with unified SchedulerClass
2) Add priority to scheduler params structure
3) Introduce get_average_object_size for pg

Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
src/crimson/osd/osd_operations/background_recovery.cc
src/crimson/osd/osd_operations/background_recovery.h
src/crimson/osd/pg.h
src/crimson/osd/pg_recovery.cc

index d835e540fa2b3c71dfd1e2b33f5999962bc74455..8d5f3a67787224e4c4e3b53d1058f2bb4449bf29 100644 (file)
@@ -37,7 +37,7 @@ BackgroundRecoveryT<T>::BackgroundRecoveryT(
   Ref<PG> pg,
   ShardServices &ss,
   epoch_t epoch_started,
-  crimson::osd::scheduler::scheduler_class_t scheduler_class,
+  SchedulerClass scheduler_class,
   float delay)
   : pg(pg),
     epoch_started(epoch_started),
@@ -94,7 +94,7 @@ UrgentRecovery::UrgentRecovery(
     ShardServices& ss,
     epoch_t epoch_started)
   : BackgroundRecoveryT{pg, ss, epoch_started,
-                        crimson::osd::scheduler::scheduler_class_t::immediate},
+                        SchedulerClass::immediate},
     soid{soid}, need(need)
 {
 }
@@ -147,7 +147,7 @@ PglogBasedRecovery::PglogBasedRecovery(
       std::move(pg),
       ss,
       epoch_started,
-      crimson::osd::scheduler::scheduler_class_t::background_recovery,
+      SchedulerClass::background_recovery,
       delay)
 {}
 
index edfa11b660cc3cb11be9c6de182d575c50ed4e59..fb624ca69d0966432999012e99a6ceaf1fd4d6fb 100644 (file)
@@ -25,7 +25,7 @@ public:
     Ref<PG> pg,
     ShardServices &ss,
     epoch_t epoch_started,
-    crimson::osd::scheduler::scheduler_class_t scheduler_class, float delay = 0);
+    SchedulerClass scheduler_class, float delay = 0);
 
   virtual void print(std::ostream &) const;
   seastar::future<> start();
@@ -38,8 +38,12 @@ protected:
 private:
   virtual void dump_detail(Formatter *f) const;
   crimson::osd::scheduler::params_t get_scheduler_params() const {
+    int cost = static_cast<int>(std::max<int64_t>(1, pg->get_average_object_size()));
+    unsigned priority = pg->get_recovery_op_priority();
+
     return {
-      1, // cost
+      cost, // cost
+      priority, // priority
       0, // owner
       scheduler_class
     };
@@ -47,7 +51,7 @@ private:
   using do_recovery_ret_t = typename PhasedOperationT<T>::template interruptible_future<seastar::stop_iteration>;
   virtual do_recovery_ret_t do_recovery() = 0;
   ShardServices &ss;
-  const crimson::osd::scheduler::scheduler_class_t scheduler_class;
+  const SchedulerClass scheduler_class;
 };
 
 /// represent a recovery initiated for serving a client request
index b13299f94a1b0770fc8414b966f703abc6f55469..c840648975d13ffde2c6bda8f59c5c872b94f9e2 100644 (file)
@@ -936,9 +936,17 @@ public:
     int *return_code,
     std::vector<pg_log_op_return_item_t> *op_returns) const;
   int get_recovery_op_priority() const {
-    int64_t pri = 0;
-    get_pgpool().info.opts.get(pool_opts_t::RECOVERY_OP_PRIORITY, &pri);
-    return  pri > 0 ? pri : crimson::common::local_conf()->osd_recovery_op_priority;
+    return peering_state.get_recovery_op_priority();
+  }
+  int64_t get_average_object_size() {
+    const auto& stats = get_info().stats.stats.sum;
+    auto num_objects = stats.num_objects;
+    auto num_bytes =   stats.num_bytes;
+
+    if (num_objects <= 0)
+      return 0;
+
+    return num_bytes / num_objects;
   }
   seastar::future<> mark_unfound_lost(int) {
     // TODO: see PrimaryLogPG::mark_all_unfound_lost()
index eb120c9588d73e2f58192472a3c8fde2f425cd1c..48d12d6c92e824ed952999e15b3d9c038af70e56 100644 (file)
@@ -519,7 +519,7 @@ PGRecovery::recover_object_with_throttle(
   auto releaser = co_await interruptor::make_interruptible(
     pg->get_shard_services().get_throttle(
       crimson::osd::scheduler::params_t{
-       1, 0, crimson::osd::scheduler::scheduler_class_t::background_best_effort
+       1, 0, 0, SchedulerClass::background_best_effort
       }));
   DEBUGDPP("got throttle: {} {}", pg->get_dpp(), soid, need);
   co_await pg->get_recovery_backend()->recover_object(soid, need);