Github user anmolnar commented on a diff in the pull request:

    https://github.com/apache/zookeeper/pull/659#discussion_r224197413
  
    --- Diff: 
zookeeper-server/src/test/java/org/apache/zookeeper/server/quorum/QuorumPeerTestBase.java
 ---
    @@ -402,4 +421,129 @@ public File getConfFile() {
             }
     
         }
    +
    +    // This class holds the servers and clients for those servers
    +    protected static class Servers {
    +        MainThread mt[];
    +        ZooKeeper zk[];
    +        int[] clientPorts;
    +
    +        public void shutDownAllServers() throws InterruptedException {
    +            for (MainThread t: mt) {
    +                t.shutdown();
    +            }
    +        }
    +
    +        public void restartAllServersAndClients(Watcher watcher) throws 
IOException, InterruptedException {
    +            for (MainThread t : mt) {
    +                if (!t.isAlive()) {
    +                    t.start();
    +                }
    +            }
    +            for (int i = 0; i < zk.length; i++) {
    +                restartClient(i, watcher);
    +            }
    +        }
    +
    +        public void restartClient(int clientIndex, Watcher watcher) throws 
IOException, InterruptedException {
    +            if (zk[clientIndex] != null) {
    +                zk[clientIndex].close();
    +            }
    +            zk[clientIndex] = new ZooKeeper("127.0.0.1:" + 
clientPorts[clientIndex], ClientBase.CONNECTION_TIMEOUT, watcher);
    +        }
    +
    +        public int findLeader() {
    +            for (int i = 0; i < mt.length; i++) {
    +                if (mt[i].main.quorumPeer.leader != null) {
    +                    return i;
    +                }
    +            }
    +            return -1;
    +        }
    +    }
    +
    +    protected Servers LaunchServers(int numServers) throws IOException, 
InterruptedException {
    +        return LaunchServers(numServers, null);
    +    }
    +
    +    /** * This is a helper function for launching a set of servers
    +     *
    +     * @param numServers the number of servers
    +     * @param tickTime A ticktime to pass to MainThread
    +     * @return
    +     * @throws IOException
    +     * @throws InterruptedException
    +     */
    +    protected Servers LaunchServers(int numServers, Integer tickTime) 
throws IOException, InterruptedException {
    +        int SERVER_COUNT = numServers;
    +        QuorumPeerMainTest.Servers svrs = new QuorumPeerMainTest.Servers();
    +        svrs.clientPorts = new int[SERVER_COUNT];
    +        StringBuilder sb = new StringBuilder();
    +        for(int i = 0; i < SERVER_COUNT; i++) {
    +            svrs.clientPorts[i] = PortAssignment.unique();
    +            
sb.append("server."+i+"=127.0.0.1:"+PortAssignment.unique()+":"+PortAssignment.unique()+";"+svrs.clientPorts[i]+"\n");
    +        }
    +        String quorumCfgSection = sb.toString();
    +
    +        svrs.mt = new MainThread[SERVER_COUNT];
    +        svrs.zk = new ZooKeeper[SERVER_COUNT];
    +        for(int i = 0; i < SERVER_COUNT; i++) {
    +            if (tickTime != null) {
    +                svrs.mt[i] = new MainThread(i, svrs.clientPorts[i], 
quorumCfgSection, new HashMap<String, String>(), tickTime);
    +            } else {
    +                svrs.mt[i] = new MainThread(i, svrs.clientPorts[i], 
quorumCfgSection);
    +            }
    +            svrs.mt[i].start();
    +            svrs.restartClient(i, this);
    +        }
    +
    +        waitForAll(svrs, ZooKeeper.States.CONNECTED);
    +
    +        return svrs;
    +    }
    +
    +    public static void waitForOne(ZooKeeper zk, ZooKeeper.States state) 
throws InterruptedException {
    +        int iterations = ClientBase.CONNECTION_TIMEOUT / 500;
    +        while (zk.getState() != state) {
    +            if (iterations-- == 0) {
    +                throw new RuntimeException("Waiting too long " + 
zk.getState() + " != " + state);
    +            }
    +            Thread.sleep(500);
    +        }
    +    }
    +
    +    protected void waitForAll(Servers servers, ZooKeeper.States state) 
throws InterruptedException {
    --- End diff --
    
    I don't dare triggering another build. :)


---

Reply via email to