]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mon/OSDMonitor: automatically convert crushmap if ruleset != rule id
authorSage Weil <sage@redhat.com>
Tue, 28 Feb 2017 06:02:22 +0000 (00:02 -0600)
committerSage Weil <sage@redhat.com>
Mon, 19 Jun 2017 23:09:06 +0000 (19:09 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/mon/OSDMonitor.cc

index 25704032012e3bb19d9a0f00ef1e9f19af49cc0a..efb55f96ae0537d79351d8335ed6bf6e267c13d4 100644 (file)
@@ -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()