diff options
author | Joao Eduardo Luis <joao.luis@inktank.com> | 2012-11-23 19:10:33 +0000 |
---|---|---|
committer | Joao Eduardo Luis <joao.luis@inktank.com> | 2012-11-23 19:13:07 +0000 |
commit | 96b82ebf870bda5af33624f698785bac6ae78234 (patch) | |
tree | 24e923bf9b55eb23b366de452275e891ec121f72 | |
parent | 3b061ab9d38ff8cf162704db96fc604635f35ed1 (diff) | |
download | ceph-96b82ebf870bda5af33624f698785bac6ae78234.tar.gz |
mon: Monitor: wake up contexts based on paxos machine's state
When recovering the leader, only wake up a paxos machine's contexts if
the paxos machine is in a state that can handle said contexts.
Fixes: #3495
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
-rw-r--r-- | src/mon/Monitor.cc | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 469cbd03aa5..4a64e48de8d 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -207,14 +207,26 @@ void Monitor::recovered_leader(int id) require_gv_onwire(); } - for (vector<Paxos*>::iterator p = paxos.begin(); p != paxos.end(); p++) + for (vector<Paxos*>::iterator p = paxos.begin(); p != paxos.end(); p++) { + if (!(*p)->is_active()) + continue; finish_contexts(g_ceph_context, (*p)->waiting_for_active); - for (vector<Paxos*>::iterator p = paxos.begin(); p != paxos.end(); p++) + } + for (vector<Paxos*>::iterator p = paxos.begin(); p != paxos.end(); p++) { + if (!(*p)->is_active()) + continue; finish_contexts(g_ceph_context, (*p)->waiting_for_commit); - for (vector<Paxos*>::iterator p = paxos.begin(); p != paxos.end(); p++) + } + for (vector<Paxos*>::iterator p = paxos.begin(); p != paxos.end(); p++) { + if (!(*p)->is_readable()) + continue; finish_contexts(g_ceph_context, (*p)->waiting_for_readable); - for (vector<Paxos*>::iterator p = paxos.begin(); p != paxos.end(); p++) + } + for (vector<Paxos*>::iterator p = paxos.begin(); p != paxos.end(); p++) { + if (!(*p)->is_writeable()) + continue; finish_contexts(g_ceph_context, (*p)->waiting_for_writeable); + } } } |