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 b951f0675df..f441a69cf4d 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 f527d71bf1b..3e2ab50baaa 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