From c7f8046e48893e44fc46041851f398b17c00b72f Mon Sep 17 00:00:00 2001 From: root Date: Wed, 24 Aug 2016 09:26:34 +0000 Subject: [PATCH] raft bug. leader ship cannot be rendered to higher term and lower index. --- arangod/Agency/Agent.cpp | 9 +++++++-- js/client/tests/agency/agency-test.js | 7 +++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/arangod/Agency/Agent.cpp b/arangod/Agency/Agent.cpp index fb51f353bb..e6c89062b1 100644 --- a/arangod/Agency/Agent.cpp +++ b/arangod/Agency/Agent.cpp @@ -254,11 +254,16 @@ bool Agent::recvAppendEntriesRPC( MUTEX_LOCKER(mutexLocker, _ioLock); if (this->term() > term) { - LOG_TOPIC(WARN, Logger::AGENCY) << "I have a higher term than RPC caller."; - return false; + if (leaderCommitIndex >= _lastCommitIndex) { + _constituent.follow(term); + } else { + LOG_TOPIC(WARN, Logger::AGENCY) << "I have a higher term than RPC caller."; + return false; + } } if (!_constituent.vote(term, leaderId, prevIndex, prevTerm, true)) { + LOG_TOPIC(WARN, Logger::AGENCY) << "Not voting for " << leaderId; return false; } diff --git a/js/client/tests/agency/agency-test.js b/js/client/tests/agency/agency-test.js index 68731f2631..057b651a39 100644 --- a/js/client/tests/agency/agency-test.js +++ b/js/client/tests/agency/agency-test.js @@ -529,6 +529,13 @@ function agencyTestSuite () { var res = writeAgency([[{"/bumms":{"op":"set","new":"fallera"}, "/bummsfallera": {"op":"set","new":"lalalala"}}]]); assertEqual(res.statusCode, 200); assertEqual(readAndCheck([["/bumms", "/bummsfallera"]]), [{bumms:"fallera", bummsfallera: "lalalala"}]); + }, + + testThousand: function() { + var i; + for (i = 0; i < 1000; i++) { + writeAndCheck([[{x:12}]]); + } } }; }