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/11/03 08:11:28 UTC

svn commit: r1712218 - in /zookeeper/trunk: ./ src/java/test/org/apache/zookeeper/server/quorum/ src/java/test/org/apache/zookeeper/test/

Author: rgs
Date: Tue Nov  3 07:11:27 2015
New Revision: 1712218

URL: http://svn.apache.org/viewvc?rev=1712218&view=rev
Log:
ZOOKEEPER-1872: QuorumPeer is not shutdown in few cases
(Rakesh R. via rgs)

Modified:
    zookeeper/trunk/CHANGES.txt
    zookeeper/trunk/src/java/test/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java
    zookeeper/trunk/src/java/test/org/apache/zookeeper/test/CnxManagerTest.java
    zookeeper/trunk/src/java/test/org/apache/zookeeper/test/JMXEnv.java
    zookeeper/trunk/src/java/test/org/apache/zookeeper/test/LeaderSessionTrackerTest.java
    zookeeper/trunk/src/java/test/org/apache/zookeeper/test/QuorumTest.java

Modified: zookeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/zookeeper/trunk/CHANGES.txt?rev=1712218&r1=1712217&r2=1712218&view=diff
==============================================================================
--- zookeeper/trunk/CHANGES.txt (original)
+++ zookeeper/trunk/CHANGES.txt Tue Nov  3 07:11:27 2015
@@ -196,6 +196,9 @@ BUGFIXES:
   ZOOKEEPER-2142: JMX ObjectName is incorrect for observers (Edward Ribeiro
   via michim)
 
+  ZOOKEEPER-1872: QuorumPeer is not shutdown in few cases
+  (Rakesh R. via rgs)
+
 IMPROVEMENTS:
   ZOOKEEPER-1660 Documentation for Dynamic Reconfiguration (Reed Wanderman-Milne via shralex)  
 

Modified: zookeeper/trunk/src/java/test/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/java/test/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java?rev=1712218&r1=1712217&r2=1712218&view=diff
==============================================================================
--- zookeeper/trunk/src/java/test/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java (original)
+++ zookeeper/trunk/src/java/test/org/apache/zookeeper/server/quorum/QuorumPeerMainTest.java Tue Nov  3 07:11:27 2015
@@ -44,6 +44,7 @@ import org.apache.zookeeper.ZooKeeper.St
 import org.apache.zookeeper.common.Time;
 import org.apache.zookeeper.server.quorum.Leader.Proposal;
 import org.apache.zookeeper.test.ClientBase;
