From: Greg Farnum Date: Mon, 2 Dec 2013 23:13:40 +0000 (-0800) Subject: OSDMonitor: prevent extreme multipliers on PG splits X-Git-Tag: v0.67.8~47^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c0c4448dc7df7900a564a6745903398cd39be7f1;p=ceph.git OSDMonitor: prevent extreme multipliers on PG splits Fixes: #6922 Backport: emperor Signed-off-by: Greg Farnum Reviewed-by: Sage Weil (cherry picked from commit f57dad6461171c903e8b5255eaed300374b00e74) Conflicts: src/mon/OSDMonitor.cc --- diff --git a/src/common/config_opts.h b/src/common/config_opts.h index 3bf696d2339..f8333819568 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -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 diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 740d82682c8..e6d6983ec96 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -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;