From b90167d6bcc1e6aa2a84962386b945008473bb59 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 19 Feb 2013 16:07:40 -0800 Subject: [PATCH] mon: move OSDMap feature bit calculation into an OSDMap method Signed-off-by: Sage Weil --- src/mon/OSDMonitor.cc | 11 +++-------- src/osd/OSD.cc | 8 ++------ src/osd/OSDMap.cc | 17 +++++++++++++++++ src/osd/OSDMap.h | 8 ++++++++ 4 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 5a7dceac753ee..02abdb5325f04 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -159,19 +159,14 @@ void OSDMonitor::update_from_paxos() void OSDMonitor::update_msgr_features() { + uint64_t mask; + uint64_t features = osdmap.get_features(&mask); + set types; types.insert((int)entity_name_t::TYPE_OSD); types.insert((int)entity_name_t::TYPE_CLIENT); types.insert((int)entity_name_t::TYPE_MDS); types.insert((int)entity_name_t::TYPE_MON); - - uint64_t mask = CEPH_FEATURES_CRUSH; - uint64_t features = 0; - if (osdmap.crush->has_nondefault_tunables()) - features |= CEPH_FEATURE_CRUSH_TUNABLES; - if (osdmap.crush->has_nondefault_tunables2()) - features |= CEPH_FEATURE_CRUSH_TUNABLES2; - for (set::iterator q = types.begin(); q != types.end(); ++q) { if ((mon->messenger->get_policy(*q).features_required & mask) != features) { dout(0) << "crush map has features " << features << ", adjusting msgr requires" << dendl; diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index d5f2b2299a434..b20e6d690f244 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -4231,12 +4231,8 @@ void OSD::check_osdmap_features() // current memory location, and setting or clearing bits in integer // fields, and we are the only writer, this is not a problem. - uint64_t mask = CEPH_FEATURES_CRUSH; - uint64_t features = 0; - if (osdmap->crush->has_nondefault_tunables()) - features |= CEPH_FEATURE_CRUSH_TUNABLES; - if (osdmap->crush->has_nondefault_tunables2()) - features |= CEPH_FEATURE_CRUSH_TUNABLES2; + uint64_t mask; + uint64_t features = osdmap->get_features(&mask); { Messenger::Policy p = client_messenger->get_default_policy(); diff --git a/src/osd/OSDMap.cc b/src/osd/OSDMap.cc index a0a3d1247ba2e..a2db1a117d92c 100644 --- a/src/osd/OSDMap.cc +++ b/src/osd/OSDMap.cc @@ -714,6 +714,23 @@ bool OSDMap::find_osd_on_ip(const entity_addr_t& ip) const return -1; } + +uint64_t OSDMap::get_features(uint64_t *pmask) const +{ + uint64_t features = 0; + uint64_t mask = 0; + + if (crush->has_nondefault_tunables()) + features |= CEPH_FEATURE_CRUSH_TUNABLES; + if (crush->has_nondefault_tunables2()) + features |= CEPH_FEATURE_CRUSH_TUNABLES2; + mask |= CEPH_FEATURES_CRUSH; + + if (pmask) + *pmask = mask; + return features; +} + void OSDMap::dedup(const OSDMap *o, OSDMap *n) { if (o->epoch == n->epoch) diff --git a/src/osd/OSDMap.h b/src/osd/OSDMap.h index 70ec263e4d8d1..6588382971fbe 100644 --- a/src/osd/OSDMap.h +++ b/src/osd/OSDMap.h @@ -394,6 +394,14 @@ private: return -1; } + /** + * get feature bits required by the current structure + * + * @param mask [out] set of all possible map-related features we could set + * @return feature bits used by this map + */ + uint64_t get_features(uint64_t *mask) const; + int apply_incremental(const Incremental &inc); /// try to re-use/reference addrs in oldmap from newmap -- 2.39.5