]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/PGMonitor: bug fix pg monitor get crush rule 5404/head
authorXinze Chi <xmdxcxz@gmail.com>
Fri, 3 Jul 2015 10:27:13 +0000 (18:27 +0800)
committerNathan Cutler <ncutler@suse.com>
Wed, 29 Jul 2015 13:23:45 +0000 (15:23 +0200)
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 <zay11022@gmail.com>
Signed-off-by: Xinze Chi <xmdxcxz@gmail.com>
(cherry picked from commit 498793393c81c0a8e37911237969fba495a3a183)

src/mon/PGMonitor.cc

index 3e0523bba898dcfcb9bb5dd93c7e5e8898a446d9..dd65da511e6e5d6a86cc877d18133b05caa1c871 100644 (file)
@@ -1000,8 +1000,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 ||