unit-testing - 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!!
解决方案
https://github.com/apache/curator/blob/master/curator-test-zk34/README.md OMG,我太笨了,没想到会发生这种情况
推荐阅读
- sql - 运行报告时,如何在搜索日期时间范围时排除 12:00:00.000
- python - 要求用户在密码重置前至少尝试 3 次
- html - 是否可以使用 xpath 将 $ 用作属性名称的一部分
- docker - 包含的容器不适用于 docker compose
- visual-c++ - 如何“捕捉”中断信号并返回迄今为止找到的最佳解决方案
- assembly - 第 1 行的语法错误:标签不能是“BRA”
- javascript - 未找到 Ajax 响应中返回的函数
- angular - 从一个组件运行/发射器事件到另一个组件
- visual-studio-2017 - 使用 NuGet 包资源管理器和 Azure DevOps 工件
- ios - 使用 FlatList 可滚动的本机独立视图组件?