From: Sage Weil Date: Tue, 28 Feb 2017 06:02:22 +0000 (-0600) Subject: mon/OSDMonitor: automatically convert crushmap if ruleset != rule id X-Git-Tag: v12.1.0~27^2~11 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=4f24d63f58a74376725ec12de429cbd3ceab7b8a;p=ceph-ci.git mon/OSDMonitor: automatically convert crushmap if ruleset != rule id Signed-off-by: Sage Weil --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 25704032012..efb55f96ae0 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -544,6 +544,23 @@ void OSDMonitor::on_active() void OSDMonitor::on_restart() { last_osd_report.clear(); + + if (mon->is_leader()) { + // fix ruleset != ruleid + if (osdmap.crush->has_legacy_rulesets() && + !osdmap.crush->has_multirule_rulesets()) { + CrushWrapper newcrush; + _get_pending_crush(newcrush); + int r = newcrush.renumber_rules_by_ruleset(); + if (r >= 0) { + dout(1) << __func__ << " crush map has ruleset != rule id; fixing" << dendl; + pending_inc.crush.clear(); + newcrush.encode(pending_inc.crush, mon->get_quorum_con_features()); + } else { + dout(10) << __func__ << " unable to renumber rules by ruleset" << dendl; + } + } + } } void OSDMonitor::on_shutdown()