]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: add mon_reweight_max_change option which limits reweight-by-*
authorDan van der Ster <daniel.vanderster@cern.ch>
Fri, 26 Feb 2016 21:28:46 +0000 (22:28 +0100)
committerSage Weil <sage@redhat.com>
Tue, 1 Mar 2016 16:37:58 +0000 (11:37 -0500)
Add a configurable mon_reweight_max_change which limits be default
the reweight-by-* commands to only change an OSDs weight by 0.05.

Signed-off-by: Dan van der Ster <daniel.vanderster@cern.ch>
src/common/config_opts.h
src/mon/OSDMonitor.cc

index 03d4c6abf00844b41054e75ffb6df109afa58d39..525861bf41931c19ef59e4ed39c5128d3095b4e3 100644 (file)
@@ -281,6 +281,7 @@ OPTION(mon_daemon_bytes, OPT_U64, 400ul << 20)  // mds, osd message memory cap (
 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_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)
index 997b4aa721431810189406d1aaa90ee00633d5d4..5d42c1757e5e552f4778862f705c01838fb581bc 100644 (file)
@@ -586,6 +586,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);
       if (sure) {
        pending_inc.new_weight[p->first] = new_weight;
        changed = true;
@@ -600,8 +601,9 @@ 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);
       if (new_weight > 0x10000)
-       new_weight = 0x10000;
+          new_weight = 0x10000;
       if (new_weight > weight) {
        sep = ", ";
        if (sure) {