Browse Source

ZOOKEEPER-1606. intermittent failures in ZkDatabaseCorruptionTest on jenkins (lixiaofeng via phunt)

git-svn-id: https://svn.apache.org/repos/asf/zookeeper/trunk@1447618 13f79535-47bb-0310-9956-ffa450edef68
Patrick D. Hunt 12 years ago
parent
commit
684549caaa
2 changed files with 33 additions and 15 deletions
  1. 3 0
      CHANGES.txt
  2. 30 15
      src/java/test/org/apache/zookeeper/test/ZkDatabaseCorruptionTest.java

+ 3 - 0
CHANGES.txt

@@ -331,6 +331,9 @@ BUGFIXES:
   ZOOKEEPER-1648. Fix WatcherTest in JDK7
   (Thawan Kooburat via phunt)
 
+  ZOOKEEPER-1606. intermittent failures in ZkDatabaseCorruptionTest on
+  jenkins (lixiaofeng via phunt)
+
 IMPROVEMENTS:
 
   ZOOKEEPER-1170. Fix compiler (eclipse) warnings: unused imports,

+ 30 - 15
src/java/test/org/apache/zookeeper/test/ZkDatabaseCorruptionTest.java

@@ -21,6 +21,7 @@ package org.apache.zookeeper.test;
 import java.io.File;
 import java.io.IOException;
 import java.io.RandomAccessFile;
+import java.util.Arrays;
 
 import org.apache.zookeeper.CreateMode;
 import org.apache.zookeeper.WatchedEvent;
@@ -83,30 +84,42 @@ public class ZkDatabaseCorruptionTest extends ZKTestCase {
             zk.create("/0-" + i, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
         }
         zk.close();
-        QuorumPeer leader;
+
+        long leaderSid = 1;
+        QuorumPeer leader = null;
         //find out who is the leader and kill it
-        if ( qb.s5.getPeerState() != ServerState.LEADING) {
-            throw new Exception("the last server is not the leader");
+        for (QuorumPeer quorumPeer : Arrays.asList(qb.s1, qb.s2, qb.s3, qb.s4, qb.s5)) {
+            if (quorumPeer.getPeerState() == ServerState.LEADING) {
+                leader = quorumPeer;
+                break;
+            }
+            ++leaderSid;
         }
-        leader = qb.s5;
-        // now corrupt the qurompeer database
+
+        Assert.assertNotNull("Cannot find the leader.", leader);
+        leader.shutdown();
+
+        // now corrupt the leader's database
         FileTxnSnapLog snapLog = leader.getTxnFactory();
         File snapDir= snapLog.getSnapDir();
         //corrupt all the snapshot in the snapshot directory
         corruptAllSnapshots(snapDir);
         qb.shutdownServers();
         qb.setupServers();
-        qb.s1.start();
-        qb.s2.start();
-        qb.s3.start();
-        qb.s4.start();
+
+        if (leaderSid != 1)qb.s1.start(); else leader = qb.s1;
+        if (leaderSid != 2)qb.s2.start(); else leader = qb.s2;
+        if (leaderSid != 3)qb.s3.start(); else leader = qb.s3;
+        if (leaderSid != 4)qb.s4.start(); else leader = qb.s4;
+        if (leaderSid != 5)qb.s5.start(); else leader = qb.s5;
+
         try {
-            qb.s5.start();
+            leader.start();
             Assert.assertTrue(false);
         } catch(RuntimeException re) {
             LOG.info("Got an error: expected", re);
         }
-        //waut for servers to be up
+        //wait for servers to be up
         String[] list = qb.hostPort.split(",");
         for (int i =0; i < 4; i++) {
             String hp = list[i];
@@ -122,10 +135,12 @@ public class ZkDatabaseCorruptionTest extends ZKTestCase {
             zk.create("/0-" + i, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
         }
         zk.close();
-        QuorumBase.shutdown(qb.s1);
-        QuorumBase.shutdown(qb.s2);
-        QuorumBase.shutdown(qb.s3);
-        QuorumBase.shutdown(qb.s4);
+
+        if (leaderSid != 1)QuorumBase.shutdown(qb.s1);
+        if (leaderSid != 2)QuorumBase.shutdown(qb.s2);
+        if (leaderSid != 3)QuorumBase.shutdown(qb.s3);
+        if (leaderSid != 4)QuorumBase.shutdown(qb.s4);
+        if (leaderSid != 5)QuorumBase.shutdown(qb.s5);
     }