@Test
public void transactionDeletesAsyncOnRollback() {
DeterministicScheduler executor = new DeterministicScheduler();
TestTransactionManager deleteTxManager = new TestTransactionManagerImpl(
metricsManager,
keyValueService,
timestampService,
timestampService,
lockClient,
lockService,
transactionService,
conflictDetectionManager,
sweepStrategyManager,
sweepQueue,
executor);
Supplier<PreCommitCondition> conditionSupplier = mock(Supplier.class);
when(conditionSupplier.get()).thenReturn(ALWAYS_FAILS_CONDITION)
.thenReturn(PreCommitConditions.NO_OP);
deleteTxManager.runTaskWithConditionWithRetry(conditionSupplier, (tx, condition) -> {
tx.put(TABLE, ImmutableMap.of(TEST_CELL, PtBytes.toBytes("value")));
return null;
});
verify(keyValueService, times(0)).delete(any(), any());
executor.runUntilIdle();
verify(keyValueService, times(1)).delete(any(), any());
TransactionOutcomeMetricsAssert.assertThat(transactionOutcomeMetrics)
.hasSuccessfulCommits(1)
.hasFailedCommits(1);
}