]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/OSDMap: get_up_osd_features()
authorSage Weil <sage@inktank.com>
Sat, 28 Dec 2013 20:16:39 +0000 (12:16 -0800)
committerYan, Zheng <zheng.z.yan@intel.com>
Fri, 10 Jan 2014 23:40:37 +0000 (07:40 +0800)
Signed-off-by: Sage Weil <sage@inktank.com>
src/osd/OSDMap.cc
src/osd/OSDMap.h

index ffbbdff5e42435b1b44f9518cd8a0d139227be80..8982b5107321001249bac48628e24d99c2cd2ee3 100644 (file)
@@ -829,6 +829,24 @@ uint64_t OSDMap::get_features(uint64_t *pmask) const
   return features;
 }
 
+uint64_t OSDMap::get_up_osd_features() const
+{
+  bool first = true;
+  uint64_t features = 0;
+  for (int osd = 0; osd < max_osd; ++osd) {
+    if (!is_up(osd))
+      continue;
+    const osd_xinfo_t &xi = get_xinfo(osd);
+    if (first) {
+      features = xi.features;
+      first = false;
+    } else {
+      features &= xi.features;
+    }
+  }
+  return features;
+}
+
 void OSDMap::dedup(const OSDMap *o, OSDMap *n)
 {
   if (o->epoch == n->epoch)
index dae46450dca0c603f0b4a4828318ed0d21b93d08..2c16056781c757bfec3b2df36fc55e629b41f425 100644 (file)
@@ -450,6 +450,11 @@ private:
    */
   uint64_t get_features(uint64_t *mask) const;
 
+  /**
+   * get intersection of features supported by up osds
+   */
+  uint64_t get_up_osd_features() const;
+
   int apply_incremental(const Incremental &inc);
 
   /// try to re-use/reference addrs in oldmap from newmap