diff options
author | Sage Weil <sage@inktank.com> | 2013-02-19 16:07:40 -0800 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-02-19 16:12:09 -0800 |
commit | b90167d6bcc1e6aa2a84962386b945008473bb59 (patch) | |
tree | 980ea36d826ced86ca6fcd06e6f29dc4165e6a32 | |
parent | 8cc2b0f1243b2717af1de329a7fa6a8b5350db68 (diff) | |
download | ceph-b90167d6bcc1e6aa2a84962386b945008473bb59.tar.gz |
mon: move OSDMap feature bit calculation into an OSDMap method
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/mon/OSDMonitor.cc | 11 | ||||
-rw-r--r-- | src/osd/OSD.cc | 8 | ||||
-rw-r--r-- | src/osd/OSDMap.cc | 17 | ||||
-rw-r--r-- | 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 5a7dceac753..02abdb5325f 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<int> 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<int>::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 d5f2b2299a4..b20e6d690f2 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 a0a3d1247ba..a2db1a117d9 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 70ec263e4d8..6588382971f 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 |