From 70cc6813262507405f3f726d21cede165fe87660 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 15 Oct 2013 11:22:16 -0700 Subject: [PATCH] mon/PGMonitor: set floor below which we do not warn about objects/pg If a cluster has very few objects, do not generate warnings when the objects/pg for a pool diverges from the cluster average. This avoids spurious errors when you have a relatively empty cluster and a lone pool with a modest number of objects is too far off the (mostly meaningless) cluster-wide average. Also include a per-pool min so we ignore mostly-empty pools. Fixes: #6521 Signed-off-by: Sage Weil --- src/common/config_opts.h | 2 ++ src/mon/PGMonitor.cc | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/common/config_opts.h b/src/common/config_opts.h index 2d3f981379b8..08c2b0b4caed 100644 --- a/src/common/config_opts.h +++ b/src/common/config_opts.h @@ -160,6 +160,8 @@ OPTION(mon_pg_create_interval, OPT_FLOAT, 30.0) // no more than every 30s OPTION(mon_pg_stuck_threshold, OPT_INT, 300) // number of seconds after which pgs can be considered inactive, unclean, or stale (see doc/control.rst under dump_stuck for more info) OPTION(mon_pg_warn_min_per_osd, OPT_INT, 20) // min # pgs per (in) osd before we warn the admin OPTION(mon_pg_warn_max_object_skew, OPT_FLOAT, 10.0) // max skew few average in objects per pg +OPTION(mon_pg_warn_min_objects, OPT_INT, 10000) // do not warn below this object # +OPTION(mon_pg_warn_min_pool_objects, OPT_INT, 1000) // do not warn on pools below this object # OPTION(mon_osd_full_ratio, OPT_FLOAT, .95) // what % full makes an OSD "full" OPTION(mon_osd_nearfull_ratio, OPT_FLOAT, .85) // what % full makes an OSD near full OPTION(mon_globalid_prealloc, OPT_INT, 100) // how many globalids to prealloc diff --git a/src/mon/PGMonitor.cc b/src/mon/PGMonitor.cc index 2881e4985e3d..c14872d87ef1 100644 --- a/src/mon/PGMonitor.cc +++ b/src/mon/PGMonitor.cc @@ -1911,7 +1911,9 @@ void PGMonitor::get_health(list >& summary, detail->push_back(make_pair(HEALTH_WARN, ss.str())); } int average_objects_per_pg = pg_map.pg_sum.stats.sum.num_objects / pg_map.pg_stat.size(); - if (average_objects_per_pg > 0) { + if (average_objects_per_pg > 0 && + pg_map.pg_sum.stats.sum.num_objects >= g_conf->mon_pg_warn_min_objects && + p->second.stats.sum.num_objects >= g_conf->mon_pg_warn_min_pool_objects) { int objects_per_pg = p->second.stats.sum.num_objects / pi->get_pg_num(); float ratio = (float)objects_per_pg / (float)average_objects_per_pg; if (g_conf->mon_pg_warn_max_object_skew > 0 && -- 2.47.3