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:25 UTC
svn commit: r1685685 - in /zookeeper/trunk: CHANGES.txt
src/java/main/org/apache/zookeeper/server/quorum/FastLeaderElection.java
Author: rgs
Date: Mon Jun 15 23:05:25 2015
New Revision: 1685685
URL: http://svn.apache.org/r1685685
Log:
ZOOKEEPER-2212: distributed race condition related to QV version
(Akihiro Suda via rgs)
Modified:
zookeeper/trunk/CHANGES.txt
zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/FastLeaderElection.java
Modified: zookeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/trunk/CHANGES.txt?rev=1685685&r1=1685684&r2=1685685&view=diff
==============================================================================
--- zookeeper/trunk/CHANGES.txt (original)
+++ zookeeper/trunk/CHANGES.txt Mon Jun 15 23:05:25 2015
@@ -131,6 +131,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/trunk/src/java/main/org/apache/zookeeper/server/quorum/FastLeaderElection.java
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/FastLeaderElection.java?rev=1685685&r1=1685684&r2=1685685&view=diff
==============================================================================
--- zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/FastLeaderElection.java (original)
+++ zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/FastLeaderElection.java Mon Jun 15 23:05:25 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);