Author: phunt
Date: Tue Aug 11 05:44:51 2009
New Revision: 802995
URL: http://svn.apache.org/viewvc?rev=802995&view=rev
Log:
ZOOKEEPER-483. ZK fataled on me, and ugly
Modified:
hadoop/zookeeper/trunk/CHANGES.txt
hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/SendAckRequestProcessor.java
hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/QuorumTest.java
Modified: hadoop/zookeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/CHANGES.txt?rev=802995&r1=802994&r2=802995&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/CHANGES.txt (original)
+++ hadoop/zookeeper/trunk/CHANGES.txt Tue Aug 11 05:44:51 2009
@@ -57,11 +57,12 @@
ZOOKEEPER-501. CnxManagerTest failed on hudson. (flavio via mahadev)
- ZOOKEEPER-499. electionAlg should default to FLE (3) - regression (phunt via
- mahadev)
+ ZOOKEEPER-499. electionAlg should default to FLE (3) - regression
+ (phunt via mahadev)
ZOOKEEPER-477. zkCleanup.sh is flaky (fernando via mahadev)
+ ZOOKEEPER-483. ZK fataled on me, and ugly (breed via phunt)
IMPROVEMENTS:
ZOOKEEPER-473. cleanup junit tests to eliminate false positives due to
Modified: hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/SendAckRequestProcessor.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/SendAckRequestProcessor.java?rev=802995&r1=802994&r2=802995&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/SendAckRequestProcessor.java
(original)
+++ hadoop/zookeeper/trunk/src/java/main/org/apache/zookeeper/server/quorum/SendAckRequestProcessor.java
Tue Aug 11 05:44:51 2009
@@ -43,13 +43,33 @@
try {
follower.writePacket(qp, false);
} catch (IOException e) {
- LOG.warn("Ignoring unexpected exception during packet send", e);
+ LOG.warn("Closing connection to leader, exception during packet send", e);
+ try {
+ if (!follower.sock.isClosed()) {
+ follower.sock.close();
+ }
+ } catch (IOException e1) {
+ // Nothing to do, we are shutting things down, so an exception here is
irrelevant
+ LOG.debug("Ignoring error closing the connection", e1);
+ }
}
}
}
public void flush() throws IOException {
- follower.writePacket(null, true);
+ try {
+ follower.writePacket(null, true);
+ } catch(IOException e) {
+ LOG.warn("Closing connection to leader, exception during packet send", e);
+ try {
+ if (!follower.sock.isClosed()) {
+ follower.sock.close();
+ }
+ } catch (IOException e1) {
+ // Nothing to do, we are shutting things down, so an exception here is
irrelevant
+ LOG.debug("Ignoring error closing the connection", e1);
+ }
+ }
}
public void shutdown() {
Modified: hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/QuorumTest.java
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/QuorumTest.java?rev=802995&r1=802994&r2=802995&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/QuorumTest.java (original)
+++ hadoop/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/QuorumTest.java Tue Aug
11 05:44:51 2009
@@ -23,12 +23,16 @@
import java.util.ArrayList;
import org.apache.log4j.Logger;
+import org.apache.zookeeper.AsyncCallback;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
+import org.apache.zookeeper.data.Stat;
+import org.apache.zookeeper.server.quorum.FollowerHandler;
+import org.apache.zookeeper.server.quorum.Leader;
import org.apache.zookeeper.ZooDefs.Ids;
import org.junit.Before;
import org.junit.Test;
@@ -93,6 +97,42 @@
{
ct.testClientWithWatcherObj();
}
+ volatile int counter = 0;
+ volatile int errors = 0;
+ @Test
+ public void testLeaderShutdown() throws IOException, InterruptedException, KeeperException
{
+ ZooKeeper zk = new DisconnectableZooKeeper(qb.hostPort, ClientBase.CONNECTION_TIMEOUT,
new Watcher() {
+ public void process(WatchedEvent event) {
+ }});
+ zk.create("/blah", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
+ zk.create("/blah/blah", new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
+ Leader leader = qb.s1.leader;
+ if (leader == null) leader = qb.s2.leader;
+ if (leader == null) leader = qb.s3.leader;
+ if (leader == null) leader = qb.s4.leader;
+ if (leader == null) leader = qb.s5.leader;
+ assertNotNull(leader);
+ for(int i = 0; i < 10000; i++) {
+ zk.setData("/blah/blah", new byte[0], -1, new AsyncCallback.StatCallback() {
+ public void processResult(int rc, String path, Object ctx,
+ Stat stat) {
+ counter++;
+ if (rc != 0) {
+ errors++;
+ }
+ }
+ }, null);
+ }
+ ArrayList<FollowerHandler> fhs = new ArrayList<FollowerHandler>(leader.forwardingFollowers);
+ for(FollowerHandler f: fhs) {
+ f.sock.shutdownInput();
+ }
+ while(counter + errors < 10000) {
+ Thread.sleep(200);
+ }
+ assertTrue("We should have had some errors", errors != 0);
+ zk.close();
+ }
@Test
public void testMultipleWatcherObjs() throws IOException,
InterruptedException, KeeperException
|