Search in sources :

Example 1 with ReadOnlyTransaction

use of com.google.cloud.spanner.ReadOnlyTransaction in project google-cloud-java by GoogleCloudPlatform.

the class ITReadOnlyTxnTest method singleReadTimestamp.

@Test
public void singleReadTimestamp() {
    History expected = history.get(2);
    TimestampBound bound = TimestampBound.ofReadTimestamp(expected.timestamp);
    ReadOnlyTransaction readContext = client.singleUseReadOnlyTransaction(bound);
    Struct row = readRow(readContext);
    assertThat(row).isNotNull();
    assertThat(row.getString(0)).isEqualTo(expected.value);
    assertThat(readContext.getReadTimestamp()).isEqualTo(expected.timestamp);
    row = readRow(client.singleUse(bound));
    assertThat(row).isNotNull();
    assertThat(row.getString(0)).isEqualTo(expected.value);
}
Also used : TimestampBound(com.google.cloud.spanner.TimestampBound) ReadOnlyTransaction(com.google.cloud.spanner.ReadOnlyTransaction) Struct(com.google.cloud.spanner.Struct) IntegrationTest(com.google.cloud.spanner.IntegrationTest) Test(org.junit.Test)

Example 2 with ReadOnlyTransaction

use of com.google.cloud.spanner.ReadOnlyTransaction in project google-cloud-java by GoogleCloudPlatform.

the class ITReadOnlyTxnTest method multiStrong.

@Test
public void multiStrong() {
    setUpPrivateDatabase();
    History expected = history.get(history.size() - 1);
    try (ReadOnlyTransaction readContext = client.readOnlyTransaction()) {
        Struct row = readRow(readContext);
        assertThat(row).isNotNull();
        assertThat(row.getString(0)).isEqualTo(expected.value);
        assertThat(readContext.getReadTimestamp()).isAtLeast(expected.timestamp);
        insertAndReadAgain(readContext, readContext.getReadTimestamp(), expected.value);
    }
}
Also used : ReadOnlyTransaction(com.google.cloud.spanner.ReadOnlyTransaction) Struct(com.google.cloud.spanner.Struct) IntegrationTest(com.google.cloud.spanner.IntegrationTest) Test(org.junit.Test)

Example 3 with ReadOnlyTransaction

use of com.google.cloud.spanner.ReadOnlyTransaction in project google-cloud-java by GoogleCloudPlatform.

the class ITReadOnlyTxnTest method singleExactStaleness.

@Test
public void singleExactStaleness() {
    // TODO(user): Use a shorter deadline (when supported) and pass on the call to Cloud Spanner.
    long deadlineNanoTime = System.nanoTime() + TimeUnit.MINUTES.toNanos(1);
    // The only exact staleness values that can be tested reliably are before the first item or
    // later than the last item: we choose the former.
    //
    // Pick a staleness that is "guaranteed" not to observe the first write.  Note that this
    // guarantee doesn't strictly hold in the absence of enforced read deadlines, but we use a
    // deadline large enough to make it practically true.
    long stalenessNanos = 1 + deadlineNanoTime - history.get(0).minCommitNanoTime;
    TimestampBound bound = TimestampBound.ofExactStaleness(stalenessNanos, TimeUnit.NANOSECONDS);
    ReadOnlyTransaction readContext = client.singleUseReadOnlyTransaction(bound);
    Struct row = readRow(readContext);
    assertThat(row).isNull();
    assertThat(readContext.getReadTimestamp().toSqlTimestamp()).isLessThan(history.get(0).timestamp.toSqlTimestamp());
    row = readRow(client.singleUse(bound));
    assertThat(row).isNull();
}
Also used : TimestampBound(com.google.cloud.spanner.TimestampBound) ReadOnlyTransaction(com.google.cloud.spanner.ReadOnlyTransaction) Struct(com.google.cloud.spanner.Struct) IntegrationTest(com.google.cloud.spanner.IntegrationTest) Test(org.junit.Test)

Example 4 with ReadOnlyTransaction

use of com.google.cloud.spanner.ReadOnlyTransaction in project google-cloud-java by GoogleCloudPlatform.

the class ITReadOnlyTxnTest method multiExactStaleness.

@Test
public void multiExactStaleness() {
    setUpPrivateDatabase();
    // See singleExactStaleness() for why we pick this timestamp.  We expect to see no value.
    long deadlineNanoTime = System.nanoTime() + TimeUnit.MINUTES.toNanos(1);
    long stalenessNanos = 1 + deadlineNanoTime - history.get(0).minCommitNanoTime;
    try (ReadOnlyTransaction readContext = client.readOnlyTransaction(TimestampBound.ofExactStaleness(stalenessNanos, TimeUnit.NANOSECONDS))) {
        Struct row = readRow(readContext);
        assertThat(row).isNull();
        assertThat(readContext.getReadTimestamp().toSqlTimestamp()).isLessThan(history.get(0).timestamp.toSqlTimestamp());
        insertAndReadAgain(readContext, readContext.getReadTimestamp(), null);
    }
}
Also used : ReadOnlyTransaction(com.google.cloud.spanner.ReadOnlyTransaction) Struct(com.google.cloud.spanner.Struct) IntegrationTest(com.google.cloud.spanner.IntegrationTest) Test(org.junit.Test)

Example 5 with ReadOnlyTransaction

use of com.google.cloud.spanner.ReadOnlyTransaction in project google-cloud-java by GoogleCloudPlatform.

the class ITReadOnlyTxnTest method singleStrong.

@Test
public void singleStrong() {
    History expected = history.get(history.size() - 1);
    ReadOnlyTransaction readContext = client.singleUseReadOnlyTransaction();
    Struct row = readRow(readContext);
    assertThat(row).isNotNull();
    assertThat(row.getString(0)).isEqualTo(expected.value);
    assertThat(readContext.getReadTimestamp()).isAtLeast(expected.timestamp);
    row = readRow(client.singleUse());
    assertThat(row).isNotNull();
    assertThat(row.getString(0)).isEqualTo(expected.value);
}
Also used : ReadOnlyTransaction(com.google.cloud.spanner.ReadOnlyTransaction) Struct(com.google.cloud.spanner.Struct) IntegrationTest(com.google.cloud.spanner.IntegrationTest) Test(org.junit.Test)

Aggregations

IntegrationTest (com.google.cloud.spanner.IntegrationTest)9 ReadOnlyTransaction (com.google.cloud.spanner.ReadOnlyTransaction)9 Struct (com.google.cloud.spanner.Struct)9 Test (org.junit.Test)9 TimestampBound (com.google.cloud.spanner.TimestampBound)5 Timestamp (com.google.cloud.Timestamp)2 TreeMap (java.util.TreeMap)2