Return-Path: X-Original-To: apmail-zookeeper-commits-archive@www.apache.org Delivered-To: apmail-zookeeper-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 7A183F2CA for ; Sat, 11 May 2013 13:33:06 +0000 (UTC) Received: (qmail 40196 invoked by uid 500); 11 May 2013 13:33:05 -0000 Delivered-To: apmail-zookeeper-commits-archive@zookeeper.apache.org Received: (qmail 40093 invoked by uid 500); 11 May 2013 13:33:04 -0000 Mailing-List: contact commits-help@zookeeper.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@ Delivered-To: mailing list commits@zookeeper.apache.org Received: (qmail 40055 invoked by uid 99); 11 May 2013 13:33:03 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 11 May 2013 13:33:03 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 11 May 2013 13:33:00 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 22CE52388847; Sat, 11 May 2013 13:32:39 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1481322 - in /zookeeper/branches/branch-3.4: CHANGES.txt src/java/main/org/apache/zookeeper/server/quorum/LearnerHandler.java src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java Date: Sat, 11 May 2013 13:32:38 -0000 To: commits@zookeeper.apache.org From: fpj@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130511133239.22CE52388847@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: fpj Date: Sat May 11 13:32:38 2013 New Revision: 1481322 URL: http://svn.apache.org/r1481322 Log: ZOOKEEPER-1697: large snapshots can cause continuous quorum failure (phunt via fpj) Modified: zookeeper/branches/branch-3.4/CHANGES.txt zookeeper/branches/branch-3.4/src/java/main/org/apache/zookeeper/server/quorum/LearnerHandler.java zookeeper/branches/branch-3.4/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java Modified: zookeeper/branches/branch-3.4/CHANGES.txt URL: http://svn.apache.org/viewvc/zookeeper/branches/branch-3.4/CHANGES.txt?rev=1481322&r1=1481321&r2=1481322&view=diff ============================================================================== --- zookeeper/branches/branch-3.4/CHANGES.txt (original) +++ zookeeper/branches/branch-3.4/CHANGES.txt Sat May 11 13:32:38 2013 @@ -60,6 +60,9 @@ BUGFIXES: ZOOKEEPER-1633. Introduce a protocol version to connection initiation message (Alexander Shraer via michim) + ZOOKEEPER-1697: large snapshots can cause continuous quorum failure + (phunt via fpj) + IMPROVEMENTS: ZOOKEEPER-1564. Allow JUnit test build with IBM Java Modified: zookeeper/branches/branch-3.4/src/java/main/org/apache/zookeeper/server/quorum/LearnerHandler.java URL: http://svn.apache.org/viewvc/zookeeper/branches/branch-3.4/src/java/main/org/apache/zookeeper/server/quorum/LearnerHandler.java?rev=1481322&r1=1481321&r2=1481322&view=diff ============================================================================== --- zookeeper/branches/branch-3.4/src/java/main/org/apache/zookeeper/server/quorum/LearnerHandler.java (original) +++ zookeeper/branches/branch-3.4/src/java/main/org/apache/zookeeper/server/quorum/LearnerHandler.java Sat May 11 13:32:38 2013 @@ -64,7 +64,11 @@ public class LearnerHandler extends Thre final Leader leader; - long tickOfLastAck; + /** Deadline for receiving the next ack. If we are bootstrapping then + * it's based on the initLimit, if we are done bootstrapping it's based + * on the syncLimit. Once the deadline is past this learner should + * be considered no longer "sync'd" with the leader. */ + volatile long tickOfNextAckDeadline; /** * ZooKeeper server identifier of this learner @@ -104,7 +108,7 @@ public class LearnerHandler extends Thre public String toString() { StringBuilder sb = new StringBuilder(); sb.append("LearnerHandler ").append(sock); - sb.append(" tickOfLastAck:").append(tickOfLastAck()); + sb.append(" tickOfNextAckDeadline:").append(tickOfNextAckDeadline()); sb.append(" synced?:").append(synced()); sb.append(" queuedPacketLength:").append(queuedPackets.size()); return sb.toString(); @@ -232,7 +236,10 @@ public class LearnerHandler extends Thre */ @Override public void run() { - try { + try { + tickOfNextAckDeadline = leader.self.tick + + leader.self.initLimit + leader.self.syncLimit; + ia = BinaryInputArchive.getArchive(new BufferedInputStream(sock .getInputStream())); bufferedOutput = new BufferedOutputStream(sock.getOutputStream()); @@ -452,6 +459,7 @@ public class LearnerHandler extends Thre LOG.error("Next packet was supposed to be an ACK"); return; } + LOG.info("Received NEWLEADER-ACK message from " + getSid()); leader.waitForNewLeaderAck(getSid(), qp.getZxid(), getLearnerType()); // now that the ack has been processed expect the syncLimit @@ -482,7 +490,7 @@ public class LearnerHandler extends Thre if (LOG.isTraceEnabled()) { ZooTrace.logQuorumPacket(LOG, traceMask, 'i', qp); } - tickOfLastAck = leader.self.tick; + tickOfNextAckDeadline = leader.self.tick + leader.self.syncLimit; ByteBuffer bb; @@ -597,8 +605,8 @@ public class LearnerHandler extends Thre leader.removeLearnerHandler(this); } - public long tickOfLastAck() { - return tickOfLastAck; + public long tickOfNextAckDeadline() { + return tickOfNextAckDeadline; } /** @@ -620,6 +628,6 @@ public class LearnerHandler extends Thre public boolean synced() { return isAlive() - && tickOfLastAck >= leader.self.tick - leader.self.syncLimit; + && leader.self.tick <= tickOfNextAckDeadline; } } Modified: zookeeper/branches/branch-3.4/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java URL: http://svn.apache.org/viewvc/zookeeper/branches/branch-3.4/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java?rev=1481322&r1=1481321&r2=1481322&view=diff ============================================================================== --- zookeeper/branches/branch-3.4/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java (original) +++ zookeeper/branches/branch-3.4/src/java/main/org/apache/zookeeper/server/quorum/QuorumPeer.java Sat May 11 13:32:38 2013 @@ -246,7 +246,7 @@ public class QuorumPeer extends Thread i /** * The current tick */ - protected int tick; + protected volatile int tick; /** * @deprecated As of release 3.4.0, this class has been deprecated, since