From: Xinze Chi Date: Fri, 3 Jul 2015 10:27:13 +0000 (+0800) Subject: mon/PGMonitor: bug fix pg monitor get crush rule X-Git-Tag: v0.94.4~42^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=43a72e47c4adae674e02bb262645d88ac528e2be;p=ceph.git mon/PGMonitor: bug fix pg monitor get crush rule when some rules have been deleted before, the index in array of crush->rules is not always equals to crush_ruleset of pool. Fixes: #12210 Reported-by: Ning Yao Signed-off-by: Xinze Chi (cherry picked from commit 498793393c81c0a8e37911237969fba495a3a183) --- diff --git a/src/mon/PGMonitor.cc b/src/mon/PGMonitor.cc index e699efb652b7b..60b98d6aff0da 100644 --- a/src/mon/PGMonitor.cc +++ b/src/mon/PGMonitor.cc @@ -1023,8 +1023,8 @@ bool PGMonitor::register_new_pgs() ++p) { int64_t poolid = p->first; pg_pool_t &pool = p->second; - int ruleno = pool.get_crush_ruleset(); - if (!osdmap->crush->rule_exists(ruleno)) + int ruleno = osdmap->crush->find_rule(pool.get_crush_ruleset(), pool.get_type(), pool.get_size()); + if (ruleno < 0 || !osdmap->crush->rule_exists(ruleno)) continue; if (pool.get_last_change() <= pg_map.last_pg_scan ||