summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoao Eduardo Luis <joao.luis@inktank.com>2012-11-23 19:10:33 +0000
committerJoao Eduardo Luis <joao.luis@inktank.com>2012-11-23 19:13:07 +0000
commit96b82ebf870bda5af33624f698785bac6ae78234 (patch)
tree24e923bf9b55eb23b366de452275e891ec121f72
parent3b061ab9d38ff8cf162704db96fc604635f35ed1 (diff)
downloadceph-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.cc20
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);
+ }
}
}