]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd/OSDMap: cache values for in, up osds
authorSage Weil <sage@redhat.com>
Mon, 14 Sep 2015 21:11:31 +0000 (17:11 -0400)
committerSage Weil <sage@redhat.com>
Sat, 14 Nov 2015 03:35:08 +0000 (22:35 -0500)
We already do this for num_osd; do the same for the up and in
counts.

Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSDMap.cc
src/osd/OSDMap.h

index d308186871ded53e34c1dc33251c4df50d284d96..ebe73d694e542edd0afdc551cc876d5f7820d182 100644 (file)
@@ -937,9 +937,19 @@ void OSDMap::set_max_osd(int m)
 int OSDMap::calc_num_osds()
 {
   num_osd = 0;
-  for (int i=0; i<max_osd; i++)
-    if (osd_state[i] & CEPH_OSD_EXISTS)
-      num_osd++;
+  num_up_osd = 0;
+  num_in_osd = 0;
+  for (int i=0; i<max_osd; i++) {
+    if (osd_state[i] & CEPH_OSD_EXISTS) {
+      ++num_osd;
+      if (osd_state[i] & CEPH_OSD_UP) {
+       ++num_up_osd;
+      }
+      if (get_weight(i) != CEPH_OSD_OUT) {
+       ++num_in_osd;
+      }
+    }
+  }
   return num_osd;
 }
 
@@ -958,24 +968,6 @@ void OSDMap::get_up_osds(set<int32_t>& ls) const
   }
 }
 
-unsigned OSDMap::get_num_up_osds() const
-{
-  unsigned n = 0;
-  for (int i=0; i<max_osd; i++)
-    if ((osd_state[i] & CEPH_OSD_EXISTS) &&
-       (osd_state[i] & CEPH_OSD_UP)) n++;
-  return n;
-}
-
-unsigned OSDMap::get_num_in_osds() const
-{
-  unsigned n = 0;
-  for (int i=0; i<max_osd; i++)
-    if ((osd_state[i] & CEPH_OSD_EXISTS) &&
-       get_weight(i) != CEPH_OSD_OUT) n++;
-  return n;
-}
-
 void OSDMap::calc_state_set(int state, set<string>& st)
 {
   unsigned t = state;
index 39e0ef0756a26df5ea8ede66678712ea431b22ac..e929b72ce174310d6118ffb73ba8b7ad8f6ed82e 100644 (file)
@@ -212,7 +212,10 @@ private:
 
   uint32_t flags;
 
-  int num_osd;         // not saved
+  int num_osd;         // not saved; see calc_num_osds
+  int num_up_osd;      // not saved; see calc_num_osds
+  int num_in_osd;      // not saved; see calc_num_osds
+
   int32_t max_osd;
   vector<uint8_t> osd_state;
 
@@ -265,7 +268,8 @@ private:
   OSDMap() : epoch(0), 
             pool_max(-1),
             flags(0),
-            num_osd(0), max_osd(0),
+            num_osd(0), num_up_osd(0), num_in_osd(0),
+            max_osd(0),
             osd_addrs(new addrs_s),
             pg_temp(new map<pg_t,vector<int32_t> >),
             primary_temp(new map<pg_t,int32_t>),
@@ -329,12 +333,17 @@ public:
   unsigned get_num_osds() const {
     return num_osd;
   }
+  unsigned get_num_up_osds() const {
+    return num_up_osd;
+  }
+  unsigned get_num_in_osds() const {
+    return num_in_osd;
+  }
+  /// recalculate cached values for get_num{,_up,_in}_osds
   int calc_num_osds();
 
   void get_all_osds(set<int32_t>& ls) const;
   void get_up_osds(set<int32_t>& ls) const;
-  unsigned get_num_up_osds() const;
-  unsigned get_num_in_osds() const;
   unsigned get_num_pg_temp() const {
     return pg_temp->size();
   }