]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: Remove override for osd_async_recovery_min_cost for mclock profiles 38941/head
authorSridhar Seshasayee <sseshasa@redhat.com>
Mon, 18 Jan 2021 08:34:46 +0000 (14:04 +0530)
committerSridhar Seshasayee <sseshasa@redhat.com>
Mon, 18 Jan 2021 13:37:11 +0000 (19:07 +0530)
Overriding osd_async_recovery_min_cost as part of enabling a built-in
mclock profile has the undesirable side effect of peers not choosing
the correct async recovery targets if osds are using mixed schedulers
(this could happen during upgrades or if "debug_random" is set for
osd_op_queue config option). Due to the above, osds get into a
"choose_acting" loop during peering.

The solution is to remove the override of osd_async_recovery_min_cost.

Fixes: https://tracker.ceph.com/issues/48906
Signed-off-by: Sridhar Seshasayee <sseshasa@redhat.com>
src/osd/OSD.cc
src/osd/scheduler/mClockScheduler.cc

index 1444af88a3048db1c0e4653d88c4c5ce9e1b3cb2..c53ab0a08564c0e3311703d7e4ff0d5e85aa7de9 100644 (file)
@@ -9917,7 +9917,6 @@ const char** OSD::get_tracked_conf_keys() const
     "osd_recovery_max_active",
     "osd_recovery_max_active_hdd",
     "osd_recovery_max_active_ssd",
-    "osd_async_recovery_min_cost",
     // clog & admin clog
     "clog_to_monitors",
     "clog_to_syslog",
@@ -9954,13 +9953,10 @@ void OSD::handle_conf_change(const ConfigProxy& conf,
       changed.count("osd_recovery_sleep_hybrid") ||
       changed.count("osd_recovery_max_active") ||
       changed.count("osd_recovery_max_active_hdd") ||
-      changed.count("osd_recovery_max_active_ssd") ||
-      changed.count("osd_async_recovery_min_cost")) {
+      changed.count("osd_recovery_max_active_ssd")) {
     if (cct->_conf.get_val<std::string>("osd_op_queue") == "mclock_scheduler" &&
         cct->_conf.get_val<std::string>("osd_mclock_profile") != "custom") {
       // Set ceph config option to meet QoS goals
-      // Set async_recovery_min_cost
-      cct->_conf.set_val("osd_async_recovery_min_cost", std::to_string(100));
       // Set high value for recovery max active
       uint32_t recovery_max_active = 1000;
       if (cct->_conf->osd_recovery_max_active) {
index 55a6055c61f16d63d404b08e18e86127ec1de7b4..d3f7b62d41396707a2cddcea96e64e61d033a7d6 100644 (file)
@@ -276,9 +276,6 @@ void mClockScheduler::set_high_client_ops_profile_config()
 
 void mClockScheduler::set_global_recovery_options()
 {
-  // Set low recovery min cost
-  cct->_conf.set_val("osd_async_recovery_min_cost", stringify(100));
-
   // Set high value for recovery max active and max backfill
   int rec_max_active = 1000;
   int max_backfills = 1000;