summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2013-02-19 16:07:40 -0800
committerSage Weil <sage@inktank.com>2013-02-19 16:12:09 -0800
commitb90167d6bcc1e6aa2a84962386b945008473bb59 (patch)
tree980ea36d826ced86ca6fcd06e6f29dc4165e6a32
parent8cc2b0f1243b2717af1de329a7fa6a8b5350db68 (diff)
downloadceph-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.cc11
-rw-r--r--src/osd/OSD.cc8
-rw-r--r--src/osd/OSDMap.cc17
-rw-r--r--src/osd/OSDMap.h8
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