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);