use of com.google.cloud.spanner.ReadOnlyTransaction in project google-cloud-java by GoogleCloudPlatform.
the class ITReadOnlyTxnTest method multiReadTimestamp.
@Test
public void multiReadTimestamp() {
setUpPrivateDatabase();
History expected = history.get(2);
try (ReadOnlyTransaction readContext = client.readOnlyTransaction(TimestampBound.ofReadTimestamp(expected.timestamp))) {
Struct row = readRow(readContext);
assertThat(row).isNotNull();
assertThat(row.getString(0)).isEqualTo(expected.value);
assertThat(readContext.getReadTimestamp()).isEqualTo(expected.timestamp);
insertAndReadAgain(readContext, readContext.getReadTimestamp(), expected.value);
}
}
use of com.google.cloud.spanner.ReadOnlyTransaction in project google-cloud-java by GoogleCloudPlatform.
the class ITReadOnlyTxnTest method singleMaxStaleness.
@Test
public void singleMaxStaleness() {
History minimum = history.get(2);
NavigableMap<Timestamp, String> possibleValues = new TreeMap<>();
for (History item : history.subList(2, history.size())) {
possibleValues.put(item.timestamp, item.value);
}
// Pick a staleness that cannot precede the second write (which, in practice, is the staleness
// that exceeds the minimum commit time for the subsequent write).
long stalenessNanos = System.nanoTime() - history.get(3).minCommitNanoTime;
TimestampBound bound = TimestampBound.ofMaxStaleness(stalenessNanos, TimeUnit.NANOSECONDS);
ReadOnlyTransaction readContext = client.singleUseReadOnlyTransaction(bound);
Struct row = readRow(readContext);
assertThat(row).isNotNull();
assertThat(readContext.getReadTimestamp()).isAtLeast(minimum.timestamp);
assertThat(row.getString(0)).isEqualTo(possibleValues.floorEntry(readContext.getReadTimestamp()).getValue());
row = readRow(client.singleUse(bound));
assertThat(row).isNotNull();
assertThat(row.getString(0)).isIn(possibleValues.values());
}
use of com.google.cloud.spanner.ReadOnlyTransaction in project google-cloud-java by GoogleCloudPlatform.
the class ITReadOnlyTxnTest method query.
@Test
public void query() {
// We don't exhaustively test query with all modes - the read tests give us enough confidence
// that transaction options are generated appropriately. Just do one test for each type of
// context to ensure that transaction options are set at all.
History expected = history.get(2);
TimestampBound bound = TimestampBound.ofReadTimestamp(expected.timestamp);
ReadOnlyTransaction readContext = client.singleUseReadOnlyTransaction(bound);
Struct row = queryRow(readContext);
assertThat(row).isNotNull();
assertThat(row.getString(0)).isEqualTo(expected.value);
assertThat(readContext.getReadTimestamp()).isEqualTo(expected.timestamp);
readContext = client.readOnlyTransaction(bound);
row = queryRow(readContext);
assertThat(row).isNotNull();
assertThat(row.getString(0)).isEqualTo(expected.value);
assertThat(readContext.getReadTimestamp()).isEqualTo(expected.timestamp);
readContext.close();
row = queryRow(client.singleUse(bound));
assertThat(row).isNotNull();
assertThat(row.getString(0)).isEqualTo(expected.value);
}
use of com.google.cloud.spanner.ReadOnlyTransaction in project google-cloud-java by GoogleCloudPlatform.
the class ITReadOnlyTxnTest method singleMinReadTimestamp.
@Test
public void singleMinReadTimestamp() {
int minimumIndex = 2;
History minimum = history.get(minimumIndex);
NavigableMap<Timestamp, String> possibleValues = new TreeMap<>();
for (History item : history.subList(minimumIndex, history.size())) {
possibleValues.put(item.timestamp, item.value);
}
TimestampBound bound = TimestampBound.ofMinReadTimestamp(minimum.timestamp);
ReadOnlyTransaction readContext = client.singleUseReadOnlyTransaction(bound);
Struct row = readRow(readContext);
assertThat(row).isNotNull();
assertThat(readContext.getReadTimestamp()).isAtLeast(minimum.timestamp);
assertThat(row.getString(0)).isEqualTo(possibleValues.floorEntry(readContext.getReadTimestamp()).getValue());
row = readRow(client.singleUse(bound));
assertThat(row).isNotNull();
assertThat(row.getString(0)).isIn(possibleValues.values());
}
Aggregations