Skip to content

Commit f79d35a

Browse files
authored
Merge branch 'main' into change-streams-txn-exclusion-sample
2 parents 98aae9b + a2aac5e commit f79d35a

21 files changed

+408
-175
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,4 @@
55
# https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners#codeowners-syntax
66

77
# The @googleapis/api-spanner-java is the default owner for changes in this repo
8-
* @googleapis/yoshi-java @googleapis/api-spanner-java
9-
**/*.java @googleapis/api-spanner-java
10-
11-
# The java-samples-reviewers team is the default owner for samples changes
12-
samples/**/*.java @googleapis/java-samples-reviewers @googleapis/api-spanner-java
8+
* @googleapis/yoshi-java @googleapis/spanner-client-libraries-java

.github/workflows/hermetic_library_generation.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737
with:
3838
fetch-depth: 0
3939
token: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }}
40-
- uses: googleapis/sdk-platform-java/.github/scripts@v2.51.1
40+
- uses: googleapis/sdk-platform-java/.github/scripts@v2.52.0
4141
if: env.SHOULD_RUN == 'true'
4242
with:
4343
base_ref: ${{ github.base_ref }}

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file:
1919
<dependency>
2020
<groupId>com.google.cloud</groupId>
2121
<artifactId>libraries-bom</artifactId>
22-
<version>26.50.0</version>
22+
<version>26.53.0</version>
2323
<type>pom</type>
2424
<scope>import</scope>
2525
</dependency>
@@ -49,7 +49,7 @@ If you are using Maven without the BOM, add this to your dependencies:
4949
If you are using Gradle 5.x or later, add this to your dependencies:
5050

5151
```Groovy
52-
implementation platform('com.google.cloud:libraries-bom:26.52.0')
52+
implementation platform('com.google.cloud:libraries-bom:26.53.0')
5353
5454
implementation 'com.google.cloud:google-cloud-spanner'
5555
```

generation_config.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
gapic_generator_version: 2.51.1
2-
googleapis_commitish: d581bbe1a66ad2e47eda2beebf6200f23b766ca9
3-
libraries_bom_version: 26.52.0
1+
gapic_generator_version: 2.52.0
2+
googleapis_commitish: 280725e991516d4a0f136268faf5aa6d32d21b54
3+
libraries_bom_version: 26.53.0
44
libraries:
55
- api_shortname: spanner
66
name_pretty: Cloud Spanner

google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractMultiplexedSessionDatabaseClient.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,7 @@
1616

1717
package com.google.cloud.spanner;
1818

19-
import com.google.api.gax.rpc.ServerStream;
2019
import com.google.cloud.Timestamp;
21-
import com.google.cloud.spanner.Options.TransactionOption;
22-
import com.google.spanner.v1.BatchWriteResponse;
2320

2421
/**
2522
* Base class for the Multiplexed Session {@link DatabaseClient} implementation. Throws {@link
@@ -43,11 +40,4 @@ public String getDatabaseRole() {
4340
public Timestamp writeAtLeastOnce(Iterable<Mutation> mutations) throws SpannerException {
4441
return writeAtLeastOnceWithOptions(mutations).getCommitTimestamp();
4542
}
46-
47-
@Override
48-
public ServerStream<BatchWriteResponse> batchWriteAtLeastOnce(
49-
Iterable<MutationGroup> mutationGroups, TransactionOption... options)
50-
throws SpannerException {
51-
throw new UnsupportedOperationException();
52-
}
5343
}

google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ abstract class AbstractResultSet<R> extends AbstractStructReader implements Resu
4848
interface Listener {
4949
/**
5050
* Called when transaction metadata is seen. This method may be invoked at most once. If the
51-
* method is invoked, it will precede {@link #onError(SpannerException)} or {@link #onDone()}.
51+
* method is invoked, it will precede {@link #onError(SpannerException,boolean)} or {@link
52+
* #onDone(boolean)}.
5253
*/
5354
void onTransactionMetadata(Transaction transaction, boolean shouldIncludeId)
5455
throws SpannerException;
@@ -160,7 +161,7 @@ default boolean initiateStreaming(AsyncResultSet.StreamMessageListener streamMes
160161
}
161162

162163
/** it requests the initial prefetch chunks from gRPC stream */
163-
default void requestPrefetchChunks() {};
164+
default void requestPrefetchChunks() {}
164165
}
165166