+import org.junit.After;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -52,6 +53,23 @@ import org.junit.Test;
  *
  */
 public class QuorumPeerMainTest extends QuorumPeerTestBase {
+
+    private Servers servers;
+    private int numServers = 0;
+
+    @After
+    public void tearDown() throws Exception {
+        if (servers == null || servers.mt == null) {
+            LOG.info("No servers to shutdown!");
+            return;
+        }
+        for (int i = 0; i < numServers; i++) {
+            if (i < servers.mt.length) {
+                servers.mt[i].shutdown();
+            }
+        }
+    }
+
     /**
      * Verify the ability to start a cluster.
      */
@@ -226,14 +244,14 @@ public class QuorumPeerMainTest extends
      */
     @Test
     public void testHighestZxidJoinLate() throws Exception {
-        int numServers = 3;
-        Servers svrs = LaunchServers(numServers);
+        numServers = 3;
+        servers = LaunchServers(numServers);
         String path = "/hzxidtest";
         int leader = -1;
 
         // find the leader
         for (int i = 0; i < numServers; i++) {
-            if (svrs.mt[i].main.quorumPeer.leader != null) {
+            if (servers.mt[i].main.quorumPeer.leader != null) {
                 leader = i;
             }
         }
@@ -248,47 +266,47 @@ public class QuorumPeerMainTest extends
         byte[] output;
 
         // Create a couple of nodes
-        svrs.zk[leader].create(path + leader, input, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
-        svrs.zk[leader].create(path + nonleader, input, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
+        servers.zk[leader].create(path + leader, input, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
+        servers.zk[leader].create(path + nonleader, input, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
 
         // make sure the updates indeed committed. If it is not
         // the following statement will throw.
-        output = svrs.zk[leader].getData(path + nonleader, false, null);
+        output = servers.zk[leader].getData(path + nonleader, false, null);
 
         // Shutdown every one else but the leader
         for (int i = 0; i < numServers; i++) {
             if (i != leader) {
-                svrs.mt[i].shutdown();
+                servers.mt[i].shutdown();
             }
         }
 
         input[0] = 2;
 
         // Update the node on the leader
-        svrs.zk[leader].setData(path + leader, input, -1, null, null);
+        servers.zk[leader].setData(path + leader, input, -1, null, null);
 
         // wait some time to let this get written to disk
         Thread.sleep(500);
 
         // shut the leader down
-        svrs.mt[leader].shutdown();
+        servers.mt[leader].shutdown();
 
         System.gc();
 
-        waitForAll(svrs.zk, States.CONNECTING);
+        waitForAll(servers.zk, States.CONNECTING);
 
         // Start everyone but the leader
         for (int i = 0; i < numServers; i++) {
             if (i != leader) {
-                svrs.mt[i].start();
+                servers.mt[i].start();
             }
         }
 
         // wait to connect to one of these
-        waitForOne(svrs.zk[nonleader], States.CONNECTED);
+        waitForOne(servers.zk[nonleader], States.CONNECTED);
 
         // validate that the old value is there and not the new one
-        output = svrs.zk[nonleader].getData(path + leader, false, null);
+        output = servers.zk[nonleader].getData(path + leader, false, null);
 
         Assert.assertEquals(
                 "Expecting old value 1 since 2 isn't committed yet",
@@ -296,22 +314,22 @@ public class QuorumPeerMainTest extends
 
         // Do some other update, so we bump the maxCommttedZxid
         // by setting the value to 2
-        svrs.zk[nonleader].setData(path + nonleader, input, -1);
+        servers.zk[nonleader].setData(path + nonleader, input, -1);
 
         // start the old leader
-        svrs.mt[leader].start();
+        servers.mt[leader].start();
 
         // connect to it
-        waitForOne(svrs.zk[leader], States.CONNECTED);
+        waitForOne(servers.zk[leader], States.CONNECTED);
 
         // make sure it doesn't have the new value that it alone had logged
-        output = svrs.zk[leader].getData(path + leader, false, null);
+        output = servers.zk[leader].getData(path + leader, false, null);
         Assert.assertEquals(
                 "Validating that the deposed leader has rolled back that change it had written",
                 output[0], 1);
 
         // make sure the leader has the subsequent changes that were made while it was offline
-        output = svrs.zk[leader].getData(path + nonleader, false, null);
+        output = servers.zk[leader].getData(path + nonleader, false, null);
         Assert.assertEquals(
                 "Validating that the deposed leader caught up on changes it missed",
                 output[0], 2);

Modified: zookeeper/trunk/src/java/test/org/apache/zookeeper/test/CnxManagerTest.java
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/CnxManagerTest.java?rev=1712218&r1=1712217&r2=1712218&view=diff
==============================================================================
--- zookeeper/trunk/src/java/test/org/apache/zookeeper/test/CnxManagerTest.java (original)
+++ zookeeper/trunk/src/java/test/org/apache/zookeeper/test/CnxManagerTest.java Tue Nov  3 07:11:27 2015
@@ -368,41 +368,43 @@ public class CnxManagerTest extends ZKTe
     @Test
     public void testWorkerThreads() throws Exception {
         ArrayList<QuorumPeer> peerList = new ArrayList<QuorumPeer>();
-
-        for (int sid = 0; sid < 3; sid++) {
-            QuorumPeer peer = new QuorumPeer(peers, peerTmpdir[sid], peerTmpdir[sid],
-                                             peerClientPort[sid], 3, sid, 1000, 2, 2);
-            LOG.info("Starting peer " + peer.getId());
-            peer.start();
-            peerList.add(sid, peer);
-        }
-        String failure = verifyThreadCount(peerList, 4);
-        if (failure != null) {
-            Assert.fail(failure);
-        }
-        for (int myid = 0; myid < 3; myid++) {
-            for (int i = 0; i < 5; i++) {
-                // halt one of the listeners and verify count
-                QuorumPeer peer = peerList.get(myid);
-                LOG.info("Round " + i + ", halting peer " + peer.getId());
-                peer.shutdown();
-                peerList.remove(myid);
-                failure = verifyThreadCount(peerList, 2);
-                if (failure != null) {
-                    Assert.fail(failure);
-                }
-
-                // Restart halted node and verify count
-                peer = new QuorumPeer(peers, peerTmpdir[myid], peerTmpdir[myid],
-                                        peerClientPort[myid], 3, myid, 1000, 2, 2);
-                LOG.info("Round " + i + ", restarting peer " + peer.getId());
+        try {
+            for (int sid = 0; sid < 3; sid++) {
+                QuorumPeer peer = new QuorumPeer(peers, peerTmpdir[sid],
+                        peerTmpdir[sid], peerClientPort[sid], 3, sid, 1000, 2,
+                        2);
+                LOG.info("Starting peer {}", peer.getId());
                 peer.start();
-                peerList.add(myid, peer);
-                failure = verifyThreadCount(peerList, 4);
-                if (failure != null) {
-                    Assert.fail(failure);
+                peerList.add(sid, peer);
+            }
+            String failure = verifyThreadCount(peerList, 4);
+            Assert.assertNull(failure, failure);
+            for (int myid = 0; myid < 3; myid++) {
+                for (int i = 0; i < 5; i++) {
+                    // halt one of the listeners and verify count
+                    QuorumPeer peer = peerList.get(myid);
+                    LOG.info("Round {}, halting peer ",
+                            new Object[] { i, peer.getId() });
+                    peer.shutdown();
+                    peerList.remove(myid);
+                    failure = verifyThreadCount(peerList, 2);
+                    Assert.assertNull(failure, failure);
+                    // Restart halted node and verify count
+                    peer = new QuorumPeer(peers, peerTmpdir[myid],
+                            peerTmpdir[myid], peerClientPort[myid], 3, myid,
+                            1000, 2, 2);
+                    LOG.info("Round {}, restarting peer ",
+                            new Object[] { i, peer.getId() });
+                    peer.start();
+                    peerList.add(myid, peer);
+                    failure = verifyThreadCount(peerList, 4);
+                    Assert.assertNull(failure, failure);
                 }
             }
+        } finally {
+            for (QuorumPeer quorumPeer : peerList) {
+                quorumPeer.shutdown();
+            }
         }
     }
 

Modified: zookeeper/trunk/src/java/test/org/apache/zookeeper/test/JMXEnv.java
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/JMXEnv.java?rev=1712218&r1=1712217&r2=1712218&view=diff
==============================================================================
--- zookeeper/trunk/src/java/test/org/apache/zookeeper/test/JMXEnv.java (original)
+++ zookeeper/trunk/src/java/test/org/apache/zookeeper/test/JMXEnv.java Tue Nov  3 07:11:27 2015
@@ -60,14 +60,18 @@ public class JMXEnv {
     
     public static void tearDown() {
         try {
-            cc.close();
+            if (cc != null) {
+                cc.close();
+            }
         } catch (IOException e) {
             LOG.warn("Unexpected, ignoring", e);
             
         }
         cc = null;
         try {
-            cs.stop();
+            if (cs != null) {
+                cs.stop();
+            }
         } catch (IOException e) {
             LOG.warn("Unexpected, ignoring", e);
             

Modified: zookeeper/trunk/src/java/test/org/apache/zookeeper/test/LeaderSessionTrackerTest.java
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/LeaderSessionTrackerTest.java?rev=1712218&r1=1712217&r2=1712218&view=diff
==============================================================================
--- zookeeper/trunk/src/java/test/org/apache/zookeeper/test/LeaderSessionTrackerTest.java (original)
+++ zookeeper/trunk/src/java/test/org/apache/zookeeper/test/LeaderSessionTrackerTest.java Tue Nov  3 07:11:27 2015
@@ -85,12 +85,10 @@ public class LeaderSessionTrackerTest ex
      * is not in closing state
      */
     public void testCreateEphemeral(boolean localSessionEnabled) throws Exception {
-        QuorumUtil qu = new QuorumUtil(1);
         if (localSessionEnabled) {
             qu.enableLocalSession(true);
         }
         qu.startAll();
-
         QuorumPeer leader = qu.getLeaderQuorumPeer();
 
         ZooKeeper zk = new ZooKeeper(qu.getConnectString(leader),
@@ -131,7 +129,6 @@ public class LeaderSessionTrackerTest ex
      */
     @Test
     public void testCreatePersistent() throws Exception {
-        QuorumUtil qu = new QuorumUtil(1);
         qu.enableLocalSession(true);
         qu.startAll();
 

Modified: zookeeper/trunk/src/java/test/org/apache/zookeeper/test/QuorumTest.java
URL: http://svn.apache.org/viewvc/zookeeper/trunk/src/java/test/org/apache/zookeeper/test/QuorumTest.java?rev=1712218&r1=1712217&r2=1712218&view=diff
==============================================================================
--- zookeeper/trunk/src/java/test/org/apache/zookeeper/test/QuorumTest.java (original)
+++ zookeeper/trunk/src/java/test/org/apache/zookeeper/test/QuorumTest.java Tue Nov  3 07:11:27 2015
@@ -53,6 +53,7 @@ public class QuorumTest extends ZKTestCa
 
     private final QuorumBase qb = new QuorumBase();
     private final ClientTest ct = new ClientTest();
+    private QuorumUtil qu;
 
     @Before
     public void setUp() throws Exception {
@@ -65,6 +66,9 @@ public class QuorumTest extends ZKTestCa
     public void tearDown() throws Exception {
         ct.tearDownAll();
         qb.tearDown();
+        if (qu != null) {
+            qu.tearDown();
+        }
     }
 
     @Test
@@ -296,7 +300,7 @@ public class QuorumTest extends ZKTestCa
      * */
     @Test
     public void testFollowersStartAfterLeader() throws Exception {
-        QuorumUtil qu = new QuorumUtil(1);
+        qu = new QuorumUtil(1);
         CountdownWatcher watcher = new CountdownWatcher();
         qu.startQuorum();
 
@@ -346,11 +350,10 @@ public class QuorumTest extends ZKTestCa
      * 
      */
     @Test
-    public void testNoLogBeforeLeaderEstablishment () 
-    throws IOException, InterruptedException, KeeperException{
+    public void testNoLogBeforeLeaderEstablishment () throws Exception {
         final Semaphore sem = new Semaphore(0);
 
-        QuorumUtil qu = new QuorumUtil(2, 10);
+        qu = new QuorumUtil(2, 10);
         qu.startQuorum();
 
         int index = 1;
@@ -411,6 +414,7 @@ public class QuorumTest extends ZKTestCa
         Assert.assertTrue("Zxid: " + qu.getPeer(index).peer.getActiveServer().getZxid() + 
                 "Current epoch: " + epochF, epochF == epochL);
 
+        zk.close();
     }
 
     // skip superhammer and clientcleanup as they are too expensive for quorum
@@ -426,7 +430,7 @@ public class QuorumTest extends ZKTestCa
      */
     @Test
     public void testMultiToFollower() throws Exception {
-        QuorumUtil qu = new QuorumUtil(1);
+        qu = new QuorumUtil(1);
         CountdownWatcher watcher = new CountdownWatcher();
         qu.startQuorum();