Search in sources :

Example 61 with Result

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);
}
Also used : CommitConflictException(com.scalar.db.exception.transaction.CommitConflictException) Assertions.catchThrowable(org.assertj.core.api.Assertions.catchThrowable) Result(com.scalar.db.api.Result) Test(org.junit.Test)

Example 62 with Result

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);
}
Also used : Get(com.scalar.db.api.Get) Result(com.scalar.db.api.Result) Test(org.junit.Test)

Example 63 with Result

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);
}
Also used : Result(com.scalar.db.api.Result) Test(org.junit.Test)

Example 64 with Result

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);
}
Also used : Scan(com.scalar.db.api.Scan) Result(com.scalar.db.api.Result) Test(org.junit.Test)

Example 65 with Result

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);
}
Also used : Get(com.scalar.db.api.Get) Result(com.scalar.db.api.Result) Test(org.junit.Test)

Aggregations

Result (com.scalar.db.api.Result)324 Test (org.junit.Test)158 Get (com.scalar.db.api.Get)132 Scan (com.scalar.db.api.Scan)106 Put (com.scalar.db.api.Put)101 Key (com.scalar.db.io.Key)85 Test (org.junit.jupiter.api.Test)83 GrpcTransaction (com.scalar.db.transaction.rpc.GrpcTransaction)39 IntValue (com.scalar.db.io.IntValue)36 GrpcTwoPhaseCommitTransaction (com.scalar.db.transaction.rpc.GrpcTwoPhaseCommitTransaction)32 Assertions.catchThrowable (org.assertj.core.api.Assertions.catchThrowable)29 Delete (com.scalar.db.api.Delete)28 TextValue (com.scalar.db.io.TextValue)24 Value (com.scalar.db.io.Value)19 BigIntValue (com.scalar.db.io.BigIntValue)16 Scanner (com.scalar.db.api.Scanner)15 ArrayList (java.util.ArrayList)14 BooleanValue (com.scalar.db.io.BooleanValue)11 ConditionalExpression (com.scalar.db.api.ConditionalExpression)10 ScanAll (com.scalar.db.api.ScanAll)9