@Test(groups = "short") public void should_log_queries_beyond_constant_threshold() throws Exception { // given slow.setLevel(DEBUG); queryLogger = builder().withConstantThreshold(10).build(); cluster.register(queryLogger); String query = "SELECT foo FROM bar"; primingClient.prime( queryBuilder().withQuery(query).withThen(then().withFixedDelay(100L)).build()); // when session.execute(query); // then String line = slowAppender.waitAndGet(5000); assertThat(line).contains("Query too slow").contains(ip).contains(query); }
@Test(groups = "short") public void should_log_timed_out_queries() throws Exception { // given error.setLevel(DEBUG); queryLogger = builder().build(); cluster.register(queryLogger); cluster.getConfiguration().getSocketOptions().setReadTimeoutMillis(1); String query = "SELECT foo FROM bar"; primingClient.prime( queryBuilder().withQuery(query).withThen(then().withFixedDelay(100L)).build()); // when try { session.execute(query); fail("Should have thrown OperationTimedOutException"); } catch (OperationTimedOutException e) { // ok } // then String line = errorAppender.waitAndGet(5000); assertThat(line) .contains("Query error") .contains(ip) .contains(Integer.toString(scassandra.getBinaryPort())) .contains(query) .contains("Timed out waiting for server response"); }
@Test(groups = "short") public void should_retry_on_client_timeout_if_statement_idempotent() { cluster.getConfiguration().getSocketOptions().setReadTimeoutMillis(1); try { scassandras .node(1) .primingClient() .prime( PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withFixedDelay(1000L).withRows(row("result", "result1"))) .build()); session.execute(new SimpleStatement("mock query").setIdempotent(true)); assertOnRequestErrorWasCalled(1, OperationTimedOutException.class); assertThat(errors.getClientTimeouts().getCount()).isEqualTo(1); assertThat(errors.getRetries().getCount()).isEqualTo(1); assertThat(errors.getRetriesOnClientTimeout().getCount()).isEqualTo(1); assertQueried(1, 1); assertQueried(2, 1); assertQueried(3, 0); } finally { cluster .getConfiguration() .getSocketOptions() .setReadTimeoutMillis(SocketOptions.DEFAULT_READ_TIMEOUT_MILLIS); } }
.prime(queryBuilder().withQuery("ping").withThen(then().withFixedDelay(8675309999L)));
PrimingRequest.queryBuilder() .withQuery("USE \"newkeyspace\"") .withThen(PrimingRequest.then().withFixedDelay(2000L))); pool.manager.poolsState.setKeyspace("newkeyspace");
PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withFixedDelay(1000L).withRows(row("result", "result1"))) .build()); scassandras PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withFixedDelay(1000L).withRows(row("result", "result2"))) .build()); scassandras PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withFixedDelay(1000L).withRows(row("result", "result3"))) .build()); try {
PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withFixedDelay(1000L).withRows(row("result", "result1"))) .build()); scassandras PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withFixedDelay(1000L).withRows(row("result", "result2"))) .build()); scassandras PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withFixedDelay(1000L).withRows(row("result", "result3"))) .build()); try {
PrimingRequest.queryBuilder() .withQuery("USE \"slowks\"") .withThen(PrimingRequest.then().withFixedDelay(5000L))); Connection connection = pool.connections.get(0); connection.setKeyspaceAsync("slowks");
PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withRows(row("result", "result1")).withFixedDelay(1000L)) .build()); PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withRows(row("result", "result2")).withFixedDelay(1000L)) .build());
PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withRows(rows).withFixedDelay(10L)) .build());
PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withRows(row("result", "result1")).withFixedDelay(2000L)) .build());
PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withRows(row("result", "result1")).withFixedDelay(2000L)) .build()); PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withRows(row("result", "result3")).withFixedDelay(500L)) .build()); PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withRows(row("result", "result2")).withFixedDelay(2000L)) .build()); long execStartCount = errors.getSpeculativeExecutions().getCount();
PrimingRequest.queryBuilder() .withQuery("USE \"slowks\"") .withThen(PrimingRequest.then().withFixedDelay(5000L)));
queryBuilder().withQuery(slowQuery).withThen(then().withFixedDelay(100L)).build());
PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withFixedDelay(1000L).withRows(row("result", "result1"))) .build()); try {
PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withFixedDelay(1000L).withRows(row("result", "result1"))) .build()); try {
PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withFixedDelay(1000L).withRows(row("result", "result1"))) .build()); try {
@Test(groups = "short") public void should_start_speculative_execution_if_first_execution_takes_too_long() { scassandras .node(1) .primingClient() .prime( PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withRows(row("result", "result1")).withFixedDelay(400L)) .build()); scassandras .node(2) .primingClient() .prime( PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withRows(row("result", "result2"))) .build()); long execStartCount = errors.getSpeculativeExecutions().getCount(); ResultSet rs = session.execute("mock query"); Row row = rs.one(); assertThat(row.getString("result")).isEqualTo("result2"); assertThat(errors.getSpeculativeExecutions().getCount()).isEqualTo(execStartCount + 1); ExecutionInfo executionInfo = rs.getExecutionInfo(); // triedHosts does not contain host1 because the request to it had not completed yet assertThat(executionInfo.getTriedHosts()).containsOnly(host2); assertThat(executionInfo.getQueriedHost()).isEqualTo(host2); assertThat(executionInfo.getSpeculativeExecutions()).isEqualTo(1); assertThat(executionInfo.getSuccessfulExecutionIndex()).isEqualTo(1); }
@Test(groups = "short") public void should_count_inflight_requests_metrics() { sCluster .node(1) .primingClient() .prime( PrimingRequest.queryBuilder() .withQuery("mock query") .withThen(then().withFixedDelay(100000L)) .build()); Cluster cluster = null; try { cluster = builder().build(); Session session = cluster.connect(); assertThat(cluster.getMetrics().getInFlightRequests().getValue()).isEqualTo(0); session.executeAsync("mock query"); session.executeAsync("mock query"); assertThat(cluster.getMetrics().getInFlightRequests().getValue()).isEqualTo(2); } finally { if (cluster != null) { cluster.close(); } } }
@BeforeMethod(groups = "short") public void setup() { primingClient.prime( queryBuilder().withQuery(query).withThen(then().withFixedDelay(100L)).build()); // Set default timeout too low cluster.getConfiguration().getSocketOptions().setReadTimeoutMillis(10); }