]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: Paxos: reset accept timeout before submiting work to the store 3142/head
authorJoao Eduardo Luis <joao@redhat.com>
Wed, 10 Dec 2014 17:46:35 +0000 (17:46 +0000)
committerJoao Eduardo Luis <joao@redhat.com>
Mon, 15 Dec 2014 16:49:55 +0000 (16:49 +0000)
Otherwise we may trigger the timeout while waiting for the work to be
committed to the store -- and it would only take the write to take a bit
longer than 10 seconds (default accept timeout).

We do wait for the work to be properly committed to the store before
extending the lease though.

Fixes: #10220
Signed-off-by: Joao Eduardo Luis <joao@redhat.com>
src/mon/Paxos.cc

index 231b1e5b739994b07cbb64831533337bca4b473b..b677d01cc5703396d5b3c159916b95d0651ff916 100644 (file)
@@ -846,6 +846,12 @@ void Paxos::commit_start()
     state = STATE_WRITING;
   else
     assert(0);
+
+  if (mon->get_quorum().size() > 1) {
+    // cancel timeout event
+    mon->timer.cancel_event(accept_timeout_event);
+    accept_timeout_event = 0;
+  }
 }
 
 void Paxos::commit_finish()
@@ -900,16 +906,12 @@ void Paxos::commit_finish()
 
   if (do_refresh()) {
     commit_proposal();
-
-    finish_contexts(g_ceph_context, waiting_for_commit);
-
     if (mon->get_quorum().size() > 1) {
-      // cancel timeout event
-      mon->timer.cancel_event(accept_timeout_event);
-      accept_timeout_event = 0;
       extend_lease();
     }
 
+    finish_contexts(g_ceph_context, waiting_for_commit);
+
     assert(g_conf->paxos_kill_at != 10);
 
     finish_round();