]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
OSDMonitor: prevent extreme multipliers on PG splits
authorGreg Farnum <greg@inktank.com>
Mon, 2 Dec 2013 23:13:40 +0000 (15:13 -0800)
committerGreg Farnum <greg@inktank.com>
Tue, 25 Feb 2014 21:08:40 +0000 (13:08 -0800)
Fixes: #6922
Backport: emperor

Signed-off-by: Greg Farnum <greg@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
(cherry picked from commit f57dad6461171c903e8b5255eaed300374b00e74)

Conflicts:

src/mon/OSDMonitor.cc

src/common/config_opts.h
src/mon/OSDMonitor.cc

index 3bf696d233908714cdd9cf3434eea8f76881b650..f83338195682102ed22576e0c250e019b08b3761 100644 (file)
@@ -147,6 +147,7 @@ OPTION(mon_osd_down_out_subtree_limit, OPT_STR, "rack")   // smallest crush unit
 OPTION(mon_osd_min_up_ratio, OPT_DOUBLE, .3)    // min osds required to be up to mark things down
 OPTION(mon_osd_min_in_ratio, OPT_DOUBLE, .3)   // min osds required to be in to mark things out
 OPTION(mon_osd_max_op_age, OPT_DOUBLE, 32)     // max op age before we get concerned (make it a power of 2)
+OPTION(mon_osd_max_split_ratio, OPT_INT, 8) // largest multiple allowed when doing PG split
 OPTION(mon_stat_smooth_intervals, OPT_INT, 2)  // smooth stats over last N PGMap maps
 OPTION(mon_lease, OPT_FLOAT, 5)       // lease interval
 OPTION(mon_lease_renew_interval, OPT_FLOAT, 3) // on leader, to renew the lease
index 740d82682c85cc17b9a242ec6e43373793538706..e6d6983ec9675ea44121977f4ceff341bda8de7b 100644 (file)
@@ -3610,6 +3610,10 @@ done:
       } else if (var == "pg_num") {
        if (n <= p->get_pg_num()) {
          ss << "specified pg_num " << n << " <= current " << p->get_pg_num();
+       } else if (n > (int)p->get_pg_num() * g_conf->mon_osd_max_split_ratio) {
+         ss << "specified pg_num " << n << " is too large (> current "
+            << p->get_pg_num() << '*' << g_conf->mon_osd_max_split_ratio << ')';
+         err = -E2BIG;
        } else if (!mon->pgmon()->pg_map.creating_pgs.empty()) {
          ss << "currently creating pgs, wait";
          err = -EAGAIN;