From a70eaabcfc1cc1dfb9b6ba2d7f71b3d76496eb55 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 3 Mar 2016 13:49:03 -0500 Subject: [PATCH] mon: make reweight-by-* max_change an argument Signed-off-by: Sage Weil --- src/common/config_opts.h | 1 - src/mon/MonCommands.h | 2 ++ src/mon/OSDMonitor.cc | 11 +++++++++-- src/mon/OSDMonitor.h | 4 +++- 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/common/config_opts.h b/src/common/config_opts.h index 1eb307f766263..5ebe5fb65022f 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -282,7 +282,6 @@ OPTION(mon_max_log_entries_per_event, OPT_INT, 4096) OPTION(mon_reweight_min_pgs_per_osd, OPT_U64, 10) // min pgs per osd for reweight-by-pg command OPTION(mon_reweight_min_bytes_per_osd, OPT_U64, 100*1024*1024) // min bytes per osd for reweight-by-utilization command OPTION(mon_reweight_max_osds, OPT_INT, 4) // max osds to change per reweight-by-* command -OPTION(mon_reweight_max_change, OPT_FLOAT, 0.05) // max change to each osd per reweight-by-* command OPTION(mon_health_data_update_interval, OPT_FLOAT, 60.0) OPTION(mon_health_to_clog, OPT_BOOL, true) OPTION(mon_health_to_clog_interval, OPT_INT, 3600) diff --git a/src/mon/MonCommands.h b/src/mon/MonCommands.h index 247bccba95886..be6f99a1c97a0 100644 --- a/src/mon/MonCommands.h +++ b/src/mon/MonCommands.h @@ -703,12 +703,14 @@ COMMAND("osd pool stats " \ "osd", "r", "cli,rest") COMMAND("osd reweight-by-utilization " \ "name=oload,type=CephInt,range=100,req=false " \ + "name=max_change,type=CephFloat,req=false " \ "name=no_increasing,type=CephChoices,strings=--no-increasing,req=false " \ "name=sure,type=CephChoices,strings=--yes-i-really-mean-it,req=false", \ "reweight OSDs by utilization [overload-percentage-for-consideration, default 120]", \ "osd", "rw", "cli,rest") COMMAND("osd reweight-by-pg " \ "name=oload,type=CephInt,range=100,req=false " \ + "name=max_change,type=CephFloat,req=false " \ "name=no_increasing,type=CephChoices,strings=--no-increasing,req=false " \ "name=pools,type=CephPoolname,n=N,req=false " \ "name=sure,type=CephChoices,strings=--yes-i-really-mean-it,req=false", \ diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 3bf56bea08aac..edb7cd6e79151 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -480,6 +480,7 @@ void OSDMonitor::update_logger() */ int OSDMonitor::reweight_by_utilization(int oload, std::string& out_str, bool by_pg, const set *pools, + float max_change, bool no_increasing, bool sure) { if (oload <= 100) { @@ -605,7 +606,7 @@ int OSDMonitor::reweight_by_utilization(int oload, std::string& out_str, // to represent e.g. differing storage capacities unsigned weight = osdmap.get_weight(p->first); unsigned new_weight = (unsigned)((average_util / util) * (float)weight); - new_weight = MAX(new_weight, weight - g_conf->mon_reweight_max_change); + new_weight = MAX(new_weight, weight - max_change); if (sure) { pending_inc.new_weight[p->first] = new_weight; changed = true; @@ -622,7 +623,7 @@ int OSDMonitor::reweight_by_utilization(int oload, std::string& out_str, // assign a higher weight.. if we can. unsigned weight = osdmap.get_weight(p->first); unsigned new_weight = (unsigned)((average_util / util) * (float)weight); - new_weight = MIN(new_weight, weight + g_conf->mon_reweight_max_change); + new_weight = MIN(new_weight, weight + max_change); if (new_weight > 0x10000) new_weight = 0x10000; if (new_weight > weight) { @@ -7451,11 +7452,14 @@ done: } else if (prefix == "osd reweight-by-utilization") { int64_t oload; cmd_getval(g_ceph_context, cmdmap, "oload", oload, int64_t(120)); + float max_change; + cmd_getval(g_ceph_context, cmdmap, "max_change", max_change); string no_increasing, sure; cmd_getval(g_ceph_context, cmdmap, "no_increasing", no_increasing); cmd_getval(g_ceph_context, cmdmap, "sure", sure); string out_str; err = reweight_by_utilization(oload, out_str, false, NULL, + max_change, no_increasing == "--no-increasing", sure == "--yes-i-really-mean-it"); if (err < 0) { @@ -7484,12 +7488,15 @@ done: } pools.insert(pool); } + float max_change; + cmd_getval(g_ceph_context, cmdmap, "max_change", max_change); string no_increasing, sure; cmd_getval(g_ceph_context, cmdmap, "no_increasing", no_increasing); cmd_getval(g_ceph_context, cmdmap, "sure", sure); string out_str; err = reweight_by_utilization(oload, out_str, true, pools.empty() ? NULL : &pools, + max_change, no_increasing == "--no-increasing", sure == "--yes-i-really-mean-it"); if (err < 0) { diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index 07cbfcc6e20e1..fb3ea768f8c29 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -228,7 +228,9 @@ public: MonOpRequestRef req = MonOpRequestRef()); private: int reweight_by_utilization(int oload, std::string& out_str, bool by_pg, - const set *pools, bool no_increasing, + const set *pools, + float max_change, + bool no_increasing, bool sure); void print_utilization(ostream &out, Formatter *f, bool tree) const; -- 2.39.5