dout(5) << "can_mark_down NODOWN flag set, will not mark osd." << i << " down" << dendl;
return false;
}
- float up_ratio = (float)osdmap.get_num_up_osds() / (float)osdmap.get_num_osds();
+ int up = osdmap.get_num_up_osds() - pending_inc.get_net_marked_down(&osdmap);
+ float up_ratio = (float)up / (float)osdmap.get_num_osds();
if (up_ratio < g_conf->mon_osd_min_up_ratio) {
dout(5) << "can_mark_down current up_ratio " << up_ratio << " < min "
<< g_conf->mon_osd_min_up_ratio
dout(5) << "can_mark_out NOOUT flag set, will not mark osds out" << dendl;
return false;
}
- float in_ratio = (float)osdmap.get_num_in_osds() / (float)osdmap.get_num_osds();
+ int in = osdmap.get_num_in_osds() - pending_inc.get_net_marked_out(&osdmap);
+ float in_ratio = (float)in / (float)osdmap.get_num_osds();
if (in_ratio < g_conf->mon_osd_min_in_ratio) {
if (i >= 0)
dout(5) << "can_mark_down current in_ratio " << in_ratio << " < min "
// ----------------------------------
// OSDMap::Incremental
+int OSDMap::Incremental::get_net_marked_out(const OSDMap *previous) const
+{
+ int n = 0;
+ for (map<int32_t,uint32_t>::const_iterator p = new_weight.begin();
+ p != new_weight.end();
+ ++p) {
+ if (p->second == CEPH_OSD_OUT && !previous->is_out(p->first))
+ n++; // marked out
+ if (p->second != CEPH_OSD_OUT && previous->is_out(p->first))
+ n--; // marked in
+ }
+ return n;
+}
+
+int OSDMap::Incremental::get_net_marked_down(const OSDMap *previous) const
+{
+ int n = 0;
+ for (map<int32_t,uint8_t>::const_iterator p = new_state.begin();
+ p != new_state.end();
+ ++p) {
+ if (p->second & CEPH_OSD_UP) {
+ if (previous->is_up(p->first))
+ n++; // marked down
+ else
+ n--; // marked up
+ }
+ }
+ return n;
+}
+
void OSDMap::Incremental::encode_client_old(bufferlist& bl) const
{
__u16 v = 5;
string cluster_snapshot;
+ int get_net_marked_out(const OSDMap *previous) const;
+ int get_net_marked_down(const OSDMap *previous) const;
+
void encode_client_old(bufferlist& bl) const;
void encode(bufferlist& bl, uint64_t features=-1) const;
void decode(bufferlist::iterator &p);