Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果org.gradle.parallel=true,则一套Java UTs的cassandra单元会出现间歇性故障_Java_Cassandra_Spring Data Cassandra - Fatal编程技术网

如果org.gradle.parallel=true,则一套Java UTs的cassandra单元会出现间歇性故障

如果org.gradle.parallel=true,则一套Java UTs的cassandra单元会出现间歇性故障,java,cassandra,spring-data-cassandra,Java,Cassandra,Spring Data Cassandra,我正在尝试为一组UTs引入cassandra单元,这些UTs在spring boot应用程序中运行org.gradle.parallel=true 运行所有测试是不可靠的,尽管偶尔可以运行 我猜这与第页描述的问题有关 i、 e.当下一次UT启动时,第一个实例仍然悬而未决,似乎没有办法强迫它“快速”关闭 我最初给出不可靠结果的方法是使用org.gradle.parallel=true @RunWith(SpringJUnit4ClassRunner.class) @ContextConfigura

我正在尝试为一组UTs引入cassandra单元,这些UTs在spring boot应用程序中运行
org.gradle.parallel=true

运行所有测试是不可靠的,尽管偶尔可以运行

我猜这与第页描述的问题有关 i、 e.当下一次UT启动时,第一个实例仍然悬而未决,似乎没有办法强迫它“快速”关闭

我最初给出不可靠结果的方法是使用
org.gradle.parallel=true

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@TestExecutionListeners(
  listeners = CassandraUnitTestExecutionListener.class,
  mergeMode = MERGE_WITH_DEFAULTS
)
@CassandraDataSet
@EmbeddedCassandra
public class MyCassandraUnitTest {

  @Test
  public void xxx_xxx() {
  }

}
如和所述

作为一种解决方法,我尝试删除注释,而不是使用本机API,即尝试在所有测试中保持一个运行,并使用
org.gradle.parallel=false
这似乎是可靠的,但会减慢整个构建。(仍在测试以确保其不一致)与此方法一致

单元课前:

EmbeddedCassandraServerHelper.startEmbeddedCassandra();
EmbeddedCassandraServerHelper.cleanEmbeddedCassandra();
单元课后:

EmbeddedCassandraServerHelper.startEmbeddedCassandra();
EmbeddedCassandraServerHelper.cleanEmbeddedCassandra();
如中所述 -

第一种方法的错误是超时,如

00:27:31.826 [Test worker] ERROR org.cassandraunit.utils.EmbeddedCassandraServerHelper - Cassandra daemon did not start after 20000 ms. Consider increasing the timeout
或者像这样的端口冲突

 2017-02-02 19:44:41.741 ERROR 40053 --- [pool-2-thread-1] o.a.cassandra.service.CassandraDaemon    : Fatal configuration error

    org.apache.cassandra.exceptions.ConfigurationException: /127.0.0.1:7010 is in use by another process.  Change listen_address:storage_port in cassandra.yaml to values that do not conflict with other services
        at org.apache.cassandra.net.MessagingService.getServerSockets(MessagingService.java:557)
        at org.apache.cassandra.net.MessagingService.listen(MessagingService.java:501)
        at org.apache.cassandra.net.MessagingService.listen(MessagingService.java:485)
        at org.apache.cassandra.service.StorageService.prepareToJoin(StorageService.java:745)
        at org.apache.cassandra.service.StorageService.initServer(StorageService.java:648)
        at org.apache.cassandra.service.StorageService.initServer(StorageService.java:548)
        at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:385)
        at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:601)
        at org.cassandraunit.utils.EmbeddedCassandraServerHelper$1.run(EmbeddedCassandraServerHelper.java:129)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

    2017-02-02 19:44:41.745  INFO 40053 --- [       Thread-7] o.s.w.c.s.GenericWebApplicationContext   : Closing org.springframework.web.context.support.GenericWebApplicationContext@7ffd8dee: startup date [Thu Feb 02 19:44:17 GMT 2017]; root of context hierarchy
    2017-02-02 19:44:41.972  WARN 40053 --- [iceShutdownHook] org.apache.cassandra.gms.Gossiper        : No local state or state is in silent shutdown, not announcing shutdown
    2017-02-02 19:44:41.972  INFO 40053 --- [iceShutdownHook] o.apache.cassandra.net.MessagingService  : Waiting for messaging service to quiesce
    2017-02-02 19:44:41.982  INFO 40053 --- [iceShutdownHook] org.apache.cassandra.hints.HintsService  : Paused hints dispatch
    2017-02-02 19:44:42.072  INFO 40053 --- [iceShutdownHook] org.apache.cassandra.hints.HintsService  : Paused hints dispatch
回答我自己的问题: 我牺牲了gradle中的并行项目构建,即我的
gradle.properties中的
org.gradle.parallel=false

在我的测试中:

@BeforeClass
public static void before() throws InterruptedException, IOException, TTransportException {
    EmbeddedCassandraServerHelper.startEmbeddedCassandra(20000);
}

@AfterClass
public static void after() throws InterruptedException, IOException, TTransportException {
    EmbeddedCassandraServerHelper.cleanEmbeddedCassandra();
} 
cleanEmbeddedCassandra()
只会擦除密钥空间,但Cassandra服务器仍在运行

我更希望清理停止EmbeddedCassandraServer,而不是让它一直运行直到进程退出

该方法工作可靠,但不是我想要的也许有人会张贴一个更好的方式

你试过这个吗?

EmbeddedCassandraServerHelper.startEmbeddedCassandra(EmbeddedCassandraServerHelper.CASSANDRA_RNDPORT_YML_文件);