if (oldrole == 0 || pg->get_role() == 0)
pg->clear_primary_state();
+ dout(10) << *pg << " " << oldacting << " -> " << pg->acting
+ << ", role " << oldrole << " -> " << role << dendl;
+
// pg->on_*
for (unsigned i=0; i<oldacting.size(); i++)
if (osdmap->is_down(oldacting[i]))
ls.push_back(it->second);
pg->replay_queue.clear();
take_waiters(ls);
-
- // take active waiters
- take_waiters(pg->waiting_for_active);
-
- pg->on_role_change();
}
+
+ pg->on_role_change();
+ // take active waiters
+ take_waiters(pg->waiting_for_active);
+
// new primary?
if (role == 0) {
- // i am new primary
+ // i am new primary
pg->state_clear(PG_STATE_STRAY);
} else {
// i am now replica|stray. we need to send a notify.
}
}
- // my role changed.
- dout(10) << *pg << " " << oldacting << " -> " << pg->acting
- << ", role " << oldrole << " -> " << role << dendl;
-
} else {
// no role change.
// did primary change?
}
}
}
-
+
pg->unlock();
}
}