@Override public T execute(Transaction tx, Iterable<HeldLocksToken> heldLocks) throws E { return task.execute(tx); }
@Override public <T, E extends Exception> T runTaskThrowOnConflict(TransactionTask<T, E> task) throws E { return runTaskWithConditionThrowOnConflict(NO_OP_CONDITION, (txn, condition) -> task.execute(txn)); }
@Override public <T, E extends Exception> T runTaskReadOnly(TransactionTask<T, E> task) throws E { return runTaskWithConditionReadOnly(NO_OP_CONDITION, (transaction, condition) -> task.execute(transaction)); } }
private <T, E extends Exception> TransactionTask<T, E> wrapTask(TransactionTask<T, E> task) { return transaction -> task.execute(wrap(transaction)); }
@Override public <T, E extends Exception> T runTaskReadOnly(TransactionTask<T, E> task) throws E { return runTaskWithConditionReadOnly(NO_OP_CONDITION, (txn, condition) -> task.execute(txn)); }
@Override public <T, E extends Exception> T runTaskWithRetry(TransactionTask<T, E> task) throws E { return runTaskWithConditionWithRetry(() -> NO_OP_CONDITION, (txn, condition) -> task.execute(txn)); }
@Test public void shouldThrowTransactionLockTimeoutExceptionIfLockIsInvalid() throws Exception { Exception exception = new IllegalStateException(); when(delegate.execute(transaction)).thenThrow(exception); invalidateLockTokens(); assertThatThrownBy(() -> wrappingTask.execute(transaction)).isInstanceOf(TransactionLockTimeoutException.class); }
public T execute(Transaction transaction) throws E { try { return delegate.execute(transaction); } catch (Exception ex) { if (shouldRethrowWithoutLockValidation(ex) || immutableTsLockIsValid()) { throw ex; } throw new TransactionLockTimeoutException( "The following immutable timestamp lock is no longer valid: " + immutableTsLock); } }
public static TransactionManager mockTxManager() { TransactionManager txManager = mock(TransactionManager.class); Answer runTaskAnswer = inv -> { Object[] args = inv.getArguments(); TransactionTask<?, ?> task = (TransactionTask<?, ?>) args[0]; return task.execute(mock(Transaction.class)); }; doAnswer(runTaskAnswer).when(txManager).runTaskReadOnly(any()); doAnswer(runTaskAnswer).when(txManager).runTaskWithRetry(any()); return txManager; }
@Test public void shouldReturnResultOfDelegate() throws Exception { assertEquals(wrappingTask.execute(transaction), "result"); }
protected final <T, E extends Exception> T runTaskThrowOnConflict(TransactionTask<T, E> task, Transaction txn) throws E, TransactionFailedException { checkOpen(); try { T ret = task.execute(txn); if (txn.isUncommitted()) { txn.commit(); } return ret; } finally { // Make sure that anyone trying to retain a reference to this transaction // will not be able to use it. if (txn.isUncommitted()) { txn.abort(); } } }
@Override public T execute(Transaction tx, Iterable<HeldLocksToken> heldLocks) throws E { return task.execute(tx); }
@Override public <T, E extends Exception> T runTaskReadOnly(TransactionTask<T, E> task) throws E { return runTaskWithConditionReadOnly(NO_OP_CONDITION, (transaction, condition) -> task.execute(transaction)); } }
@Override public <T, E extends Exception> T runTaskThrowOnConflict(TransactionTask<T, E> task) throws E { return runTaskWithConditionThrowOnConflict(NO_OP_CONDITION, (txn, condition) -> task.execute(txn)); }
@Override public <T, E extends Exception> T runTaskWithRetry(TransactionTask<T, E> task) throws E { return runTaskWithConditionWithRetry(() -> NO_OP_CONDITION, (txn, condition) -> task.execute(txn)); }
public T execute(Transaction transaction) throws E { try { return delegate.execute(transaction); } catch (Exception ex) { if (shouldRethrowWithoutLockValidation(ex) || immutableTsLockIsValid()) { throw ex; } throw new TransactionLockTimeoutException( "The following immutable timestamp lock is no longer valid: " + immutableTsLock); } }