首页 > 解决方案 > zookeeper 单元测试:quorumPeer never got set

问题描述

我想写zookeeper单元测试,使用嵌入式zookeeper curator-test。当我的zookeeper版本小于3.4.0的时候,比如3.3.0,是没有问题的。但是当我使用下面的配置时,就会出现问题。我已经搜索了很多方法来尝试解决,但问题仍然存在。

maven pom 依赖:

<!--zookeeper-->
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.4.13</version>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-recipes</artifactId>
        <version>4.0.1</version>
        <exclusions>
            <exclusion>
                <artifactId>curator-client</artifactId>
                <groupId>org.apache.curator</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-client</artifactId>
        <version>4.0.1</version>
        <exclusions>
            <exclusion>
                <artifactId>zookeeper</artifactId>
                <groupId>org.apache.zookeeper</groupId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.curator</groupId>
        <artifactId>curator-test</artifactId>
        <version>4.2.0</version>
        <exclusions>
            <exclusion>
                <groupId>org.apache.zookeeper</groupId>
                <artifactId>zookeeper</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

我的单元测试代码:

public static void main(String[] args) throws Exception {
    TestingCluster cluster = new TestingCluster(3);
    cluster.start();
    Thread.sleep(2000);

    TestingZooKeeperServer leader = null;
    for(TestingZooKeeperServer zs : cluster.getServers()){
        System.out.print(zs.getInstanceSpec().getServerId()+"-");
        System.out.print(zs.getQuorumPeer().getServerState()+"-");
        System.out.println(zs.getInstanceSpec().getDataDirectory().getAbsolutePath());
        if( zs.getQuorumPeer().getServerState().equals( "leading" )){
            leader = zs;
        }
    }
    leader.kill();
    System.out.println( "--After leader kill:" );
    for(TestingZooKeeperServer zs : cluster.getServers()){
        System.out.print(zs.getInstanceSpec().getServerId()+"-");
        System.out.print(zs.getQuorumPeer().getServerState()+"-");
        System.out.println(zs.getInstanceSpec().getDataDirectory().getAbsolutePath());
    }
    cluster.stop();
}

错误和异常:

Exception in thread "Thread-0" java.lang.NoSuchFieldError: configFileStr
at org.apache.curator.test.QuorumConfigBuilder$1.<init>(QuorumConfigBuilder.java:142)
at org.apache.curator.test.QuorumConfigBuilder.buildConfig(QuorumConfigBuilder.java:137)
at org.apache.curator.test.TestingZooKeeperServer$1.run(TestingZooKeeperServer.java:157)
at java.lang.Thread.run(Thread.java:748)
Exception in thread "main" java.lang.Exception: quorumPeer never got set
    at org.apache.curator.test.TestingQuorumPeerMain.blockUntilStarted(TestingQuorumPeerMain.java:90)
    at org.apache.curator.test.TestingZooKeeperServer.start(TestingZooKeeperServer.java:167)
    at org.apache.curator.test.TestingCluster.start(TestingCluster.java:149)

我试过了: 去掉额外的zookeeper依赖 版本控制 但是这个问题还是没有解决,希望高手能帮我指出,thx!!

标签: unit-testingapache-zookeeper

解决方案


https://github.com/apache/curator/blob/master/curator-test-zk34/README.md OMG,我太笨了,没想到会发生这种情况


推荐阅读