use of com.scalar.db.api.DistributedStorage in project scalardb by scalar-labs.
the class SnapshotTest method toSerializableWithExtraRead_MultipleScansInScanSetExist_ShouldThrowCommitConflictException.
@Test
public void toSerializableWithExtraRead_MultipleScansInScanSetExist_ShouldThrowCommitConflictException() throws ExecutionException {
// Arrange
snapshot = prepareSnapshot(Isolation.SERIALIZABLE, SerializableStrategy.EXTRA_READ);
Scan scan1 = new Scan(new Key(ANY_NAME_1, ANY_TEXT_1)).withStart(new Key(ANY_NAME_2, ANY_TEXT_2)).withConsistency(Consistency.LINEARIZABLE).forNamespace(ANY_NAMESPACE_NAME).forTable(ANY_TABLE_NAME);
Scan scan2 = new Scan(new Key(ANY_NAME_1, ANY_TEXT_2)).withStart(new Key(ANY_NAME_2, ANY_TEXT_1)).withConsistency(Consistency.LINEARIZABLE).forNamespace(ANY_NAMESPACE_NAME).forTable(ANY_TABLE_NAME);
Result result1 = new TransactionResult(new ResultImpl(ImmutableMap.of(ANY_NAME_1, Optional.of(new TextValue(ANY_NAME_1, ANY_TEXT_1)), ANY_NAME_2, Optional.of(new TextValue(ANY_NAME_2, ANY_TEXT_2)), Attribute.ID, Optional.of(Attribute.toIdValue("id1")), Attribute.VERSION, Optional.of(Attribute.toVersionValue(ANY_VERSION))), TABLE_METADATA));
Result result2 = new TransactionResult(new ResultImpl(ImmutableMap.of(ANY_NAME_1, Optional.of(new TextValue(ANY_NAME_1, ANY_TEXT_2)), ANY_NAME_2, Optional.of(new TextValue(ANY_NAME_2, ANY_TEXT_1)), Attribute.ID, Optional.of(Attribute.toIdValue("id2")), Attribute.VERSION, Optional.of(Attribute.toVersionValue(ANY_VERSION))), TABLE_METADATA));
Snapshot.Key key1 = new Snapshot.Key(scan1, result1);
Snapshot.Key key2 = new Snapshot.Key(scan2, result2);
snapshot.put(scan1, Collections.singletonList(key1));
snapshot.put(scan2, Collections.singletonList(key2));
snapshot.put(key1, Optional.of(new TransactionResult(result1)));
snapshot.put(key2, Optional.of(new TransactionResult(result2)));
DistributedStorage storage = mock(DistributedStorage.class);
Scanner scanner1 = mock(Scanner.class);
when(scanner1.iterator()).thenReturn(Collections.singletonList(result1).iterator());
Scan scan1WithProjections = new Scan(new Key(ANY_NAME_1, ANY_TEXT_1)).withStart(new Key(ANY_NAME_2, ANY_TEXT_2)).withConsistency(Consistency.LINEARIZABLE).forNamespace(ANY_NAMESPACE_NAME).forTable(ANY_TABLE_NAME).withProjection(Attribute.ID).withProjection(Attribute.VERSION);
when(storage.scan(scan1WithProjections)).thenReturn(scanner1);
Scanner scanner2 = mock(Scanner.class);
when(scanner2.iterator()).thenReturn(Collections.singletonList(result2).iterator());
Scan scan2WithProjections = new Scan(new Key(ANY_NAME_1, ANY_TEXT_2)).withStart(new Key(ANY_NAME_2, ANY_TEXT_1)).withConsistency(Consistency.LINEARIZABLE).forNamespace(ANY_NAMESPACE_NAME).forTable(ANY_TABLE_NAME).withProjection(Attribute.ID).withProjection(Attribute.VERSION);
when(storage.scan(scan2WithProjections)).thenReturn(scanner2);
// Act Assert
assertThatCode(() -> snapshot.toSerializableWithExtraRead(storage)).doesNotThrowAnyException();
}
Aggregations