【问题标题】:java.lang.AssertionError: Cassandra daemon did not start within timeoutjava.lang.AssertionError:Cassandra 守护程序未在超时内启动
【发布时间】:2016-10-05 17:29:17
【问题描述】:

我的测试班:

public class NetworkSettingsDaoTest {

@Rule
public CassandraCQLUnit cassandraCQLUnit = new CassandraCQLUnit(new ClassPathCQLDataSet("simpleWithCreateKeyspace.cql"));
public static Session session;
public static NetworkSettingsDao networkSettingsDao;
@Before
public void init() throws ConfigurationException, TTransportException, IOException, InterruptedException{
    EmbeddedCassandraServerHelper.startEmbeddedCassandra(5600000L);
    //Thread.sleep(4*1000); //workaround for weak machine
    session = cassandraCQLUnit.getSession();
    networkSettingsDao = new NetworkSettingsDao();
}

@Test
public void should_have_started_and_execute_cql_script() throws Exception {
    ResultSet result = session.execute("select * from mytable WHERE id='myKey01'");
    assertThat(result.iterator().next().getString("value"), is("myValue01"));
}   
}

我的 simpleWithCreateKeyspace.cql 文件:

CREATE KEYSPACE NETWORKSETTINGS WITH replication={'class' : 'SimpleStrategy', 'replication_factor':1};
USE NETWORKSETTINGS;

CREATE TABLE STBDevice(
    KEY varchar,
    SETTINGS_COLUMN varchar,
    AMSIP varchar,
    PRIMARY KEY(KEY));

INSERT INTO STBDevice(KEY, SETTINGS_COLUMN,AMSIP) values('myKey01','myColumn1','myAMSIP1');

例外:

java.lang.AssertionError: Cassandra 守护进程没有在其中启动 超时时间 org.cassandraunit.utils.EmbeddedCassandraServerHelper.startEmbeddedCassandra(EmbeddedCassandraServerHelper.java:130) 在 org.cassandraunit.utils.EmbeddedCassandraServerHelper.startEmbeddedCassandra(EmbeddedCassandraServerHelper.java:85) 在 org.cassandraunit.utils.EmbeddedCassandraServerHelper.startEmbeddedCassandra(EmbeddedCassandraServerHelper.java:64) 在 org.cassandraunit.utils.EmbeddedCassandraServerHelper.startEmbeddedCassandra(EmbeddedCassandraServerHelper.java:56) 在 org.cassandraunit.BaseCassandraUnit.before(BaseCassandraUnit.java:28) 在 org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:46) 在 org.junit.rules.RunRules.evaluate(RunRules.java:20) 在 org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 在 org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 在 org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 在 org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 在 org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 在 org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 在 org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 在 org.junit.runners.ParentRunner.run(ParentRunner.java:309) 在 org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 在 org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 在 org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

【问题讨论】:

    标签: java cassandra junit4


    【解决方案1】:

    看起来,这取决于您在 Cassandra 上触发的查询数量。如果您有太多查询要运行,那么您需要增加 EmbeddedCassandra 注释中的超时时间。 @EmbeddedCassandra(timeout = 100000L)

    【讨论】:

      【解决方案2】:

      这门课帮助解决问题

      package org.cassandraunit.test.spring.cql;
      import com.datastax.driver.core.Cluster;
      import com.datastax.driver.core.ResultSet;
      import com.datastax.driver.core.Session;
      import org.cassandraunit.spring.CassandraDataSet;
      import org.cassandraunit.spring.CassandraUnitTestExecutionListener;
      import org.cassandraunit.spring.EmbeddedCassandra;
      import org.junit.Test;
      import org.junit.runner.RunWith;
      import org.springframework.test.context.TestExecutionListeners;
      import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
      
      import static org.hamcrest.MatcherAssert.assertThat;
      import static org.hamcrest.Matchers.is;
      
      
      @RunWith(SpringJUnit4ClassRunner.class)
      @TestExecutionListeners({ CassandraUnitTestExecutionListener.class })
      @CassandraDataSet(value = { "simple.cql" })
      @EmbeddedCassandra
      public class SpringCQLScriptLoadTest {
      
      @Test
      public void should_have_started_and_execute_cql_script() throws Exception {
          Cluster cluster = Cluster.builder()
                  .addContactPoints("127.0.0.1")
                  .withPort(9142)
                  .build();
          Session session = cluster.connect("cassandra_unit_keyspace");
      
          ResultSet result = session.execute("select * from mytable WHERE id='myKey01'");
          assertThat(result.iterator().next().getString("value"), is("myValue01"));
      }
        }
      

      【讨论】:

      • 出了什么问题?
      • @Sat 您能否解释一下解决问题的具体更改是什么?
      • 问题正如我提到的Cassandra daemon did not start within timeout,我通过添加我在回答中提到的另一个类解决了这个问题。
      【解决方案3】:

      就我而言,直到昨天,服务器总是在默认的 10 秒窗口内启动。今天,它需要 50 到 70 秒。没有有效的解释。所以,看起来唯一的选择是增加超时。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-27
        • 1970-01-01
        • 1970-01-01
        • 2015-05-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-20
        相关资源
        最近更新 更多