From 35921211564b80d5960fcd8bafd9fdc851078cb0 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 6 Feb 2017 12:30:34 -0500 Subject: [PATCH] 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 --- src/mon/Monitor.cc | 19 ++++++++++++++++--- src/mon/Monitor.h | 2 +- 2 files changed, 17 insertions(+), 4 deletions(-) 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 -- 2.39.5