You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by rg...@apache.org on 2015/06/16 01:05:48 UTC
svn commit: r1685686 - in /zookeeper/branches/branch-3.5: CHANGES.txt
src/java/main/org/apache/zookeeper/server/quorum/FastLeaderElection.java
Author: rgs
Date: Mon Jun 15 23:05:47 2015
New Revision: 1685686
URL: http://svn.apache.org/r1685686
Log:
ZOOKEEPER-2212: distributed race condition related to QV version
(Akihiro Suda via rgs)
Modified:
zookeeper/branches/branch-3.5/CHANGES.txt
zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/quorum/FastLeaderElection.java
Modified: zookeeper/branches/branch-3.5/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/branches/branch-3.5/CHANGES.txt?rev=1685686&r1=1685685&r2=1685686&view=diff
==============================================================================
--- zookeeper/branches/branch-3.5/CHANGES.txt (original)
+++ zookeeper/branches/branch-3.5/CHANGES.txt Mon Jun 15 23:05:47 2015
@@ -128,6 +128,9 @@ BUGFIXES:
ZOOKEEPER-706: Large numbers of watches can cause session re-establishment to fail
(Chris Thunes via rgs)
+ ZOOKEEPER-2212: distributed race condition related to QV version
+ (Akihiro Suda via rgs)
+
IMPROVEMENTS:
ZOOKEEPER-1660 Documentation for Dynamic Reconfiguration (Reed Wanderman-Milne via shralex)
Modified: zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/quorum/FastLeaderElection.java
URL: http://svn.apache.org/viewvc/zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/quorum/FastLeaderElection.java?rev=1685686&r1=1685685&r2=1685686&view=diff
==============================================================================
--- zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/quorum/FastLeaderElection.java (original)
+++ zookeeper/branches/branch-3.5/src/java/main/org/apache/zookeeper/server/quorum/FastLeaderElection.java Mon Jun 15 23:05:47 2015
@@ -294,14 +294,19 @@ public class FastLeaderElection implemen
LOG.info("{} Received version: {} my version: {}", self.getId(),
Long.toHexString(rqv.getVersion()),
Long.toHexString(self.getQuorumVerifier().getVersion()));
- self.processReconfig(rqv, null, null, false);
- if (!rqv.equals(curQV)) {
- LOG.info("restarting leader election");
- self.shuttingDownLE = true;
- self.getElectionAlg().shutdown();
-
- break;
- }
+ if (self.getPeerState() == ServerState.LOOKING) {
+ LOG.debug("Invoking processReconfig(), state: {}", self.getServerState());
+ self.processReconfig(rqv, null, null, false);
+ if (!rqv.equals(curQV)) {
+ LOG.info("restarting leader election");
+ self.shuttingDownLE = true;
+ self.getElectionAlg().shutdown();
+
+ break;
+ }
+ } else {
+ LOG.debug("Skip processReconfig(), state: {}", self.getServerState());
+ }
}
} catch (IOException e) {
LOG.error("Something went wrong while processing config received from {}", response.sid);