]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: move OSDMap feature bit calculation into an OSDMap method
authorSage Weil <sage@inktank.com>
Wed, 20 Feb 2013 00:07:40 +0000 (16:07 -0800)
committerSage Weil <sage@inktank.com>
Wed, 20 Feb 2013 00:12:09 +0000 (16:12 -0800)
Signed-off-by: Sage Weil <sage@inktank.com>
src/mon/OSDMonitor.cc
src/osd/OSD.cc
src/osd/OSDMap.cc
src/osd/OSDMap.h

index 5a7dceac753eeea7aaa62220b8bff32cc9c50d62..02abdb5325f04d3d54967ce6aab9ec9b0beef228 100644 (file)
@@ -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;
index d5f2b2299a434f311707cb1d2fab935bd84279f7..b20e6d690f244bb9f738d3c461289f658fefb498 100644 (file)
@@ -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();
index a0a3d1247ba2ea79b15c7087dbb2a26a32b59177..a2db1a117d92cb5d0763b119f983080960f73c5f 100644 (file)
@@ -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)
index 70ec263e4d8d159ec9d275e066f2e8fa145f145f..6588382971fbef9f5ce67d02b27fc8e17f407d21 100644 (file)
@@ -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