@Test(groups = "unit") public void should_use_statement_when_set_on_statement() { QueryOptions queryOptions = new QueryOptions(); SimpleStatement statement = new SimpleStatement("", cluster); for (boolean valueInOptions : new boolean[] {true, false}) for (boolean valueInStatement : new boolean[] {true, false}) { queryOptions.setDefaultIdempotence(valueInOptions); statement.setIdempotent(valueInStatement); assertThat(statement.isIdempotentWithDefault(queryOptions)).isEqualTo(valueInStatement); } }
@Test(groups = "short") public void should_retry_on_write_timeout_if_statement_idempotent() { simulateError(1, write_request_timeout); session.execute(new SimpleStatement("mock query").setIdempotent(true)); assertOnWriteTimeoutWasCalled(1); assertThat(errors.getWriteTimeouts().getCount()).isEqualTo(1); assertThat(errors.getRetries().getCount()).isEqualTo(1); assertThat(errors.getRetriesOnWriteTimeout().getCount()).isEqualTo(1); assertQueried(1, 1); assertQueried(2, 1); assertQueried(3, 0); }
assertThat(bound.isIdempotent()).isNull(); statement.setIdempotent(true); prepared = session().prepare(statement); bound = prepared.bind(1); assertThat(bound.isIdempotent()).isTrue(); statement.setIdempotent(false); prepared = session().prepare(statement); bound = prepared.bind(1);
@SuppressWarnings("UnusedParameters") @Test(groups = "short", dataProvider = "serverSideErrors") public void should_retry_on_server_error_if_statement_idempotent( Result error, Class<? extends DriverException> exception) { simulateError(1, error); simulateError(2, error); simulateError(3, error); try { session.execute(new SimpleStatement("mock query").setIdempotent(true)); fail("expected a NoHostAvailableException"); } catch (NoHostAvailableException e) { assertThat(e.getErrors().keySet()) .hasSize(3) .containsOnly( host1.getSocketAddress(), host2.getSocketAddress(), host3.getSocketAddress()); assertThat(e.getErrors().values()).hasOnlyElementsOfType(exception); } assertOnRequestErrorWasCalled(3, exception); assertThat(errors.getOthers().getCount()).isEqualTo(3); assertThat(errors.getRetries().getCount()).isEqualTo(3); assertThat(errors.getRetriesOnOtherErrors().getCount()).isEqualTo(3); assertQueried(1, 1); assertQueried(2, 1); assertQueried(3, 1); }
@Test(groups = "short", dataProvider = "connectionErrors") public void should_retry_on_connection_error_if_statement_idempotent( ClosedConnectionConfig.CloseType closeType) { simulateError(1, closed_connection, new ClosedConnectionConfig(closeType)); simulateError(2, closed_connection, new ClosedConnectionConfig(closeType)); simulateError(3, closed_connection, new ClosedConnectionConfig(closeType)); try { session.execute(new SimpleStatement("mock query").setIdempotent(true)); Fail.fail("expected a TransportException"); } catch (NoHostAvailableException e) { assertThat(e.getErrors().keySet()) .hasSize(3) .containsOnly( host1.getSocketAddress(), host2.getSocketAddress(), host3.getSocketAddress()); assertThat(e.getErrors().values()).hasOnlyElementsOfType(TransportException.class); } assertOnRequestErrorWasCalled(3, TransportException.class); assertThat(errors.getRetries().getCount()).isEqualTo(3); assertThat(errors.getConnectionErrors().getCount()).isEqualTo(3); assertThat(errors.getIgnoresOnConnectionError().getCount()).isEqualTo(0); assertThat(errors.getRetriesOnConnectionError().getCount()).isEqualTo(3); assertQueried(1, 1); assertQueried(2, 1); assertQueried(3, 1); }
@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); } }
statement.setIdempotent(true); session.execute(statement);
SimpleStatement s = new SimpleStatement(queryString); s.setIdempotent(true); Futures.addCallback(session().prepareAsync(s), new FutureCallback<PreparedStatement>() { @Override
@Test(groups = "unit") public void should_use_statement_when_set_on_statement() { QueryOptions queryOptions = new QueryOptions(); SimpleStatement statement = new SimpleStatement("", cluster); for (boolean valueInOptions : new boolean[] {true, false}) for (boolean valueInStatement : new boolean[] {true, false}) { queryOptions.setDefaultIdempotence(valueInOptions); statement.setIdempotent(valueInStatement); assertThat(statement.isIdempotentWithDefault(queryOptions)).isEqualTo(valueInStatement); } }
@Test(groups = "short") public void should_retry_on_write_timeout_if_statement_idempotent() { simulateError(1, write_request_timeout); session.execute(new SimpleStatement("mock query").setIdempotent(true)); assertOnWriteTimeoutWasCalled(1); assertThat(errors.getWriteTimeouts().getCount()).isEqualTo(1); assertThat(errors.getRetries().getCount()).isEqualTo(1); assertThat(errors.getRetriesOnWriteTimeout().getCount()).isEqualTo(1); assertQueried(1, 1); assertQueried(2, 1); assertQueried(3, 0); }
@Test(groups = "short") public void should_propagate_idempotence_in_statements() { session() .execute(String.format("CREATE TABLE %s.idempotencetest (i int PRIMARY KEY)", keyspace)); SimpleStatement statement; PreparedStatement prepared; BoundStatement bound; statement = new SimpleStatement( String.format("SELECT * FROM %s.idempotencetest WHERE i = ?", keyspace)); prepared = session().prepare(statement); bound = prepared.bind(1); assertThat(prepared.isIdempotent()).isNull(); assertThat(bound.isIdempotent()).isNull(); statement.setIdempotent(true); prepared = session().prepare(statement); bound = prepared.bind(1); assertThat(prepared.isIdempotent()).isTrue(); assertThat(bound.isIdempotent()).isTrue(); statement.setIdempotent(false); prepared = session().prepare(statement); bound = prepared.bind(1); assertThat(prepared.isIdempotent()).isFalse(); assertThat(bound.isIdempotent()).isFalse(); prepared.setIdempotent(true); bound = prepared.bind(1); assertThat(bound.isIdempotent()).isTrue(); }
@SuppressWarnings("UnusedParameters") @Test(groups = "short", dataProvider = "serverSideErrors") public void should_retry_on_server_error_if_statement_idempotent( Result error, Class<? extends DriverException> exception) { simulateError(1, error); simulateError(2, error); simulateError(3, error); try { session.execute(new SimpleStatement("mock query").setIdempotent(true)); fail("expected a NoHostAvailableException"); } catch (NoHostAvailableException e) { assertThat(e.getErrors().keySet()) .hasSize(3) .containsOnly( host1.getSocketAddress(), host2.getSocketAddress(), host3.getSocketAddress()); assertThat(e.getErrors().values()).hasOnlyElementsOfType(exception); } assertOnRequestErrorWasCalled(3, exception); assertThat(errors.getOthers().getCount()).isEqualTo(3); assertThat(errors.getRetries().getCount()).isEqualTo(3); assertThat(errors.getRetriesOnOtherErrors().getCount()).isEqualTo(3); assertQueried(1, 1); assertQueried(2, 1); assertQueried(3, 1); }
@Test(groups = "short", dataProvider = "connectionErrors") public void should_retry_on_connection_error_if_statement_idempotent( ClosedConnectionConfig.CloseType closeType) { simulateError(1, closed_connection, new ClosedConnectionConfig(closeType)); simulateError(2, closed_connection, new ClosedConnectionConfig(closeType)); simulateError(3, closed_connection, new ClosedConnectionConfig(closeType)); try { session.execute(new SimpleStatement("mock query").setIdempotent(true)); Fail.fail("expected a TransportException"); } catch (NoHostAvailableException e) { assertThat(e.getErrors().keySet()) .hasSize(3) .containsOnly( host1.getSocketAddress(), host2.getSocketAddress(), host3.getSocketAddress()); assertThat(e.getErrors().values()).hasOnlyElementsOfType(TransportException.class); } assertOnRequestErrorWasCalled(3, TransportException.class); assertThat(errors.getRetries().getCount()).isEqualTo(3); assertThat(errors.getConnectionErrors().getCount()).isEqualTo(3); assertThat(errors.getIgnoresOnConnectionError().getCount()).isEqualTo(0); assertThat(errors.getRetriesOnConnectionError().getCount()).isEqualTo(3); assertQueried(1, 1); assertQueried(2, 1); assertQueried(3, 1); }
@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); } }
statement.setIdempotent(true); session.execute(statement);