From: Sage Weil Date: Mon, 6 Feb 2017 17:30:34 +0000 (-0500) Subject: mon: apply monmap features to quorum requirements X-Git-Tag: v12.0.1~467^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=35921211564b80d5960fcd8bafd9fdc851078cb0;p=ceph.git mon: apply monmap features to quorum requirements 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 --- diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index b951f0675df1..f441a69cf4d0 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -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; } diff --git a/src/mon/Monitor.h b/src/mon/Monitor.h index f527d71bf1bb..3e2ab50baaac 100644 --- a/src/mon/Monitor.h +++ b/src/mon/Monitor.h @@ -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