/** * Ensures that when handling a write timeout with {@link DowngradingConsistencyRetryPolicy} that * it ignores the exception if the {@link WriteType} was any of {@link * #ignoreWriteTypesWithReceivedAcks} and we received acks some at least one replica. * * @param writeType writeType communicated by {@link WriteTimeoutException}. * @test_category retry_policy */ @Test(groups = "short", dataProvider = "ignoreWriteTypesWithReceivedAcks") public void should_ignore_on_write_timeout_with_write_type_and_received_acks( WriteTypePrime writeType) { simulateError(1, write_request_timeout, new WriteTimeoutConfig(writeType, 1, 2)); query(); assertOnWriteTimeoutWasCalled(1); assertThat(errors.getWriteTimeouts().getCount()).isEqualTo(1); assertThat(errors.getRetries().getCount()).isEqualTo(0); assertThat(errors.getRetriesOnWriteTimeout().getCount()).isEqualTo(0); assertThat(errors.getIgnoresOnWriteTimeout().getCount()).isEqualTo(1); assertQueried(1, 1); assertQueried(2, 0); assertQueried(3, 0); }
/** * Ensures that when handling a write timeout with {@link DowngradingConsistencyRetryPolicy} that * a retry is attempted on the same host if the {@link WriteType} is {@link WriteType#BATCH_LOG}. * * @test_category retry_policy */ @Test(groups = "short") public void should_retry_once_on_same_host_with_BATCH_LOG_write_type() { simulateError(1, write_request_timeout, new WriteTimeoutConfig(WriteTypePrime.BATCH_LOG, 1, 2)); try { query(); fail("expected a WriteTimeoutException"); } catch (WriteTimeoutException e) { /*expected*/ } assertOnWriteTimeoutWasCalled(2); assertThat(errors.getRetries().getCount()).isEqualTo(1); assertThat(errors.getWriteTimeouts().getCount()).isEqualTo(2); assertThat(errors.getRetriesOnWriteTimeout().getCount()).isEqualTo(1); assertQueried(1, 2); assertQueried(2, 0); assertQueried(3, 0); }
/** * Ensures that when handling a write timeout with {@link DowngradingConsistencyRetryPolicy} that * it rethrows the exception if the {@link WriteType} was any of {@link #rethrowWriteTypes}. * * @param writeType writeType communicated by {@link WriteTimeoutException}. * @test_category retry_policy */ @Test(groups = "short", dataProvider = "rethrowWriteTypes") public void should_rethrow_on_write_timeout_with_write_type(WriteTypePrime writeType) { simulateError(1, write_request_timeout, new WriteTimeoutConfig(writeType, 0, 2)); try { query(); fail("expected a WriteTimeoutException"); } catch (WriteTimeoutException e) { /*expected*/ } assertOnWriteTimeoutWasCalled(1); assertThat(errors.getWriteTimeouts().getCount()).isEqualTo(1); assertThat(errors.getRetries().getCount()).isEqualTo(0); assertThat(errors.getRetriesOnWriteTimeout().getCount()).isEqualTo(0); assertQueried(1, 1); assertQueried(2, 0); assertQueried(3, 0); }
/** * Ensures that when handling a write timeout with {@link DowngradingConsistencyRetryPolicy} that * a retry is attempted on the same host with a reduced consistency level that matches * min(received acknowledgments, THREE) if the {@link WriteType} is {@link * WriteType#UNLOGGED_BATCH} and is only retries once. * * @param alive The number of received acknowledgements to use in write timeout. * @param expectedDowngradedCL The consistency level that is expected to be used on the retry. * @test_category retry_policy */ @Test(groups = "short", dataProvider = "consistencyLevels") public void should_retry_once_on_same_host_with_reduced_consistency_level_on_write_timeout( int alive, ConsistencyLevel expectedDowngradedCL) { simulateError( 1, write_request_timeout, new WriteTimeoutConfig(UNLOGGED_BATCH, alive, alive + 1)); try { query(); fail("expected a WriteTimeoutException"); } catch (WriteTimeoutException e) { assertThat(e.getConsistencyLevel()).isEqualTo(expectedDowngradedCL); } assertOnWriteTimeoutWasCalled(2); assertThat(errors.getRetries().getCount()).isEqualTo(1); assertThat(errors.getWriteTimeouts().getCount()).isEqualTo(2); assertThat(errors.getRetriesOnWriteTimeout().getCount()).isEqualTo(1); assertQueried(1, 2); assertQueried(2, 0); assertQueried(3, 0); }
/** * Ensures that when handling a write timeout with {@link DowngradingConsistencyRetryPolicy} that * it ignores the exception if the {@link WriteType} was any of {@link * #ignoreWriteTypesWithReceivedAcks} and we received acks some at least one replica. * * @param writeType writeType communicated by {@link WriteTimeoutException}. * @test_category retry_policy */ @Test(groups = "short", dataProvider = "ignoreWriteTypesWithReceivedAcks") public void should_ignore_on_write_timeout_with_write_type_and_received_acks( WriteTypePrime writeType) { simulateError(1, write_request_timeout, new WriteTimeoutConfig(writeType, 1, 2)); query(); assertOnWriteTimeoutWasCalled(1); assertThat(errors.getWriteTimeouts().getCount()).isEqualTo(1); assertThat(errors.getRetries().getCount()).isEqualTo(0); assertThat(errors.getRetriesOnWriteTimeout().getCount()).isEqualTo(0); assertThat(errors.getIgnoresOnWriteTimeout().getCount()).isEqualTo(1); assertQueried(1, 1); assertQueried(2, 0); assertQueried(3, 0); }
/** * Ensures that when handling a write timeout with {@link DowngradingConsistencyRetryPolicy} that * a retry is attempted on the same host if the {@link WriteType} is {@link WriteType#BATCH_LOG}. * * @test_category retry_policy */ @Test(groups = "short") public void should_retry_once_on_same_host_with_BATCH_LOG_write_type() { simulateError(1, write_request_timeout, new WriteTimeoutConfig(WriteTypePrime.BATCH_LOG, 1, 2)); try { query(); fail("expected a WriteTimeoutException"); } catch (WriteTimeoutException e) { /*expected*/ } assertOnWriteTimeoutWasCalled(2); assertThat(errors.getRetries().getCount()).isEqualTo(1); assertThat(errors.getWriteTimeouts().getCount()).isEqualTo(2); assertThat(errors.getRetriesOnWriteTimeout().getCount()).isEqualTo(1); assertQueried(1, 2); assertQueried(2, 0); assertQueried(3, 0); }
/** * Ensures that when handling a write timeout with {@link DowngradingConsistencyRetryPolicy} that * it rethrows the exception if the {@link WriteType} was any of {@link #rethrowWriteTypes}. * * @param writeType writeType communicated by {@link WriteTimeoutException}. * @test_category retry_policy */ @Test(groups = "short", dataProvider = "rethrowWriteTypes") public void should_rethrow_on_write_timeout_with_write_type(WriteTypePrime writeType) { simulateError(1, write_request_timeout, new WriteTimeoutConfig(writeType, 0, 2)); try { query(); fail("expected a WriteTimeoutException"); } catch (WriteTimeoutException e) { /*expected*/ } assertOnWriteTimeoutWasCalled(1); assertThat(errors.getWriteTimeouts().getCount()).isEqualTo(1); assertThat(errors.getRetries().getCount()).isEqualTo(0); assertThat(errors.getRetriesOnWriteTimeout().getCount()).isEqualTo(0); assertQueried(1, 1); assertQueried(2, 0); assertQueried(3, 0); }
/** * Ensures that when handling a write timeout with {@link DowngradingConsistencyRetryPolicy} that * a retry is attempted on the same host with a reduced consistency level that matches * min(received acknowledgments, THREE) if the {@link WriteType} is {@link * WriteType#UNLOGGED_BATCH} and is only retries once. * * @param alive The number of received acknowledgements to use in write timeout. * @param expectedDowngradedCL The consistency level that is expected to be used on the retry. * @test_category retry_policy */ @Test(groups = "short", dataProvider = "consistencyLevels") public void should_retry_once_on_same_host_with_reduced_consistency_level_on_write_timeout( int alive, ConsistencyLevel expectedDowngradedCL) { simulateError( 1, write_request_timeout, new WriteTimeoutConfig(UNLOGGED_BATCH, alive, alive + 1)); try { query(); fail("expected a WriteTimeoutException"); } catch (WriteTimeoutException e) { assertThat(e.getConsistencyLevel()).isEqualTo(expectedDowngradedCL); } assertOnWriteTimeoutWasCalled(2); assertThat(errors.getRetries().getCount()).isEqualTo(1); assertThat(errors.getWriteTimeouts().getCount()).isEqualTo(2); assertThat(errors.getRetriesOnWriteTimeout().getCount()).isEqualTo(1); assertQueried(1, 2); assertQueried(2, 0); assertQueried(3, 0); }