return true;
}
- // did someone in the prior set get lost?
- const osd_info_t& pinfo(osdmap->get_info(o));
- if (pinfo.lost_at > pinfo.up_from) {
- set<int>::const_iterator pl = prior_set_lost.find(o);
- if (pl == prior_set_lost.end())
- return true;
- }
+ // If someone in the prior set is marked as lost, it would also have to be
+ // marked as down. So don't check for newly lost osds here.
}
// did someone in the prior down set go up?
for (set<int>::iterator p = prior_set_down.begin();
p != prior_set_down.end();
p++)
- if (osdmap->is_up(*p)) {
+ {
+ int o = *p;
+
+ if (osdmap->is_up(o)) {
dout(10) << "prior_set_affected: osd" << *p << " now up" << dendl;
return true;
}
+ // did someone in the prior set get lost?
+ const osd_info_t& pinfo(osdmap->get_info(o));
+ if (pinfo.lost_at > pinfo.up_from) {
+ set<int>::const_iterator pl = prior_set_lost.find(o);
+ if (pl == prior_set_lost.end())
+ return true;
+ }
+ }
// did a significant osd's up_thru change?
for (map<int,epoch_t>::iterator p = prior_set_up_thru.begin();
bool have_master_log;
protected:
set<int> prior_set; // current+prior OSDs, as defined by info.history.last_epoch_started.
- set<int> prior_set_down; // down osds exluded from prior_set
+ set<int> prior_set_down; // down osds normally exluded from prior_set
map<int,epoch_t> prior_set_up_thru; // osds whose up_thru we care about
set<int> prior_set_lost; // osds in the prior set which are lost
bool need_up_thru;