From c0c4448dc7df7900a564a6745903398cd39be7f1 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Mon, 2 Dec 2013 15:13:40 -0800 Subject: [PATCH] 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 --- src/common/config_opts.h | 1 + src/mon/OSDMonitor.cc | 4 ++++ 2 files changed, 5 insertions(+) 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; -- 2.47.3