]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mon: apply monmap features to quorum requirements
authorSage Weil <sage@redhat.com>
Mon, 6 Feb 2017 17:30:34 +0000 (12:30 -0500)
committerSage Weil <sage@redhat.com>
Tue, 7 Feb 2017 15:36:32 +0000 (10:36 -0500)
Previously this was indirect..

 monmap requirements -> compatset -> quorum requirements

However, how that we are consistently using the monmap features, we no
longer need to use the compatset features when the monmap already
communicates the same thing.  Rename the helper to reflect that
quorum requirements come from both the compatset and the monmap.

Signed-off-by: Sage Weil <sage@redhat.com>
src/mon/Monitor.cc
src/mon/Monitor.h

index b951f0675df154e9814f7b3fae18f3670bd38ca0..f441a69cf4d04d40e994fbeef0b070f7ca0aa897 100644 (file)
@@ -547,7 +547,7 @@ void Monitor::read_features()
   read_features_off_disk(store, &features);
   dout(10) << "features " << features << dendl;
 
-  apply_compatset_features_to_quorum_requirements();
+  calc_quorum_requirements();
   dout(10) << "required_features " << required_features << dendl;
 }
 
@@ -2146,7 +2146,7 @@ void Monitor::_apply_compatset_features(CompatSet &new_features)
     write_features(t);
     store->apply_transaction(t);
 
-    apply_compatset_features_to_quorum_requirements();
+    calc_quorum_requirements();
   }
 }
 
@@ -2191,13 +2191,16 @@ void Monitor::apply_monmap_to_compatset_features()
     assert(HAVE_FEATURE(quorum_con_features, SERVER_KRAKEN));
     new_features.incompat.insert(CEPH_MON_FEATURE_INCOMPAT_KRAKEN);
   }
+
   dout(5) << __func__ << dendl;
   _apply_compatset_features(new_features);
 }
 
-void Monitor::apply_compatset_features_to_quorum_requirements()
+void Monitor::calc_quorum_requirements()
 {
   required_features = 0;
+
+  // compatset
   if (features.incompat.contains(CEPH_MON_FEATURE_INCOMPAT_OSD_ERASURE_CODES)) {
     required_features |= CEPH_FEATURE_OSD_ERASURE_CODES;
   }
@@ -2213,6 +2216,16 @@ void Monitor::apply_compatset_features_to_quorum_requirements()
   if (features.incompat.contains(CEPH_MON_FEATURE_INCOMPAT_KRAKEN)) {
     required_features |= CEPH_FEATUREMASK_SERVER_KRAKEN;
   }
+
+  // monmap
+  if (monmap->get_required_features().contains_all(
+       ceph::features::mon::FEATURE_KRAKEN)) {
+    required_features |= CEPH_FEATUREMASK_SERVER_KRAKEN;
+  }
+  if (monmap->get_required_features().contains_all(
+       ceph::features::mon::FEATURE_LUMINOUS)) {
+    required_features |= CEPH_FEATUREMASK_SERVER_LUMINOUS;
+  }
   dout(10) << __func__ << " required_features " << required_features << dendl;
 }
 
index f527d71bf1bb8268d14afb976b7850479b71b939..3e2ab50baaac9b3a23a09c9be6e92d8043381848 100644 (file)
@@ -577,7 +577,7 @@ public:
   }
   void apply_quorum_to_compatset_features();
   void apply_monmap_to_compatset_features();
-  void apply_compatset_features_to_quorum_requirements();
+  void calc_quorum_requirements();
 
 private:
   void _reset();   ///< called from bootstrap, start_, or join_election