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}]]); + } } }; }