use of com.scalar.db.api.Get in project scalardb by scalar-labs.
the class DistributedTransactionServiceWithConsensusCommitWithExtraWriteIntegrationTest method commit_WriteSkewOnNonExistingRecordsWithSerializableWithExtraWrite_OneShouldCommitTheOtherShouldThrowCommitConflictException.
private void commit_WriteSkewOnNonExistingRecordsWithSerializableWithExtraWrite_OneShouldCommitTheOtherShouldThrowCommitConflictException(String table1, String table2) throws TransactionException {
// Arrange
// no records
// Act
GrpcTransaction transaction1 = manager.start();
GrpcTransaction transaction2 = manager.start();
Get get1_1 = prepareGet(0, 1, table2);
Optional<Result> result1 = transaction1.get(get1_1);
Get get1_2 = prepareGet(0, 0, table1);
transaction1.get(get1_2);
int current1 = 0;
Get get2_1 = prepareGet(0, 0, table1);
Optional<Result> result2 = transaction2.get(get2_1);
Get get2_2 = prepareGet(0, 1, table2);
transaction2.get(get2_2);
int current2 = 0;
Put put1 = preparePut(0, 0, table1).withValue(BALANCE, current1 + 1);
transaction1.put(put1);
Put put2 = preparePut(0, 1, table2).withValue(BALANCE, current2 + 1);
transaction2.put(put2);
Throwable thrown1 = catchThrowable(transaction1::commit);
Throwable thrown2 = catchThrowable(transaction2::commit);
// Assert
assertThat(result1.isPresent()).isFalse();
assertThat(result2.isPresent()).isFalse();
GrpcTransaction transaction = manager.start();
result1 = transaction.get(get1_1);
result2 = transaction.get(get2_1);
transaction.commit();
assertThat(result1.isPresent()).isFalse();
assertThat(result2).isPresent();
assertThat(getBalance(result2.get())).isEqualTo(1);
assertThat(thrown1).doesNotThrowAnyException();
assertThat(thrown2).isInstanceOf(CommitConflictException.class);
}
use of com.scalar.db.api.Get in project scalardb by scalar-labs.
the class DistributedTransactionServiceWithJdbcTransactionIntegrationTest method commit_DeleteGivenForExistingAfterRead_ShouldDeleteRecord.
@Test
public void commit_DeleteGivenForExistingAfterRead_ShouldDeleteRecord() throws TransactionException {
// Arrange
populateRecords();
Get get = prepareGet(0, 0, NAMESPACE, TABLE);
Delete delete = prepareDelete(0, 0, NAMESPACE, TABLE);
GrpcTransaction transaction = manager.start();
// Act
Optional<Result> result = transaction.get(get);
transaction.delete(delete);
transaction.commit();
// Assert
assertThat(result.isPresent()).isTrue();
GrpcTransaction another = manager.start();
Optional<Result> result1 = another.get(get);
another.commit();
assertThat(result1.isPresent()).isFalse();
}
use of com.scalar.db.api.Get in project scalardb by scalar-labs.
the class DistributedTransactionServiceWithJdbcTransactionIntegrationTest method get_GetGivenForNonExisting_ShouldReturnEmpty.
@Test
public void get_GetGivenForNonExisting_ShouldReturnEmpty() throws TransactionException {
// Arrange
populateRecords();
GrpcTransaction transaction = manager.start();
Get get = prepareGet(0, 4, NAMESPACE, TABLE);
// Act
Optional<Result> result = transaction.get(get);
transaction.commit();
// Assert
assertThat(result.isPresent()).isFalse();
}
use of com.scalar.db.api.Get in project scalardb by scalar-labs.
the class DistributedTransactionServiceWithJdbcTransactionIntegrationTest method putAndCommit_GetsAndPutsGiven_ShouldCommitProperly.
@Test
public void putAndCommit_GetsAndPutsGiven_ShouldCommitProperly() throws TransactionException {
// Arrange
populateRecords();
List<Get> gets = prepareGets(NAMESPACE, TABLE);
int amount = 100;
int fromBalance = INITIAL_BALANCE - amount;
int toBalance = INITIAL_BALANCE + amount;
int from = 0;
int to = NUM_TYPES;
// Act
prepareTransfer(from, to, amount).commit();
// Assert
GrpcTransaction another = null;
try {
another = manager.start();
Optional<Result> fromResult = another.get(gets.get(from));
assertThat(fromResult).isPresent();
assertThat(getBalance(fromResult.get())).isEqualTo(fromBalance);
Optional<Result> toResult = another.get(gets.get(to));
assertThat(toResult).isPresent();
assertThat(getBalance(toResult.get())).isEqualTo(toBalance);
} finally {
if (another != null) {
another.commit();
}
}
}
use of com.scalar.db.api.Get in project scalardb by scalar-labs.
the class DistributedTransactionServiceWithConsensusCommitIntegrationTest method commit_NonConflictingDeletesGivenForExisting_ShouldCommitBoth.
private void commit_NonConflictingDeletesGivenForExisting_ShouldCommitBoth(String table1, String table2) throws TransactionException {
// Arrange
boolean differentTables = !table1.equals(table2);
int account1 = 0;
int account2 = NUM_TYPES;
int account3 = NUM_TYPES * 2;
int account4 = NUM_TYPES * 3;
populateRecords(table1);
if (differentTables) {
populateRecords(table2);
}
// Act
GrpcTransaction transaction = prepareDeletes(account1, table1, account2, table2);
assertThatCode(() -> prepareDeletes(account3, table2, account4, table1).commit()).doesNotThrowAnyException();
assertThatCode(transaction::commit).doesNotThrowAnyException();
// Assert
List<Get> gets1 = prepareGets(table1);
List<Get> gets2 = differentTables ? prepareGets(table2) : gets1;
GrpcTransaction another = manager.start();
assertThat(another.get(gets1.get(account1)).isPresent()).isFalse();
assertThat(another.get(gets2.get(account2)).isPresent()).isFalse();
assertThat(another.get(gets2.get(account3)).isPresent()).isFalse();
assertThat(another.get(gets1.get(account4)).isPresent()).isFalse();
another.commit();
}
Aggregations