From: Sage Weil Date: Wed, 20 Feb 2013 00:07:40 +0000 (-0800) Subject: mon: move OSDMap feature bit calculation into an OSDMap method X-Git-Tag: v0.59~167^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b90167d6bcc1e6aa2a84962386b945008473bb59;p=ceph.git mon: move OSDMap feature bit calculation into an OSDMap method Signed-off-by: Sage Weil --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 5a7dceac753e..02abdb5325f0 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 d5f2b2299a43..b20e6d690f24 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 a0a3d1247ba2..a2db1a117d92 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 70ec263e4d8d..6588382971fb 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