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()