vector<int> want;
if (!calc_acting(newest_update_osd, want)) {
- dout(10) << "choose_acting failed, marking pg down" << dendl;
- state_set(PG_STATE_DOWN);
+ dout(10) << "choose_acting failed" << dendl;
+ assert(want_acting.empty());
return false;
}
// adjust acting set? (e.g. because backfill completed...)
if (pg->acting != pg->up &&
!pg->choose_acting(newest_update_osd)) {
+ assert(pg->want_acting.size());
post_event(NeedActingChange());
return discard_event();
}
// adjust acting?
if (!pg->choose_acting(newest_update_osd)) {
- post_event(NeedActingChange());
+ if (pg->want_acting.size()) {
+ post_event(NeedActingChange());
+ } else {
+ post_event(IsIncomplete());
+ }
return;
}
pg->state_set(PG_STATE_INCOMPLETE);
pg->update_stats();
}
+
void PG::RecoveryState::Incomplete::exit()
{
context< RecoveryMachine >().log_exit(state_name, enter_time);