use of com.scalar.db.api.Result in project scalardb by scalar-labs.
the class ConsensusCommitIntegrationTestBase method deleteAndCommit_DeleteGivenInBetweenTransactions_ShouldProduceSerializableResults.
@Test
public void deleteAndCommit_DeleteGivenInBetweenTransactions_ShouldProduceSerializableResults() throws CrudException, CommitException, UnknownTransactionStatusException {
// Arrange
ConsensusCommit transaction = manager.start();
transaction.put(preparePut(0, 0, namespace1, TABLE_1).withValue(BALANCE, 2));
transaction.commit();
// Act
ConsensusCommit transaction1 = manager.start();
transaction1.get(prepareGet(0, 0, namespace1, TABLE_1));
transaction1.delete(prepareDelete(0, 0, namespace1, TABLE_1));
ConsensusCommit transaction2 = manager.start();
transaction2.get(prepareGet(0, 0, namespace1, TABLE_1));
transaction2.delete(prepareDelete(0, 0, namespace1, TABLE_1));
transaction2.commit();
// the same transaction processing as transaction1
ConsensusCommit transaction3 = manager.start();
Optional<Result> result3 = transaction3.get(prepareGet(0, 0, namespace1, TABLE_1));
int balance3 = 0;
if (result3.isPresent()) {
balance3 = getBalance(result3.get());
}
transaction3.put(preparePut(0, 0, namespace1, TABLE_1).withValue(BALANCE, balance3 + 1));
transaction3.commit();
Throwable thrown = catchThrowable(transaction1::commit);
// Assert
assertThat(thrown).isInstanceOf(CommitConflictException.class).hasCauseInstanceOf(NoMutationException.class);
transaction = manager.start();
Optional<Result> result = transaction.get(prepareGet(0, 0, namespace1, TABLE_1));
assertThat(result).isPresent();
assertThat(getBalance(result.get())).isEqualTo(1);
}
use of com.scalar.db.api.Result in project scalardb by scalar-labs.
the class ConsensusCommitIntegrationTestBase method get_CalledTwiceAndAnotherTransactionCommitsInBetween_ShouldReturnFromSnapshotInSecondTime.
@Test
public void get_CalledTwiceAndAnotherTransactionCommitsInBetween_ShouldReturnFromSnapshotInSecondTime() throws CrudException, ExecutionException, CommitException, UnknownTransactionStatusException {
// Arrange
ConsensusCommit transaction = manager.start();
Get get = prepareGet(0, 0, namespace1, TABLE_1);
// Act
Optional<Result> result1 = transaction.get(get);
populateRecords(namespace1, TABLE_1);
Optional<Result> result2 = transaction.get(get);
// Assert
verify(storage).get(any(Get.class));
assertThat(result1).isEqualTo(result2);
}
use of com.scalar.db.api.Result in project scalardb by scalar-labs.
the class TwoPhaseConsensusCommitIntegrationTest method getAndScan_CommitHappenedInBetween_ShouldReadRepeatably.
@Test
public void getAndScan_CommitHappenedInBetween_ShouldReadRepeatably() throws TransactionException {
// Arrange
TwoPhaseConsensusCommit transaction = manager.start();
transaction.put(preparePut(0, 0, TABLE_1).withValue(BALANCE, 1));
transaction.prepare();
transaction.commit();
TwoPhaseConsensusCommit transaction1 = manager.start();
Optional<Result> result1 = transaction1.get(prepareGet(0, 0, TABLE_1));
TwoPhaseConsensusCommit transaction2 = manager.start();
transaction2.get(prepareGet(0, 0, TABLE_1));
transaction2.put(preparePut(0, 0, TABLE_1).withValue(BALANCE, 2));
transaction2.prepare();
transaction2.commit();
// Act
Result result2 = transaction1.scan(prepareScan(0, 0, 0, TABLE_1)).get(0);
Optional<Result> result3 = transaction1.get(prepareGet(0, 0, TABLE_1));
// Assert
assertThat(result1).isPresent();
assertThat(result1.get()).isEqualTo(result2);
assertThat(result1).isEqualTo(result3);
}
use of com.scalar.db.api.Result in project scalardb by scalar-labs.
the class TwoPhaseConsensusCommitIntegrationTest method scan_DeleteGivenBefore_ShouldScan.
@Test
public void scan_DeleteGivenBefore_ShouldScan() throws TransactionException {
// Arrange
TwoPhaseConsensusCommit transaction = manager.start();
transaction.put(preparePut(0, 0, TABLE_1).withValue(BALANCE, 1));
transaction.put(preparePut(0, 1, TABLE_1).withValue(BALANCE, 1));
transaction.prepare();
transaction.commit();
// Act
TwoPhaseConsensusCommit transaction1 = manager.start();
transaction1.delete(prepareDelete(0, 0, TABLE_1));
Scan scan = prepareScan(0, 0, 1, TABLE_1);
List<Result> results = transaction1.scan(scan);
assertThatCode(() -> {
transaction1.prepare();
transaction1.commit();
}).doesNotThrowAnyException();
// Assert
assertThat(results.size()).isEqualTo(1);
}
use of com.scalar.db.api.Result in project scalardb by scalar-labs.
the class TwoPhaseConsensusCommitIntegrationTest method get_PutCalledBefore_ShouldGet.
@Test
public void get_PutCalledBefore_ShouldGet() throws CrudException {
// Arrange
TwoPhaseConsensusCommit transaction = manager.start();
// Act
transaction.put(preparePut(0, 0, TABLE_1).withValue(BALANCE, 1));
Get get = prepareGet(0, 0, TABLE_1);
Optional<Result> result = transaction.get(get);
assertThatCode(() -> {
transaction.prepare();
transaction.commit();
}).doesNotThrowAnyException();
// Assert
assertThat(result).isPresent();
assertThat(getBalance(result.get())).isEqualTo(1);
}
Aggregations