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;
}
}
}
-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;
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;
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>),
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();
}