166167
static double valueProtoToFloat64(com.google.protobuf.Value proto) {

google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,9 @@ public ServerStream<BatchWriteResponse> batchWriteAtLeastOnce(
189189
throws SpannerException {
190190
ISpan span = tracer.spanBuilder(READ_WRITE_TRANSACTION, commonAttributes, options);
191191
try (IScope s = tracer.withSpan(span)) {
192+
if (canUseMultiplexedSessionsForRW() && getMultiplexedSessionDatabaseClient() != null) {
193+
return getMultiplexedSessionDatabaseClient().batchWriteAtLeastOnce(mutationGroups, options);
194+
}
192195
return runWithSessionRetry(session -> session.batchWriteAtLeastOnce(mutationGroups, options));
193196
} catch (RuntimeException e) {
194197
span.setStatus(e);

google-cloud-spanner/src/main/java/com/google/cloud/spanner/DelayedMultiplexedSessionTransaction.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,14 @@
2020

2121
import com.google.api.core.ApiFuture;
2222
import com.google.api.core.ApiFutures;
23+
import com.google.api.gax.rpc.ServerStream;
2324
import com.google.cloud.Timestamp;
2425
import com.google.cloud.spanner.DelayedReadContext.DelayedReadOnlyTransaction;
2526
import com.google.cloud.spanner.MultiplexedSessionDatabaseClient.MultiplexedSessionTransaction;
2627
import com.google.cloud.spanner.Options.TransactionOption;
2728
import com.google.cloud.spanner.Options.UpdateOption;
2829
import com.google.common.util.concurrent.MoreExecutors;
30+
import com.google.spanner.v1.BatchWriteResponse;
2931
import java.util.concurrent.ExecutionException;
3032

3133
/**
@@ -164,6 +166,22 @@ public CommitResponse writeWithOptions(Iterable<Mutation> mutations, Transaction
164166
}
165167
}
166168

169+
/**
170+
* This is a blocking method, as the interface that it implements is also defined as a blocking
171+
* method.
172+
*/
173+
@Override
174+
public ServerStream<BatchWriteResponse> batchWriteAtLeastOnce(
175+
Iterable<MutationGroup> mutationGroups, TransactionOption... options)
176+
throws SpannerException {
177+
SessionReference sessionReference = getSessionReference();
178+
try (MultiplexedSessionTransaction transaction =
179+
new MultiplexedSessionTransaction(
180+
client, span, sessionReference, NO_CHANNEL_HINT, /* singleUse = */ true)) {
181+
return transaction.batchWriteAtLeastOnce(mutationGroups, options);
182+
}
183+
}
184+
167185
@Override
168186
public TransactionRunner readWriteTransaction(TransactionOption... options) {
169187
return new DelayedTransactionRunner(

google-cloud-spanner/src/main/java/com/google/cloud/spanner/MultiplexedSessionDatabaseClient.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.google.api.core.ApiFuture;
2323
import com.google.api.core.ApiFutures;
2424
import com.google.api.core.SettableApiFuture;
25+
import com.google.api.gax.rpc.ServerStream;
2526
import com.google.cloud.Timestamp;
2627
import com.google.cloud.spanner.Options.TransactionOption;
2728
import com.google.cloud.spanner.Options.UpdateOption;
@@ -30,6 +31,7 @@
3031
import com.google.common.annotations.VisibleForTesting;
3132
import com.google.common.base.Preconditions;
3233
import com.google.common.util.concurrent.MoreExecutors;
34+
import com.google.spanner.v1.BatchWriteResponse;
3335
import com.google.spanner.v1.BeginTransactionRequest;
3436
import com.google.spanner.v1.RequestOptions;
3537
import com.google.spanner.v1.Transaction;
@@ -505,6 +507,14 @@ public CommitResponse writeAtLeastOnceWithOptions(
505507
.writeAtLeastOnceWithOptions(mutations, options);
506508
}
507509

510+
@Override
511+
public ServerStream<BatchWriteResponse> batchWriteAtLeastOnce(
512+
Iterable<MutationGroup> mutationGroups, TransactionOption... options)
513+
throws SpannerException {
514+
return createMultiplexedSessionTransaction(/* singleUse = */ true)
515+
.batchWriteAtLeastOnce(mutationGroups, options);
516+
}
517+
508518
@Override
509519
public ReadContext singleUse() {
510520
return createMultiplexedSessionTransaction(/* singleUse = */ true).singleUse();

google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,7 @@ public ServerStream<BatchWriteResponse> batchWriteAtLeastOnce(
321321
throw SpannerExceptionFactory.newSpannerException(e);
322322
} finally {
323323
span.end();
324+
onTransactionDone();
324325
}
325326
}
326327

0 commit comments

Comments
 (0)