From b1e3e2ca0ea1da7e0c6b93a5548c422acaf820cc Mon Sep 17 00:00:00 2001
From: "release-please[bot]"
<55107282+release-please[bot]@users.noreply.github.com>
Date: Thu, 29 Apr 2021 03:46:21 +0000
Subject: [PATCH 01/27] chore: release 6.4.1-SNAPSHOT (#1113)
:robot: I have created a release \*beep\* \*boop\*
---
### Updating meta-information for bleeding-edge SNAPSHOT release.
---
This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please).
---
google-cloud-spanner-bom/pom.xml | 18 +++++++++---------
google-cloud-spanner/pom.xml | 4 ++--
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
grpc-google-cloud-spanner-v1/pom.xml | 4 ++--
pom.xml | 16 ++++++++--------
.../pom.xml | 4 ++--
.../pom.xml | 4 ++--
proto-google-cloud-spanner-v1/pom.xml | 4 ++--
samples/snapshot/pom.xml | 2 +-
versions.txt | 14 +++++++-------
11 files changed, 39 insertions(+), 39 deletions(-)
diff --git a/google-cloud-spanner-bom/pom.xml b/google-cloud-spanner-bom/pom.xml
index ac147ff00b9..38df5cc9e60 100644
--- a/google-cloud-spanner-bom/pom.xml
+++ b/google-cloud-spanner-bom/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.google.cloud
google-cloud-spanner-bom
- 6.4.0
+ 6.4.1-SNAPSHOT
pom
com.google.cloud
@@ -64,43 +64,43 @@
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
com.google.cloud
google-cloud-spanner
- 6.4.0
+ 6.4.1-SNAPSHOT
com.google.cloud
google-cloud-spanner
test-jar
- 6.4.0
+ 6.4.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml
index 8b72aa6415c..014f79bae3e 100644
--- a/google-cloud-spanner/pom.xml
+++ b/google-cloud-spanner/pom.xml
@@ -3,7 +3,7 @@
4.0.0
com.google.cloud
google-cloud-spanner
- 6.4.0
+ 6.4.1-SNAPSHOT
jar
Google Cloud Spanner
https://github.com/googleapis/java-spanner
@@ -11,7 +11,7 @@
com.google.cloud
google-cloud-spanner-parent
- 6.4.0
+ 6.4.1-SNAPSHOT
google-cloud-spanner
diff --git a/grpc-google-cloud-spanner-admin-database-v1/pom.xml b/grpc-google-cloud-spanner-admin-database-v1/pom.xml
index 44850c4bdfc..38bef9b5fb9 100644
--- a/grpc-google-cloud-spanner-admin-database-v1/pom.xml
+++ b/grpc-google-cloud-spanner-admin-database-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
grpc-google-cloud-spanner-admin-database-v1
GRPC library for grpc-google-cloud-spanner-admin-database-v1
com.google.cloud
google-cloud-spanner-parent
- 6.4.0
+ 6.4.1-SNAPSHOT
diff --git a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
index f0400e4a2de..89afdb4ce23 100644
--- a/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
+++ b/grpc-google-cloud-spanner-admin-instance-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
grpc-google-cloud-spanner-admin-instance-v1
GRPC library for grpc-google-cloud-spanner-admin-instance-v1
com.google.cloud
google-cloud-spanner-parent
- 6.4.0
+ 6.4.1-SNAPSHOT
diff --git a/grpc-google-cloud-spanner-v1/pom.xml b/grpc-google-cloud-spanner-v1/pom.xml
index 6b608372b25..b043645e76c 100644
--- a/grpc-google-cloud-spanner-v1/pom.xml
+++ b/grpc-google-cloud-spanner-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
grpc-google-cloud-spanner-v1
GRPC library for grpc-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.4.0
+ 6.4.1-SNAPSHOT
diff --git a/pom.xml b/pom.xml
index 69cde61a225..a9bd8bdef57 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
com.google.cloud
google-cloud-spanner-parent
pom
- 6.4.0
+ 6.4.1-SNAPSHOT
Google Cloud Spanner Parent
https://github.com/googleapis/java-spanner
@@ -71,37 +71,37 @@
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-instance-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
com.google.api.grpc
grpc-google-cloud-spanner-admin-database-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
com.google.cloud
google-cloud-spanner
- 6.4.0
+ 6.4.1-SNAPSHOT
diff --git a/proto-google-cloud-spanner-admin-database-v1/pom.xml b/proto-google-cloud-spanner-admin-database-v1/pom.xml
index b5f73bb5285..f2a8f6fad2b 100644
--- a/proto-google-cloud-spanner-admin-database-v1/pom.xml
+++ b/proto-google-cloud-spanner-admin-database-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-admin-database-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
proto-google-cloud-spanner-admin-database-v1
PROTO library for proto-google-cloud-spanner-admin-database-v1
com.google.cloud
google-cloud-spanner-parent
- 6.4.0
+ 6.4.1-SNAPSHOT
diff --git a/proto-google-cloud-spanner-admin-instance-v1/pom.xml b/proto-google-cloud-spanner-admin-instance-v1/pom.xml
index 8ead775de43..8f6a3f994fb 100644
--- a/proto-google-cloud-spanner-admin-instance-v1/pom.xml
+++ b/proto-google-cloud-spanner-admin-instance-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-admin-instance-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
proto-google-cloud-spanner-admin-instance-v1
PROTO library for proto-google-cloud-spanner-admin-instance-v1
com.google.cloud
google-cloud-spanner-parent
- 6.4.0
+ 6.4.1-SNAPSHOT
diff --git a/proto-google-cloud-spanner-v1/pom.xml b/proto-google-cloud-spanner-v1/pom.xml
index 600c4d886c3..8a0a2fc784b 100644
--- a/proto-google-cloud-spanner-v1/pom.xml
+++ b/proto-google-cloud-spanner-v1/pom.xml
@@ -4,13 +4,13 @@
4.0.0
com.google.api.grpc
proto-google-cloud-spanner-v1
- 6.4.0
+ 6.4.1-SNAPSHOT
proto-google-cloud-spanner-v1
PROTO library for proto-google-cloud-spanner-v1
com.google.cloud
google-cloud-spanner-parent
- 6.4.0
+ 6.4.1-SNAPSHOT
diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml
index 6556a694bdd..c724f7148dd 100644
--- a/samples/snapshot/pom.xml
+++ b/samples/snapshot/pom.xml
@@ -31,7 +31,7 @@
com.google.cloud
google-cloud-spanner
- 6.4.0
+ 6.4.1-SNAPSHOT
diff --git a/versions.txt b/versions.txt
index 90c5b350487..3ba665a3015 100644
--- a/versions.txt
+++ b/versions.txt
@@ -1,10 +1,10 @@
# Format:
# module:released-version:current-version
-proto-google-cloud-spanner-admin-instance-v1:6.4.0:6.4.0
-proto-google-cloud-spanner-v1:6.4.0:6.4.0
-proto-google-cloud-spanner-admin-database-v1:6.4.0:6.4.0
-grpc-google-cloud-spanner-v1:6.4.0:6.4.0
-grpc-google-cloud-spanner-admin-instance-v1:6.4.0:6.4.0
-grpc-google-cloud-spanner-admin-database-v1:6.4.0:6.4.0
-google-cloud-spanner:6.4.0:6.4.0
\ No newline at end of file
+proto-google-cloud-spanner-admin-instance-v1:6.4.0:6.4.1-SNAPSHOT
+proto-google-cloud-spanner-v1:6.4.0:6.4.1-SNAPSHOT
+proto-google-cloud-spanner-admin-database-v1:6.4.0:6.4.1-SNAPSHOT
+grpc-google-cloud-spanner-v1:6.4.0:6.4.1-SNAPSHOT
+grpc-google-cloud-spanner-admin-instance-v1:6.4.0:6.4.1-SNAPSHOT
+grpc-google-cloud-spanner-admin-database-v1:6.4.0:6.4.1-SNAPSHOT
+google-cloud-spanner:6.4.0:6.4.1-SNAPSHOT
\ No newline at end of file
From fc3335c55eb504827e835b6e5a1d6fc5dea2c124 Mon Sep 17 00:00:00 2001
From: WhiteSource Renovate
Date: Fri, 30 Apr 2021 00:34:38 +0200
Subject: [PATCH 02/27] chore(deps): update dependency
com.google.cloud:google-cloud-spanner to v6.4.0 (#1114)
---
samples/install-without-bom/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml
index 45f05d571aa..6e4f935b462 100644
--- a/samples/install-without-bom/pom.xml
+++ b/samples/install-without-bom/pom.xml
@@ -32,7 +32,7 @@
com.google.cloud
google-cloud-spanner
- 6.3.3
+ 6.4.0
From 700103058ff916200708da281b78037ea6b5eefa Mon Sep 17 00:00:00 2001
From: Yoshi Automation Bot
Date: Thu, 29 Apr 2021 16:12:04 -0700
Subject: [PATCH 03/27] chore: regenerate README (#1115)
This PR was generated using Autosynth. :rainbow:
Log from Synthtool
```
2021-04-29 22:38:06,075 synthtool [DEBUG] > Executing /root/.cache/synthtool/java-spanner/.github/readme/synth.py.
On branch autosynth-readme
nothing to commit, working tree clean
2021-04-29 22:38:07,445 synthtool [DEBUG] > Wrote metadata to .github/readme/synth.metadata/synth.metadata.
```
Full log will be available here:
https://source.cloud.google.com/results/invocations/f34f77b3-3273-40c0-a696-d71f2b7957c6/targets
- [ ] To automatically regenerate this PR, check this box. (May take up to 24 hours.)
---
.github/readme/synth.metadata/synth.metadata | 2 +-
README.md | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/.github/readme/synth.metadata/synth.metadata b/.github/readme/synth.metadata/synth.metadata
index c863054ea0e..f2a8e5e581d 100644
--- a/.github/readme/synth.metadata/synth.metadata
+++ b/.github/readme/synth.metadata/synth.metadata
@@ -4,7 +4,7 @@
"git": {
"name": ".",
"remote": "https://github.com/googleapis/java-spanner.git",
- "sha": "1ecbb328428b4d85a69be6a47a354f419cc5aa56"
+ "sha": "fc3335c55eb504827e835b6e5a1d6fc5dea2c124"
}
},
{
diff --git a/README.md b/README.md
index 08a981b4195..f26be8b5449 100644
--- a/README.md
+++ b/README.md
@@ -38,7 +38,7 @@ If you are using Maven without BOM, add this to your dependencies:
com.google.cloud
google-cloud-spanner
- 6.3.3
+ 6.4.0
```
@@ -51,12 +51,12 @@ compile 'com.google.cloud:google-cloud-spanner'
```
If you are using Gradle without BOM, add this to your dependencies
```Groovy
-compile 'com.google.cloud:google-cloud-spanner:6.3.3'
+compile 'com.google.cloud:google-cloud-spanner:6.4.0'
```
If you are using SBT, add this to your dependencies
```Scala
-libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.3.3"
+libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.4.0"
```
## Authentication
From 6c24845d2f5c1f0b1f5a40920d164d1ecefac8f6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Knut=20Olav=20L=C3=B8ite?=
Date: Mon, 3 May 2021 04:35:40 +0200
Subject: [PATCH 04/27] test: retry backup operation 20 times (#1117)
The backup operations can still fail because of too many pending
operations. It would retry 10 times with waiting 60 seconds between
each attempt, but that does not seem to be enough. The max attempts
has therefore been increased to 20 and better logging has been
created by throwing a custom exception when it happens. The previous
log was not visible, because the sample runners are redirecting the
standard out to a string.
Fixes #1019
---
.../java/com/example/spanner/EncryptionKeyIT.java | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/samples/snippets/src/test/java/com/example/spanner/EncryptionKeyIT.java b/samples/snippets/src/test/java/com/example/spanner/EncryptionKeyIT.java
index d65141b7c02..4faa3967aca 100644
--- a/samples/snippets/src/test/java/com/example/spanner/EncryptionKeyIT.java
+++ b/samples/snippets/src/test/java/com/example/spanner/EncryptionKeyIT.java
@@ -22,6 +22,7 @@
import com.google.cloud.spanner.ErrorCode;
import com.google.cloud.spanner.Spanner;
import com.google.cloud.spanner.SpannerException;
+import com.google.cloud.spanner.SpannerExceptionFactory;
import com.google.cloud.spanner.SpannerOptions;
import com.google.common.base.Preconditions;
import com.google.common.util.concurrent.Uninterruptibles;
@@ -138,8 +139,8 @@ public void testEncryptedDatabaseAndBackupAndRestore() throws Exception {
+ "/backups/" + backupId + " using encryption key " + key);
}
- private static class ShouldRetryBackupOperation implements Predicate {
- private static final int MAX_ATTEMPTS = 10;
+ static class ShouldRetryBackupOperation implements Predicate {
+ private static final int MAX_ATTEMPTS = 20;
private int attempts = 0;
@Override
@@ -148,9 +149,11 @@ public boolean test(SpannerException e) {
&& e.getMessage().contains("Please retry the operation once the pending")) {
attempts++;
if (attempts == MAX_ATTEMPTS) {
- System.out.printf("Operation failed %d times because of other pending operations. "
- + "Giving up operation.\n", attempts);
- return false;
+ // Throw custom exception so it is easier to locate in the log why it went wrong.
+ throw SpannerExceptionFactory.newSpannerException(ErrorCode.DEADLINE_EXCEEDED,
+ String.format("Operation failed %d times because of other pending operations. "
+ + "Giving up operation.\n", attempts),
+ e);
}
// Wait one minute before retrying.
Uninterruptibles.sleepUninterruptibly(60L, TimeUnit.SECONDS);
From 641f04c4ede15b84bf6e9a0916f1ae0f8c11faca Mon Sep 17 00:00:00 2001
From: WhiteSource Renovate
Date: Mon, 3 May 2021 05:32:45 +0200
Subject: [PATCH 05/27] build(deps): update dependency
org.apache.maven.plugins:maven-project-info-reports-plugin to v3.1.2 (#1119)
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index a9bd8bdef57..3b56b269adb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -162,7 +162,7 @@
org.apache.maven.plugins
maven-project-info-reports-plugin
- 3.1.1
+ 3.1.2
From 47f59655acaf0fcf5848039e6b4881b80cdceb5c Mon Sep 17 00:00:00 2001
From: Thiago Nunes
Date: Mon, 3 May 2021 16:43:09 +1000
Subject: [PATCH 06/27] refactor: fixes various code analyser issues (#1118)
* chore: removes final modifier from methods
Removes final modifier from private and static methods.
* chore: adds diamond operator to generic class call
* chore: simplifies boolean expression
* chore: removes redundant throws clauses
* chore: marks ignored exceptions with comments
* chore: anonymous types replaced with lambda calls
* chore: uses comparator combinator
* chore: lambda replaced with method reference
* chore: makes inner class static
* chore: replaces Arrays.asList with emptyList
* chore: removes redundant initializers
* chore: removes redundant toString calls
* chore: explicit type arguments can be inferred
* chore: removes redundant type casts
* chore: replaces StringBuilder with String
* chore: removes redundant suppressions
* chore: list method replaced with value
* chore: uses comparator combinator
* chore: uses singletonList instead of asList
* chore: removes redundant type casts / parameters
* chore: addresses pr comments
* chore: removes unnecessary type cast
---
.../cloud/spanner/AbstractResultSet.java | 28 +-
.../cloud/spanner/AsyncResultSetImpl.java | 13 +-
.../google/cloud/spanner/AsyncRunnerImpl.java | 10 +-
.../spanner/AsyncTransactionManagerImpl.java | 21 +-
.../spanner/DatabaseAdminClientImpl.java | 90 ++--
.../cloud/spanner/DatabaseClientImpl.java | 23 +-
.../spanner/InstanceAdminClientImpl.java | 36 +-
.../java/com/google/cloud/spanner/KeySet.java | 10 +-
.../com/google/cloud/spanner/Operation.java | 10 +-
.../google/cloud/spanner/SessionClient.java | 2 +-
.../com/google/cloud/spanner/SessionImpl.java | 8 +-
.../com/google/cloud/spanner/SessionPool.java | 188 ++-----
.../SessionPoolAsyncTransactionManager.java | 95 ++--
.../com/google/cloud/spanner/SpannerImpl.java | 2 +-
.../google/cloud/spanner/SpannerOptions.java | 9 +-
.../spanner/TransactionContextFutureImpl.java | 2 +-
.../cloud/spanner/TransactionRunnerImpl.java | 94 ++--
.../connection/AbstractBaseUnitOfWork.java | 14 +-
.../connection/AsyncStatementResultImpl.java | 3 +-
.../spanner/connection/ChecksumResultSet.java | 4 +-
.../ClientSideStatementValueConverters.java | 18 +-
.../spanner/connection/ConnectionImpl.java | 13 +-
.../spanner/connection/ConnectionOptions.java | 11 +-
.../cloud/spanner/connection/DdlClient.java | 4 +-
.../spanner/connection/EmulatorUtil.java | 2 +-
.../connection/ReadWriteTransaction.java | 13 +-
.../connection/RetriableBatchUpdate.java | 2 +-
.../connection/SingleUseTransaction.java | 14 +-
.../cloud/spanner/connection/SpannerPool.java | 32 +-
.../connection/StatementResultImpl.java | 14 +-
.../cloud/spanner/spi/v1/GapicSpannerRpc.java | 103 ++--
.../spi/v1/SpannerMetadataProvider.java | 5 +-
.../cloud/spanner/spi/v1/SpannerRpc.java | 2 +-
.../spanner/AbstractAsyncTransactionTest.java | 14 +-
.../spanner/AsyncResultSetImplStressTest.java | 156 +++---
.../cloud/spanner/AsyncResultSetImplTest.java | 187 +++----
.../google/cloud/spanner/AsyncRunnerTest.java | 54 +-
.../AsyncTransactionManagerImplTest.java | 2 +-
.../spanner/AsyncTransactionManagerTest.java | 470 ++++++-----------
.../com/google/cloud/spanner/BackupTest.java | 14 +-
.../cloud/spanner/BatchClientImplTest.java | 6 +-
.../spanner/BatchCreateSessionsTest.java | 8 +-
.../spanner/DatabaseAdminClientImplTest.java | 21 +-
.../spanner/DatabaseAdminClientTest.java | 26 +-
.../cloud/spanner/DatabaseAdminGaxTest.java | 22 +-
.../cloud/spanner/DatabaseClientImplTest.java | 177 +++----
.../google/cloud/spanner/DatabaseTest.java | 20 +-
.../cloud/spanner/GrpcResultSetTest.java | 113 +---
.../cloud/spanner/InlineBeginBenchmark.java | 3 +-
.../spanner/InlineBeginTransactionTest.java | 185 +++----
.../spanner/InstanceAdminClientTest.java | 8 +-
.../cloud/spanner/InstanceAdminGaxTest.java | 19 +-
.../google/cloud/spanner/InstanceTest.java | 4 +-
.../IntegrationTestWithClosedSessionsEnv.java | 3 +-
.../spanner/IsRetryableInternalErrorTest.java | 1 -
.../spanner/IsSslHandshakeExceptionTest.java | 1 -
.../spanner/MetricRegistryTestUtils.java | 4 +-
.../spanner/MockDatabaseAdminServiceImpl.java | 11 +-
.../MockDatabaseAdminServiceImplTest.java | 4 +-
.../cloud/spanner/MockSpannerServiceImpl.java | 42 +-
.../cloud/spanner/OperationFutureUtil.java | 16 +-
.../PartitionedDmlTransactionTest.java | 2 +-
.../spanner/RandomResultSetGenerator.java | 2 +-
.../google/cloud/spanner/ReadAsyncTest.java | 198 +++----
.../cloud/spanner/ReadFormatTestRunner.java | 4 +-
...adWriteTransactionWithInlineBeginTest.java | 4 +-
.../google/cloud/spanner/ResultSetsTest.java | 80 ++-
.../RetryOnInvalidatedSessionTest.java | 401 ++++++--------
.../cloud/spanner/SessionClientTest.java | 117 ++--
.../google/cloud/spanner/SessionImplTest.java | 65 +--
.../cloud/spanner/SessionPoolBenchmark.java | 2 +-
.../spanner/SessionPoolMaintainerTest.java | 52 +-
.../cloud/spanner/SessionPoolStressTest.java | 122 ++---
.../google/cloud/spanner/SessionPoolTest.java | 499 ++++++++----------
.../com/google/cloud/spanner/SpanTest.java | 11 +-
.../cloud/spanner/SpannerApiFuturesTest.java | 6 +-
.../spanner/SpannerExceptionFactoryTest.java | 6 +-
.../cloud/spanner/SpannerGaxRetryTest.java | 12 +-
.../google/cloud/spanner/SpannerImplTest.java | 2 +-
.../cloud/spanner/SpannerOptionsTest.java | 23 +-
.../spanner/SpannerOptionsThreadTest.java | 11 +-
.../cloud/spanner/SpannerRetryHelperTest.java | 1 +
.../spanner/StandardBenchmarkMockServer.java | 10 +-
.../spanner/TransactionContextImplTest.java | 4 +-
.../TransactionManagerAbortedTest.java | 18 +-
.../spanner/TransactionManagerImplTest.java | 116 ++--
.../spanner/TransactionRunnerImplTest.java | 73 +--
.../google/cloud/spanner/ValueBinderTest.java | 6 +-
.../com/google/cloud/spanner/ValueTest.java | 50 +-
.../cloud/spanner/connection/AbortedTest.java | 9 +-
.../AbstractConnectionImplTest.java | 171 ++----
.../connection/AbstractMockServerTest.java | 14 +-
.../AsyncStatementResultImplTest.java | 4 +-
.../connection/AutocommitDmlModeTest.java | 13 +-
.../ConnectionAsyncApiAbortedTest.java | 131 ++---
.../connection/ConnectionAsyncApiTest.java | 112 ++--
.../connection/ConnectionImplTest.java | 165 +++---
.../connection/ConnectionOptionsTest.java | 15 +-
.../spanner/connection/ConnectionTest.java | 20 +-
.../spanner/connection/DdlBatchTest.java | 13 +-
.../spanner/connection/DdlClientTest.java | 3 +-
.../DirectExecuteResultSetTest.java | 3 +-
.../spanner/connection/DmlBatchTest.java | 5 +-
.../spanner/connection/EmulatorUtilTest.java | 14 +-
.../connection/ITAbstractSpannerTest.java | 13 +-
.../connection/RandomResultSetGenerator.java | 2 +-
.../connection/ReadWriteTransactionTest.java | 32 +-
.../ReplaceableForwardingResultSetTest.java | 3 +-
.../connection/SingleUseTransactionTest.java | 14 +-
.../spanner/connection/SpannerPoolTest.java | 2 +-
.../spanner/connection/SqlScriptVerifier.java | 6 +-
.../connection/StatementTimeoutTest.java | 15 +-
.../it/ITAsyncTransactionRetryTest.java | 290 +++++-----
.../cloud/spanner/it/ITAsyncAPITest.java | 97 ++--
.../cloud/spanner/it/ITAsyncExamplesTest.java | 160 +++---
.../google/cloud/spanner/it/ITBackupTest.java | 41 +-
.../cloud/spanner/it/ITBatchDmlTest.java | 8 +-
.../cloud/spanner/it/ITBatchReadTest.java | 6 +-
.../spanner/it/ITCommitTimestampTest.java | 7 +-
.../google/cloud/spanner/it/ITDMLTest.java | 27 +-
.../cloud/spanner/it/ITDatabaseAdminTest.java | 8 +-
.../cloud/spanner/it/ITDatabaseTest.java | 2 +-
.../spanner/it/ITDirectPathFallback.java | 18 +-
.../spanner/it/ITPitrUpdateDatabaseTest.java | 2 +-
.../google/cloud/spanner/it/ITQueryTest.java | 28 +-
.../cloud/spanner/it/ITReadOnlyTxnTest.java | 6 +-
.../spanner/it/ITSpannerOptionsTest.java | 4 +-
.../it/ITTransactionManagerAsyncTest.java | 134 ++---
.../spanner/it/ITTransactionManagerTest.java | 3 +-
.../cloud/spanner/it/ITTransactionTest.java | 200 ++++---
.../cloud/spanner/it/ITVPCNegativeTest.java | 4 +-
.../google/cloud/spanner/it/ITWriteTest.java | 32 +-
.../spanner/spi/v1/GapicSpannerRpcTest.java | 49 +-
.../spi/v1/SpannerMetadataProviderTest.java | 6 +-
134 files changed, 2398 insertions(+), 3896 deletions(-)
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java
index 6dd8d485bac..09b824038ee 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractResultSet.java
@@ -32,7 +32,6 @@
import com.google.cloud.spanner.spi.v1.SpannerRpc;
import com.google.cloud.spanner.v1.stub.SpannerStubSettings;
import com.google.common.annotations.VisibleForTesting;
-import com.google.common.base.Function;
import com.google.common.collect.AbstractIterator;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
@@ -225,7 +224,7 @@ protected com.google.protobuf.Value computeNext() {
+ newValue.getKindCase());
}
if (kind == KindCase.STRING_VALUE) {
- merged = (String) merged + newValue.getStringValue();
+ merged = merged + newValue.getStringValue();
} else {
concatLists(
(List) merged, newValue.getListValue().getValuesList());
@@ -319,7 +318,7 @@ private void concatLists(List a, List() {
- @Override
- public Boolean apply(com.google.protobuf.Value input) {
- return input.getKindCase() == KindCase.NULL_VALUE ? null : input.getBoolValue();
- }
- });
+ input -> input.getKindCase() == KindCase.NULL_VALUE ? null : input.getBoolValue());
case INT64:
// For int64/float64 types, use custom containers. These avoid wrapper object
// creation for non-null arrays.
@@ -551,12 +545,7 @@ public Boolean apply(com.google.protobuf.Value input) {
case STRING:
return Lists.transform(
listValue.getValuesList(),
- new Function() {
- @Override
- public String apply(com.google.protobuf.Value input) {
- return input.getKindCase() == KindCase.NULL_VALUE ? null : input.getStringValue();
- }
- });
+ input -> input.getKindCase() == KindCase.NULL_VALUE ? null : input.getStringValue());
case BYTES:
{
// Materialize list: element conversion is expensive and should happen only once.
@@ -1012,12 +1001,9 @@ private static void backoffSleep(Context context, long backoffMillis) throws Spa
ImmutableMap.of("Delay", AttributeValue.longAttributeValue(backoffMillis)));
final CountDownLatch latch = new CountDownLatch(1);
final Context.CancellationListener listener =
- new Context.CancellationListener() {
- @Override
- public void cancelled(Context context) {
- // Wakeup on cancellation / DEADLINE_EXCEEDED.
- latch.countDown();
- }
+ ignored -> {
+ // Wakeup on cancellation / DEADLINE_EXCEEDED.
+ latch.countDown();
};
context.addListener(listener, DirectExecutor.INSTANCE);
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncResultSetImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncResultSetImpl.java
index 88800563337..35ed4648af1 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncResultSetImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncResultSetImpl.java
@@ -16,7 +16,6 @@
package com.google.cloud.spanner;
-import com.google.api.core.ApiAsyncFunction;
import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutures;
import com.google.api.core.ListenableFutureToApiFuture;
@@ -529,18 +528,10 @@ public ApiFuture> toListAsync(
Preconditions.checkState(!closed, "This AsyncResultSet has been closed");
Preconditions.checkState(
this.state == State.INITIALIZED, "This AsyncResultSet has already been used.");
- final SettableApiFuture> res = SettableApiFuture.>create();
+ final SettableApiFuture> res = SettableApiFuture.create();
CreateListCallback callback = new CreateListCallback<>(res, transformer);
ApiFuture finished = setCallback(executor, callback);
- return ApiFutures.transformAsync(
- finished,
- new ApiAsyncFunction>() {
- @Override
- public ApiFuture> apply(Void input) throws Exception {
- return res;
- }
- },
- MoreExecutors.directExecutor());
+ return ApiFutures.transformAsync(finished, ignored -> res, MoreExecutors.directExecutor());
}
}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncRunnerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncRunnerImpl.java
index 8aa040766ea..1ea58b2bc66 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncRunnerImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncRunnerImpl.java
@@ -18,7 +18,6 @@
import static com.google.common.base.Preconditions.checkState;
-import com.google.api.core.ApiFunction;
import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutures;
import com.google.api.core.SettableApiFuture;
@@ -79,14 +78,7 @@ private void setCommitResponse() {
public ApiFuture getCommitTimestamp() {
checkState(commitResponse != null, "runAsync() has not yet been called");
return ApiFutures.transform(
- commitResponse,
- new ApiFunction() {
- @Override
- public Timestamp apply(CommitResponse input) {
- return input.getCommitTimestamp();
- }
- },
- MoreExecutors.directExecutor());
+ commitResponse, CommitResponse::getCommitTimestamp, MoreExecutors.directExecutor());
}
public ApiFuture getCommitResponse() {
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncTransactionManagerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncTransactionManagerImpl.java
index 1d085491192..510bd02bc0e 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncTransactionManagerImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AsyncTransactionManagerImpl.java
@@ -16,8 +16,6 @@
package com.google.cloud.spanner;
-import com.google.api.core.ApiAsyncFunction;
-import com.google.api.core.ApiFunction;
import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutureCallback;
import com.google.api.core.ApiFutures;
@@ -30,7 +28,6 @@
import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
import com.google.common.util.concurrent.MoreExecutors;
-import com.google.protobuf.Empty;
import io.opencensus.trace.Span;
import io.opencensus.trace.Tracer;
import io.opencensus.trace.Tracing;
@@ -73,7 +70,7 @@ public ApiFuture closeAsync() {
if (txn != null) {
txn.close();
}
- return MoreObjects.firstNonNull(res, ApiFutures.immediateFuture(null));
+ return MoreObjects.firstNonNull(res, ApiFutures.immediateFuture(null));
}
@Override
@@ -154,14 +151,7 @@ public void onSuccess(CommitResponse result) {
},
MoreExecutors.directExecutor());
return ApiFutures.transform(
- commitResponseFuture,
- new ApiFunction() {
- @Override
- public Timestamp apply(CommitResponse input) {
- return input.getCommitTimestamp();
- }
- },
- MoreExecutors.directExecutor());
+ commitResponseFuture, CommitResponse::getCommitTimestamp, MoreExecutors.directExecutor());
}
@Override
@@ -172,12 +162,7 @@ public ApiFuture rollbackAsync() {
try {
return ApiFutures.transformAsync(
txn.rollbackAsync(),
- new ApiAsyncFunction() {
- @Override
- public ApiFuture apply(Empty input) throws Exception {
- return ApiFutures.immediateFuture(null);
- }
- },
+ ignored -> ApiFutures.immediateFuture(null),
MoreExecutors.directExecutor());
} finally {
txnState = TransactionState.ROLLED_BACK;
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseAdminClientImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseAdminClientImpl.java
index 30bb581e9a7..4d79ed517da 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseAdminClientImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseAdminClientImpl.java
@@ -16,11 +16,9 @@
package com.google.cloud.spanner;
-import com.google.api.core.ApiFunction;
import com.google.api.gax.grpc.ProtoOperationTransformers;
import com.google.api.gax.longrunning.OperationFuture;
import com.google.api.gax.longrunning.OperationFutureImpl;
-import com.google.api.gax.longrunning.OperationSnapshot;
import com.google.api.gax.paging.Page;
import com.google.cloud.Policy;
import com.google.cloud.Policy.DefaultMarshaller;
@@ -108,22 +106,15 @@ public OperationFuture restoreDatabase(Restor
return new OperationFutureImpl<>(
rawOperationFuture.getPollingFuture(),
rawOperationFuture.getInitialFuture(),
- new ApiFunction() {
- @Override
- public Database apply(OperationSnapshot snapshot) {
- return Database.fromProto(
+ snapshot ->
+ Database.fromProto(
ProtoOperationTransformers.ResponseTransformer.create(
com.google.spanner.admin.database.v1.Database.class)
.apply(snapshot),
- DatabaseAdminClientImpl.this);
- }
- },
+ DatabaseAdminClientImpl.this),
ProtoOperationTransformers.MetadataTransformer.create(RestoreDatabaseMetadata.class),
- new ApiFunction() {
- @Override
- public Database apply(Exception e) {
- throw SpannerExceptionFactory.newSpannerException(e);
- }
+ e -> {
+ throw SpannerExceptionFactory.newSpannerException(e);
});
}
@@ -154,30 +145,24 @@ public OperationFuture createBackup(Backup backupI
return new OperationFutureImpl<>(
rawOperationFuture.getPollingFuture(),
rawOperationFuture.getInitialFuture(),
- new ApiFunction() {
- @Override
- public Backup apply(OperationSnapshot snapshot) {
- com.google.spanner.admin.database.v1.Backup proto =
- ProtoOperationTransformers.ResponseTransformer.create(
- com.google.spanner.admin.database.v1.Backup.class)
- .apply(snapshot);
- return Backup.fromProto(
- com.google.spanner.admin.database.v1.Backup.newBuilder(proto)
- .setName(proto.getName())
- .setExpireTime(proto.getExpireTime())
- .setVersionTime(proto.getVersionTime())
- .setState(proto.getState())
- .setEncryptionInfo(proto.getEncryptionInfo())
- .build(),
- DatabaseAdminClientImpl.this);
- }
+ snapshot -> {
+ com.google.spanner.admin.database.v1.Backup proto =
+ ProtoOperationTransformers.ResponseTransformer.create(
+ com.google.spanner.admin.database.v1.Backup.class)
+ .apply(snapshot);
+ return Backup.fromProto(
+ com.google.spanner.admin.database.v1.Backup.newBuilder(proto)
+ .setName(proto.getName())
+ .setExpireTime(proto.getExpireTime())
+ .setVersionTime(proto.getVersionTime())
+ .setState(proto.getState())
+ .setEncryptionInfo(proto.getEncryptionInfo())
+ .build(),
+ DatabaseAdminClientImpl.this);
},
ProtoOperationTransformers.MetadataTransformer.create(CreateBackupMetadata.class),
- new ApiFunction() {
- @Override
- public Backup apply(Exception e) {
- throw SpannerExceptionFactory.newSpannerException(e);
- }
+ e -> {
+ throw SpannerExceptionFactory.newSpannerException(e);
});
}
@@ -311,22 +296,15 @@ public OperationFuture createDatabase(
return new OperationFutureImpl<>(
rawOperationFuture.getPollingFuture(),
rawOperationFuture.getInitialFuture(),
- new ApiFunction() {
- @Override
- public Database apply(OperationSnapshot snapshot) {
- return Database.fromProto(
+ snapshot ->
+ Database.fromProto(
ProtoOperationTransformers.ResponseTransformer.create(
com.google.spanner.admin.database.v1.Database.class)
.apply(snapshot),
- DatabaseAdminClientImpl.this);
- }
- },
+ DatabaseAdminClientImpl.this),
ProtoOperationTransformers.MetadataTransformer.create(CreateDatabaseMetadata.class),
- new ApiFunction() {
- @Override
- public Database apply(Exception e) {
- throw SpannerExceptionFactory.newSpannerException(e);
- }
+ e -> {
+ throw SpannerExceptionFactory.newSpannerException(e);
});
}
@@ -350,19 +328,13 @@ public OperationFuture updateDatabaseDdl(
return new OperationFutureImpl<>(
rawOperationFuture.getPollingFuture(),
rawOperationFuture.getInitialFuture(),
- new ApiFunction() {
- @Override
- public Void apply(OperationSnapshot snapshot) {
- ProtoOperationTransformers.ResponseTransformer.create(Empty.class).apply(snapshot);
- return null;
- }
+ snapshot -> {
+ ProtoOperationTransformers.ResponseTransformer.create(Empty.class).apply(snapshot);
+ return null;
},
ProtoOperationTransformers.MetadataTransformer.create(UpdateDatabaseDdlMetadata.class),
- new ApiFunction() {
- @Override
- public Void apply(Exception e) {
- throw SpannerExceptionFactory.newSpannerException(e);
- }
+ e -> {
+ throw SpannerExceptionFactory.newSpannerException(e);
});
}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java
index 55002d405f7..e2121910ad8 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/DatabaseClientImpl.java
@@ -64,13 +64,7 @@ public CommitResponse writeWithOptions(
throws SpannerException {
Span span = tracer.spanBuilder(READ_WRITE_TRANSACTION).startSpan();
try (Scope s = tracer.withSpan(span)) {
- return runWithSessionRetry(
- new Function() {
- @Override
- public CommitResponse apply(Session session) {
- return session.writeWithOptions(mutations, options);
- }
- });
+ return runWithSessionRetry(session -> session.writeWithOptions(mutations, options));
} catch (RuntimeException e) {
TraceUtil.setWithFailure(span, e);
throw e;
@@ -91,12 +85,7 @@ public CommitResponse writeAtLeastOnceWithOptions(
Span span = tracer.spanBuilder(READ_WRITE_TRANSACTION).startSpan();
try (Scope s = tracer.withSpan(span)) {
return runWithSessionRetry(
- new Function() {
- @Override
- public CommitResponse apply(Session session) {
- return session.writeAtLeastOnceWithOptions(mutations, options);
- }
- });
+ session -> session.writeAtLeastOnceWithOptions(mutations, options));
} catch (RuntimeException e) {
TraceUtil.setWithFailure(span, e);
throw e;
@@ -221,13 +210,7 @@ public AsyncTransactionManager transactionManagerAsync(TransactionOption... opti
public long executePartitionedUpdate(final Statement stmt, final UpdateOption... options) {
Span span = tracer.spanBuilder(PARTITION_DML_TRANSACTION).startSpan();
try (Scope s = tracer.withSpan(span)) {
- return runWithSessionRetry(
- new Function() {
- @Override
- public Long apply(Session session) {
- return session.executePartitionedUpdate(stmt, options);
- }
- });
+ return runWithSessionRetry(session -> session.executePartitionedUpdate(stmt, options));
} catch (RuntimeException e) {
TraceUtil.endSpanWithFailure(span, e);
throw e;
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceAdminClientImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceAdminClientImpl.java
index 409f9a31adf..4f25393b634 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceAdminClientImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/InstanceAdminClientImpl.java
@@ -16,11 +16,9 @@
package com.google.cloud.spanner;
-import com.google.api.core.ApiFunction;
import com.google.api.gax.grpc.ProtoOperationTransformers;
import com.google.api.gax.longrunning.OperationFuture;
import com.google.api.gax.longrunning.OperationFutureImpl;
-import com.google.api.gax.longrunning.OperationSnapshot;
import com.google.api.gax.paging.Page;
import com.google.api.pathtemplate.PathTemplate;
import com.google.cloud.Policy;
@@ -106,23 +104,16 @@ public OperationFuture createInstance(Instance
return new OperationFutureImpl<>(
rawOperationFuture.getPollingFuture(),
rawOperationFuture.getInitialFuture(),
- new ApiFunction() {
- @Override
- public Instance apply(OperationSnapshot snapshot) {
- return Instance.fromProto(
+ snapshot ->
+ Instance.fromProto(
ProtoOperationTransformers.ResponseTransformer.create(
com.google.spanner.admin.instance.v1.Instance.class)
.apply(snapshot),
InstanceAdminClientImpl.this,
- dbClient);
- }
- },
+ dbClient),
ProtoOperationTransformers.MetadataTransformer.create(CreateInstanceMetadata.class),
- new ApiFunction() {
- @Override
- public Instance apply(Exception e) {
- throw SpannerExceptionFactory.newSpannerException(e);
- }
+ e -> {
+ throw SpannerExceptionFactory.newSpannerException(e);
});
}
@@ -175,23 +166,16 @@ public OperationFuture updateInstance(
return new OperationFutureImpl<>(
rawOperationFuture.getPollingFuture(),
rawOperationFuture.getInitialFuture(),
- new ApiFunction() {
- @Override
- public Instance apply(OperationSnapshot snapshot) {
- return Instance.fromProto(
+ snapshot ->
+ Instance.fromProto(
ProtoOperationTransformers.ResponseTransformer.create(
com.google.spanner.admin.instance.v1.Instance.class)
.apply(snapshot),
InstanceAdminClientImpl.this,
- dbClient);
- }
- },
+ dbClient),
ProtoOperationTransformers.MetadataTransformer.create(UpdateInstanceMetadata.class),
- new ApiFunction() {
- @Override
- public Instance apply(Exception e) {
- throw SpannerExceptionFactory.newSpannerException(e);
- }
+ e -> {
+ throw SpannerExceptionFactory.newSpannerException(e);
});
}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/KeySet.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/KeySet.java
index 1f132bcaaed..76c60aac9bb 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/KeySet.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/KeySet.java
@@ -47,7 +47,7 @@ private KeySet(boolean all, ImmutableList keys, ImmutableList ran
* as there are columns in the primary or index key with this this key set is used.
*/
public static KeySet singleKey(Key key) {
- return new KeySet(false, ImmutableList.of(key), ImmutableList.of());
+ return new KeySet(false, ImmutableList.of(key), ImmutableList.of());
}
/**
@@ -55,7 +55,7 @@ public static KeySet singleKey(Key key) {
* ranges.
*/
public static KeySet range(KeyRange range) {
- return new KeySet(false, ImmutableList.of(), ImmutableList.of(range));
+ return new KeySet(false, ImmutableList.of(), ImmutableList.of(range));
}
/**
@@ -68,7 +68,7 @@ public static KeySet prefixRange(Key prefix) {
/** Creates a key set that will retrieve all rows of a table or index. */
public static KeySet all() {
- return new KeySet(true, ImmutableList.of(), ImmutableList.of());
+ return new KeySet(true, ImmutableList.of(), ImmutableList.of());
}
/** Returns a new builder that can be used to construct a key set. */
@@ -124,8 +124,8 @@ public Builder setAll() {
public KeySet build() {
return new KeySet(
all,
- keys != null ? keys.build() : ImmutableList.of(),
- ranges != null ? ranges.build() : ImmutableList.of());
+ keys != null ? keys.build() : ImmutableList.of(),
+ ranges != null ? ranges.build() : ImmutableList.of());
}
}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Operation.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Operation.java
index a536a97ffd8..bd238d3ef8b 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Operation.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/Operation.java
@@ -100,7 +100,7 @@ private static Operation pending(
static Operation create(
SpannerRpc rpc, com.google.longrunning.Operation proto, Parser parser) {
- return Operation.create(rpc, proto, parser, CurrentMillisClock.getDefaultClock());
+ return Operation.create(rpc, proto, parser, CurrentMillisClock.getDefaultClock());
}
static Operation create(
@@ -109,13 +109,13 @@ static Operation create(
String name = proto.getName();
if (proto.getDone()) {
if (proto.getResultCase() == ResultCase.ERROR) {
- return Operation.failed(rpc, name, proto.getError(), metadata, parser, clock);
+ return Operation.failed(rpc, name, proto.getError(), metadata, parser, clock);
} else {
- return Operation.successful(
+ return Operation.successful(
rpc, name, metadata, parser.parseResult(proto.getResponse()), parser, clock);
}
} else {
- return Operation.pending(rpc, name, metadata, parser, clock);
+ return Operation.pending(rpc, name, metadata, parser, clock);
}
}
@@ -125,7 +125,7 @@ public Operation reload() throws SpannerException {
return this;
}
com.google.longrunning.Operation proto = rpc.getOperation(name);
- return Operation.create(rpc, proto, parser);
+ return Operation.create(rpc, proto, parser);
}
/**
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionClient.java
index 7afb896ba59..cc9681b44d5 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionClient.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionClient.java
@@ -125,7 +125,7 @@ private BatchCreateSessionsRunnable(
@Override
public void run() {
- List sessions = null;
+ List sessions;
int remainingSessionsToCreate = sessionCount;
Span span = SpannerImpl.tracer.spanBuilder(SpannerImpl.BATCH_CREATE_SESSIONS).startSpan();
try (Scope s = SpannerImpl.tracer.withSpan(span)) {
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java
index 5674133c2b6..e981f96eb33 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionImpl.java
@@ -59,13 +59,7 @@ class SessionImpl implements Session {
private static final Tracer tracer = Tracing.getTracer();
/** Keep track of running transactions on this session per thread. */
- static final ThreadLocal hasPendingTransaction =
- new ThreadLocal() {
- @Override
- protected Boolean initialValue() {
- return false;
- }
- };
+ static final ThreadLocal hasPendingTransaction = ThreadLocal.withInitial(() -> false);
static void throwIfTransactionsPending() {
if (hasPendingTransaction.get() == Boolean.TRUE) {
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
index a1259c331fb..47f2c338994 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPool.java
@@ -39,7 +39,6 @@
import static com.google.cloud.spanner.SpannerExceptionFactory.newSpannerException;
import static com.google.common.base.Preconditions.checkState;
-import com.google.api.core.ApiFunction;
import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutures;
import com.google.api.core.SettableApiFuture;
@@ -69,7 +68,6 @@
import com.google.common.util.concurrent.SettableFuture;
import com.google.protobuf.Empty;
import io.opencensus.common.Scope;
-import io.opencensus.common.ToLongFunction;
import io.opencensus.metrics.DerivedLongCumulative;
import io.opencensus.metrics.DerivedLongGauge;
import io.opencensus.metrics.LabelValue;
@@ -579,14 +577,11 @@ private AsyncSessionPoolResultSet(SessionNotFoundHandler handler, AsyncResultSet
public ApiFuture setCallback(Executor executor, final ReadyCallback callback) {
return super.setCallback(
executor,
- new ReadyCallback() {
- @Override
- public CallbackResponse cursorReady(AsyncResultSet resultSet) {
- try {
- return callback.cursorReady(resultSet);
- } catch (SessionNotFoundException e) {
- throw handler.handleSessionNotFound(e);
- }
+ resultSet -> {
+ try {
+ return callback.cursorReady(resultSet);
+ } catch (SessionNotFoundException e) {
+ throw handler.handleSessionNotFound(e);
}
});
}
@@ -668,11 +663,8 @@ public ApiFuture readRowAsync(String table, Key key, Iterable co
return ApiFutures.catching(
AbstractReadContext.consumeSingleRowAsync(rs),
SessionNotFoundException.class,
- new ApiFunction() {
- @Override
- public Struct apply(SessionNotFoundException input) {
- throw handler.handleSessionNotFound(input);
- }
+ input -> {
+ throw handler.handleSessionNotFound(input);
},
MoreExecutors.directExecutor());
}
@@ -699,11 +691,8 @@ public ApiFuture readRowUsingIndexAsync(
return ApiFutures.catching(
AbstractReadContext.consumeSingleRowAsync(rs),
SessionNotFoundException.class,
- new ApiFunction() {
- @Override
- public Struct apply(SessionNotFoundException input) {
- throw handler.handleSessionNotFound(input);
- }
+ input -> {
+ throw handler.handleSessionNotFound(input);
},
MoreExecutors.directExecutor());
}
@@ -728,11 +717,8 @@ public ApiFuture executeUpdateAsync(Statement statement, UpdateOption... o
return ApiFutures.catching(
delegate.executeUpdateAsync(statement, options),
SessionNotFoundException.class,
- new ApiFunction() {
- @Override
- public Long apply(SessionNotFoundException input) {
- throw handler.handleSessionNotFound(input);
- }
+ input -> {
+ throw handler.handleSessionNotFound(input);
},
MoreExecutors.directExecutor());
}
@@ -752,11 +738,8 @@ public ApiFuture batchUpdateAsync(
return ApiFutures.catching(
delegate.batchUpdateAsync(statements, options),
SessionNotFoundException.class,
- new ApiFunction() {
- @Override
- public long[] apply(SessionNotFoundException input) {
- throw handler.handleSessionNotFound(input);
- }
+ input -> {
+ throw handler.handleSessionNotFound(input);
},
MoreExecutors.directExecutor());
}
@@ -1047,14 +1030,7 @@ private void setCommitResponse(AsyncRunner delegate) {
public ApiFuture getCommitTimestamp() {
checkState(commitResponse != null, "runAsync() has not yet been called");
return ApiFutures.transform(
- commitResponse,
- new ApiFunction() {
- @Override
- public Timestamp apply(CommitResponse input) {
- return input.getCommitTimestamp();
- }
- },
- MoreExecutors.directExecutor());
+ commitResponse, CommitResponse::getCommitTimestamp, MoreExecutors.directExecutor());
}
@Override
@@ -1141,12 +1117,9 @@ public CommitResponse writeAtLeastOnceWithOptions(
public ReadContext singleUse() {
try {
return new AutoClosingReadContext<>(
- new Function() {
- @Override
- public ReadContext apply(PooledSessionFuture session) {
- PooledSession ps = session.get();
- return ps.delegate.singleUse();
- }
+ session -> {
+ PooledSession ps = session.get();
+ return ps.delegate.singleUse();
},
SessionPool.this,
this,
@@ -1161,12 +1134,9 @@ public ReadContext apply(PooledSessionFuture session) {
public ReadContext singleUse(final TimestampBound bound) {
try {
return new AutoClosingReadContext<>(
- new Function() {
- @Override
- public ReadContext apply(PooledSessionFuture session) {
- PooledSession ps = session.get();
- return ps.delegate.singleUse(bound);
- }
+ session -> {
+ PooledSession ps = session.get();
+ return ps.delegate.singleUse(bound);
},
SessionPool.this,
this,
@@ -1180,12 +1150,9 @@ public ReadContext apply(PooledSessionFuture session) {
@Override
public ReadOnlyTransaction singleUseReadOnlyTransaction() {
return internalReadOnlyTransaction(
- new Function() {
- @Override
- public ReadOnlyTransaction apply(PooledSessionFuture session) {
- PooledSession ps = session.get();
- return ps.delegate.singleUseReadOnlyTransaction();
- }
+ session -> {
+ PooledSession ps = session.get();
+ return ps.delegate.singleUseReadOnlyTransaction();
},
true);
}
@@ -1193,12 +1160,9 @@ public ReadOnlyTransaction apply(PooledSessionFuture session) {
@Override
public ReadOnlyTransaction singleUseReadOnlyTransaction(final TimestampBound bound) {
return internalReadOnlyTransaction(
- new Function() {
- @Override
- public ReadOnlyTransaction apply(PooledSessionFuture session) {
- PooledSession ps = session.get();
- return ps.delegate.singleUseReadOnlyTransaction(bound);
- }
+ session -> {
+ PooledSession ps = session.get();
+ return ps.delegate.singleUseReadOnlyTransaction(bound);
},
true);
}
@@ -1206,12 +1170,9 @@ public ReadOnlyTransaction apply(PooledSessionFuture session) {
@Override
public ReadOnlyTransaction readOnlyTransaction() {
return internalReadOnlyTransaction(
- new Function() {
- @Override
- public ReadOnlyTransaction apply(PooledSessionFuture session) {
- PooledSession ps = session.get();
- return ps.delegate.readOnlyTransaction();
- }
+ session -> {
+ PooledSession ps = session.get();
+ return ps.delegate.readOnlyTransaction();
},
false);
}
@@ -1219,12 +1180,9 @@ public ReadOnlyTransaction apply(PooledSessionFuture session) {
@Override
public ReadOnlyTransaction readOnlyTransaction(final TimestampBound bound) {
return internalReadOnlyTransaction(
- new Function() {
- @Override
- public ReadOnlyTransaction apply(PooledSessionFuture session) {
- PooledSession ps = session.get();
- return ps.delegate.readOnlyTransaction(bound);
- }
+ session -> {
+ PooledSession ps = session.get();
+ return ps.delegate.readOnlyTransaction(bound);
},
false);
}
@@ -2409,62 +2367,26 @@ private void initMetricsCollection(MetricRegistry metricRegistry, List() {
- @Override
- public long applyAsLong(SessionPool sessionPool) {
- return sessionPool.maxSessionsInUse;
- }
- });
+ labelValues, this, sessionPool -> sessionPool.maxSessionsInUse);
// The value of a maxSessions is observed from a callback function. This function is invoked
// whenever metrics are collected.
maxAllowedSessionsMetric.removeTimeSeries(labelValues);
maxAllowedSessionsMetric.createTimeSeries(
- labelValues,
- options,
- new ToLongFunction() {
- @Override
- public long applyAsLong(SessionPoolOptions options) {
- return options.getMaxSessions();
- }
- });
+ labelValues, options, SessionPoolOptions::getMaxSessions);
// The value of a numWaiterTimeouts is observed from a callback function. This function is
// invoked whenever metrics are collected.
sessionsTimeouts.removeTimeSeries(labelValues);
- sessionsTimeouts.createTimeSeries(
- labelValues,
- this,
- new ToLongFunction() {
- @Override
- public long applyAsLong(SessionPool sessionPool) {
- return sessionPool.getNumWaiterTimeouts();
- }
- });
+ sessionsTimeouts.createTimeSeries(labelValues, this, SessionPool::getNumWaiterTimeouts);
numAcquiredSessionsMetric.removeTimeSeries(labelValues);
numAcquiredSessionsMetric.createTimeSeries(
- labelValues,
- this,
- new ToLongFunction() {
- @Override
- public long applyAsLong(SessionPool sessionPool) {
- return sessionPool.numSessionsAcquired;
- }
- });
+ labelValues, this, sessionPool -> sessionPool.numSessionsAcquired);
numReleasedSessionsMetric.removeTimeSeries(labelValues);
numReleasedSessionsMetric.createTimeSeries(
- labelValues,
- this,
- new ToLongFunction() {
- @Override
- public long applyAsLong(SessionPool sessionPool) {
- return sessionPool.numSessionsReleased;
- }
- });
+ labelValues, this, sessionPool -> sessionPool.numSessionsReleased);
List labelValuesWithBeingPreparedType = new ArrayList<>(labelValues);
labelValuesWithBeingPreparedType.add(NUM_SESSIONS_BEING_PREPARED);
@@ -2472,39 +2394,20 @@ public long applyAsLong(SessionPool sessionPool) {
numSessionsInPoolMetric.createTimeSeries(
labelValuesWithBeingPreparedType,
this,
- new ToLongFunction() {
- @Override
- public long applyAsLong(SessionPool sessionPool) {
- // TODO: Remove metric.
- return 0L;
- }
- });
+ // TODO: Remove metric.
+ ignored -> 0L);
List labelValuesWithInUseType = new ArrayList<>(labelValues);
labelValuesWithInUseType.add(NUM_IN_USE_SESSIONS);
numSessionsInPoolMetric.removeTimeSeries(labelValuesWithInUseType);
numSessionsInPoolMetric.createTimeSeries(
- labelValuesWithInUseType,
- this,
- new ToLongFunction() {
- @Override
- public long applyAsLong(SessionPool sessionPool) {
- return sessionPool.numSessionsInUse;
- }
- });
+ labelValuesWithInUseType, this, sessionPool -> sessionPool.numSessionsInUse);
List labelValuesWithReadType = new ArrayList<>(labelValues);
labelValuesWithReadType.add(NUM_READ_SESSIONS);
numSessionsInPoolMetric.removeTimeSeries(labelValuesWithReadType);
numSessionsInPoolMetric.createTimeSeries(
- labelValuesWithReadType,
- this,
- new ToLongFunction() {
- @Override
- public long applyAsLong(SessionPool sessionPool) {
- return sessionPool.sessions.size();
- }
- });
+ labelValuesWithReadType, this, sessionPool -> sessionPool.sessions.size());
List labelValuesWithWriteType = new ArrayList<>(labelValues);
labelValuesWithWriteType.add(NUM_WRITE_SESSIONS);
@@ -2512,12 +2415,7 @@ public long applyAsLong(SessionPool sessionPool) {
numSessionsInPoolMetric.createTimeSeries(
labelValuesWithWriteType,
this,
- new ToLongFunction() {
- @Override
- public long applyAsLong(SessionPool sessionPool) {
- // TODO: Remove metric.
- return 0L;
- }
- });
+ // TODO: Remove metric.
+ ignored -> 0L);
}
}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolAsyncTransactionManager.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolAsyncTransactionManager.java
index 6b7b4b3afc5..b6442fd2182 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolAsyncTransactionManager.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SessionPoolAsyncTransactionManager.java
@@ -16,8 +16,6 @@
package com.google.cloud.spanner;
-import com.google.api.core.ApiAsyncFunction;
-import com.google.api.core.ApiFunction;
import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutureCallback;
import com.google.api.core.ApiFutures;
@@ -185,34 +183,31 @@ public ApiFuture commitAsync() {
}
return ApiFutures.transformAsync(
delegate,
- new ApiAsyncFunction() {
- @Override
- public ApiFuture apply(AsyncTransactionManagerImpl input) throws Exception {
- final SettableApiFuture res = SettableApiFuture.create();
- ApiFutures.addCallback(
- input.commitAsync(),
- new ApiFutureCallback() {
- @Override
- public void onFailure(Throwable t) {
- synchronized (lock) {
- if (t instanceof AbortedException) {
- txnState = TransactionState.ABORTED;
- abortedException = (AbortedException) t;
- } else {
- txnState = TransactionState.COMMIT_FAILED;
- }
+ input -> {
+ final SettableApiFuture res = SettableApiFuture.create();
+ ApiFutures.addCallback(
+ input.commitAsync(),
+ new ApiFutureCallback() {
+ @Override
+ public void onFailure(Throwable t) {
+ synchronized (lock) {
+ if (t instanceof AbortedException) {
+ txnState = TransactionState.ABORTED;
+ abortedException = (AbortedException) t;
+ } else {
+ txnState = TransactionState.COMMIT_FAILED;
}
- res.setException(t);
}
+ res.setException(t);
+ }
- @Override
- public void onSuccess(Timestamp result) {
- res.set(result);
- }
- },
- MoreExecutors.directExecutor());
- return res;
- }
+ @Override
+ public void onSuccess(Timestamp result) {
+ res.set(result);
+ }
+ },
+ MoreExecutors.directExecutor());
+ return res;
},
MoreExecutors.directExecutor());
}
@@ -227,13 +222,10 @@ public ApiFuture rollbackAsync() {
}
return ApiFutures.transformAsync(
delegate,
- new ApiAsyncFunction() {
- @Override
- public ApiFuture apply(AsyncTransactionManagerImpl input) throws Exception {
- ApiFuture res = input.rollbackAsync();
- res.addListener(() -> session.close(), MoreExecutors.directExecutor());
- return res;
- }
+ input -> {
+ ApiFuture res = input.rollbackAsync();
+ res.addListener(() -> session.close(), MoreExecutors.directExecutor());
+ return res;
},
MoreExecutors.directExecutor());
}
@@ -251,26 +243,17 @@ public TransactionContextFuture resetForRetryAsync() {
ApiFutures.transform(
ApiFutures.transformAsync(
delegate,
- new ApiAsyncFunction() {
- @Override
- public ApiFuture apply(AsyncTransactionManagerImpl input)
- throws Exception {
- if (restartedAfterSessionNotFound) {
- restartedAfterSessionNotFound = false;
- return input.beginAsync();
- }
- return input.resetForRetryAsync();
+ input -> {
+ if (restartedAfterSessionNotFound) {
+ restartedAfterSessionNotFound = false;
+ return input.beginAsync();
}
+ return input.resetForRetryAsync();
},
MoreExecutors.directExecutor()),
- new ApiFunction() {
-
- @Override
- public TransactionContext apply(TransactionContext input) {
- return new SessionPool.SessionPoolTransactionContext(
- SessionPoolAsyncTransactionManager.this, input);
- }
- },
+ input ->
+ new SessionPool.SessionPoolTransactionContext(
+ SessionPoolAsyncTransactionManager.this, input),
MoreExecutors.directExecutor()));
}
@@ -288,14 +271,6 @@ public ApiFuture getCommitResponse() {
"commit can only be invoked if the transaction was successfully committed");
}
return ApiFutures.transformAsync(
- delegate,
- new ApiAsyncFunction() {
- @Override
- public ApiFuture apply(AsyncTransactionManagerImpl input)
- throws Exception {
- return input.getCommitResponse();
- }
- },
- MoreExecutors.directExecutor());
+ delegate, AsyncTransactionManagerImpl::getCommitResponse, MoreExecutors.directExecutor());
}
}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java
index f16382e8355..b8255f1d65e 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java
@@ -244,7 +244,7 @@ public void close() {
}
void close(long timeout, TimeUnit unit) {
- List> closureFutures = null;
+ List> closureFutures;
synchronized (this) {
checkClosed();
closedException = new ClosedException();
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java
index 60f33273e31..62cfa336e9e 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java
@@ -1004,7 +1004,6 @@ public Builder setEmulatorHost(String emulatorHost) {
return this;
}
- @SuppressWarnings("rawtypes")
@Override
public SpannerOptions build() {
// Set the host of emulator has been set.
@@ -1015,13 +1014,7 @@ public SpannerOptions build() {
this.setHost(emulatorHost);
// Channels are secure by default (via SSL/TLS). For the example we disable TLS to avoid
// needing certificates.
- this.setChannelConfigurator(
- new ApiFunction() {
- @Override
- public ManagedChannelBuilder apply(ManagedChannelBuilder builder) {
- return builder.usePlaintext();
- }
- });
+ this.setChannelConfigurator(ManagedChannelBuilder::usePlaintext);
// As we are using plain text, we should never send any credentials.
this.setCredentials(NoCredentials.getInstance());
}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionContextFutureImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionContextFutureImpl.java
index 3bfcdd4a334..266b75eb139 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionContextFutureImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionContextFutureImpl.java
@@ -91,7 +91,7 @@ class AsyncTransactionStatementImpl extends ForwardingApiFuture
ApiFuture input,
final AsyncTransactionFunction function,
Executor executor) {
- this(SettableApiFuture.create(), txnFuture, input, function, executor);
+ this(SettableApiFuture.create(), txnFuture, input, function, executor);
}
AsyncTransactionStatementImpl(
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionRunnerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionRunnerImpl.java
index 9d21c72410e..2484b9d3c6d 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionRunnerImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/TransactionRunnerImpl.java
@@ -21,7 +21,6 @@
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
-import com.google.api.core.ApiFunction;
import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutures;
import com.google.api.core.SettableApiFuture;
@@ -44,7 +43,6 @@
import com.google.spanner.v1.ExecuteSqlRequest;
import com.google.spanner.v1.ExecuteSqlRequest.QueryMode;
import com.google.spanner.v1.RequestOptions;
-import com.google.spanner.v1.ResultSet;
import com.google.spanner.v1.RollbackRequest;
import com.google.spanner.v1.Transaction;
import com.google.spanner.v1.TransactionOptions;
@@ -575,7 +573,7 @@ public SpannerException onError(SpannerException e, boolean withBeginTransaction
if (exceptionToThrow.getErrorCode() == ErrorCode.ABORTED) {
long delay = -1L;
if (exceptionToThrow instanceof AbortedException) {
- delay = ((AbortedException) exceptionToThrow).getRetryDelayInMillis();
+ delay = exceptionToThrow.getRetryDelayInMillis();
}
if (delay == -1L) {
txnLogger.log(
@@ -671,35 +669,29 @@ public ApiFuture executeUpdateAsync(Statement statement, UpdateOption... o
ApiFuture updateCount =
ApiFutures.transform(
resultSet,
- new ApiFunction() {
- @Override
- public Long apply(ResultSet input) {
- if (!input.hasStats()) {
- throw SpannerExceptionFactory.newSpannerException(
- ErrorCode.INVALID_ARGUMENT,
- "DML response missing stats possibly due to non-DML statement as input");
- }
- if (builder.getTransaction().hasBegin()
- && !(input.getMetadata().hasTransaction()
- && input.getMetadata().getTransaction().getId() != ByteString.EMPTY)) {
- throw SpannerExceptionFactory.newSpannerException(
- ErrorCode.FAILED_PRECONDITION, NO_TRANSACTION_RETURNED_MSG);
- }
- // For standard DML, using the exact row count.
- return input.getStats().getRowCountExact();
+ input -> {
+ if (!input.hasStats()) {
+ throw SpannerExceptionFactory.newSpannerException(
+ ErrorCode.INVALID_ARGUMENT,
+ "DML response missing stats possibly due to non-DML statement as input");
}
+ if (builder.getTransaction().hasBegin()
+ && !(input.getMetadata().hasTransaction()
+ && input.getMetadata().getTransaction().getId() != ByteString.EMPTY)) {
+ throw SpannerExceptionFactory.newSpannerException(
+ ErrorCode.FAILED_PRECONDITION, NO_TRANSACTION_RETURNED_MSG);
+ }
+ // For standard DML, using the exact row count.
+ return input.getStats().getRowCountExact();
},
MoreExecutors.directExecutor());
updateCount =
ApiFutures.catching(
updateCount,
Throwable.class,
- new ApiFunction() {
- @Override
- public Long apply(Throwable input) {
- SpannerException e = SpannerExceptionFactory.asSpannerException(input);
- throw onError(e, builder.getTransaction().hasBegin());
- }
+ input -> {
+ SpannerException e = SpannerExceptionFactory.asSpannerException(input);
+ throw onError(e, builder.getTransaction().hasBegin());
},
MoreExecutors.directExecutor());
updateCount.addListener(
@@ -787,42 +779,36 @@ public ApiFuture batchUpdateAsync(
ApiFuture updateCounts =
ApiFutures.transform(
response,
- new ApiFunction() {
- @Override
- public long[] apply(ExecuteBatchDmlResponse batchDmlResponse) {
- long[] results = new long[batchDmlResponse.getResultSetsCount()];
- for (int i = 0; i < batchDmlResponse.getResultSetsCount(); ++i) {
- results[i] = batchDmlResponse.getResultSets(i).getStats().getRowCountExact();
- if (batchDmlResponse.getResultSets(i).getMetadata().hasTransaction()) {
- onTransactionMetadata(
- batchDmlResponse.getResultSets(i).getMetadata().getTransaction(),
- builder.getTransaction().hasBegin());
- }
- }
- // If one of the DML statements was aborted, we should throw an aborted exception.
- // In all other cases, we should throw a BatchUpdateException.
- if (batchDmlResponse.getStatus().getCode() == Code.ABORTED_VALUE) {
- throw createAbortedExceptionForBatchDml(batchDmlResponse);
- } else if (batchDmlResponse.getStatus().getCode() != 0) {
- throw newSpannerBatchUpdateException(
- ErrorCode.fromRpcStatus(batchDmlResponse.getStatus()),
- batchDmlResponse.getStatus().getMessage(),
- results);
+ batchDmlResponse -> {
+ long[] results = new long[batchDmlResponse.getResultSetsCount()];
+ for (int i = 0; i < batchDmlResponse.getResultSetsCount(); ++i) {
+ results[i] = batchDmlResponse.getResultSets(i).getStats().getRowCountExact();
+ if (batchDmlResponse.getResultSets(i).getMetadata().hasTransaction()) {
+ onTransactionMetadata(
+ batchDmlResponse.getResultSets(i).getMetadata().getTransaction(),
+ builder.getTransaction().hasBegin());
}
- return results;
}
+ // If one of the DML statements was aborted, we should throw an aborted exception.
+ // In all other cases, we should throw a BatchUpdateException.
+ if (batchDmlResponse.getStatus().getCode() == Code.ABORTED_VALUE) {
+ throw createAbortedExceptionForBatchDml(batchDmlResponse);
+ } else if (batchDmlResponse.getStatus().getCode() != 0) {
+ throw newSpannerBatchUpdateException(
+ ErrorCode.fromRpcStatus(batchDmlResponse.getStatus()),
+ batchDmlResponse.getStatus().getMessage(),
+ results);
+ }
+ return results;
},
MoreExecutors.directExecutor());
updateCounts =
ApiFutures.catching(
updateCounts,
Throwable.class,
- new ApiFunction() {
- @Override
- public long[] apply(Throwable input) {
- SpannerException e = SpannerExceptionFactory.asSpannerException(input);
- throw onError(e, builder.getTransaction().hasBegin());
- }
+ input -> {
+ SpannerException e = SpannerExceptionFactory.asSpannerException(input);
+ throw onError(e, builder.getTransaction().hasBegin());
},
MoreExecutors.directExecutor());
updateCounts.addListener(this::decreaseAsyncOperations, MoreExecutors.directExecutor());
@@ -932,7 +918,7 @@ private T runInternal(final TransactionCallable txCallable) {
"Attempt", AttributeValue.longAttributeValue(attempt.longValue())));
shouldRollback = false;
if (e instanceof AbortedException) {
- throw (AbortedException) e;
+ throw e;
}
throw SpannerExceptionFactory.newSpannerException(
ErrorCode.ABORTED, e.getMessage(), e);
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractBaseUnitOfWork.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractBaseUnitOfWork.java
index 3fb3fae8e5d..0e9ca972092 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractBaseUnitOfWork.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AbstractBaseUnitOfWork.java
@@ -16,7 +16,6 @@
package com.google.cloud.spanner.connection;
-import com.google.api.core.ApiFunction;
import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutures;
import com.google.api.gax.grpc.GrpcCallContext;
@@ -140,8 +139,8 @@ ApiFuture executeStatementAsync(
callable,
InterceptorsUsage.INVOKE_INTERCEPTORS,
applyStatementTimeoutToMethod == null
- ? Collections.>emptySet()
- : ImmutableList.>of(applyStatementTimeoutToMethod));
+ ? Collections.emptySet()
+ : ImmutableList.of(applyStatementTimeoutToMethod));
}
ApiFuture executeStatementAsync(
@@ -228,12 +227,9 @@ public ApiCallContext configure(
ApiFutures.catching(
f,
Throwable.class,
- new ApiFunction() {
- @Override
- public T apply(Throwable input) {
- input.addSuppressed(caller);
- throw SpannerExceptionFactory.asSpannerException(input);
- }
+ input -> {
+ input.addSuppressed(caller);
+ throw SpannerExceptionFactory.asSpannerException(input);
},
MoreExecutors.directExecutor());
synchronized (this) {
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AsyncStatementResultImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AsyncStatementResultImpl.java
index 7d0b0fc3b5e..930a611327c 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AsyncStatementResultImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/AsyncStatementResultImpl.java
@@ -46,8 +46,7 @@ static AsyncStatementResult of(
clientSideStatementResult.getClientSideStatementType());
} else {
return new AsyncStatementResultImpl(
- clientSideStatementResult.getClientSideStatementType(),
- ApiFutures.immediateFuture(null));
+ clientSideStatementResult.getClientSideStatementType(), ApiFutures.immediateFuture(null));
}
}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ChecksumResultSet.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ChecksumResultSet.java
index f2d1ba548e4..01431f7a61a 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ChecksumResultSet.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ChecksumResultSet.java
@@ -93,7 +93,7 @@ class ChecksumResultSet extends ReplaceableForwardingResultSet implements Retria
/** Simple {@link Callable} for calling {@link ResultSet#next()} */
private final class NextCallable implements Callable {
@Override
- public Boolean call() throws Exception {
+ public Boolean call() {
transaction
.getStatementExecutor()
.invokeInterceptors(
@@ -342,7 +342,7 @@ private void funnelValue(Code type, T value, PrimitiveSink into) {
into.putDouble((Double) value);
break;
case NUMERIC:
- String stringRepresentation = ((BigDecimal) value).toString();
+ String stringRepresentation = value.toString();
into.putInt(stringRepresentation.length());
into.putUnencodedChars(stringRepresentation);
break;
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java
index 8dd0a10a4dc..fba857ead42 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ClientSideStatementValueConverters.java
@@ -38,14 +38,7 @@ private static final class CaseInsensitiveEnumMap> {
/** Create an map using the name of the enum elements as keys. */
private CaseInsensitiveEnumMap(Class elementType) {
- this(
- elementType,
- new Function() {
- @Override
- public String apply(E input) {
- return input.name();
- }
- });
+ this(elementType, Enum::name);
}
/** Create a map using the specific function to get the key per enum value. */
@@ -231,14 +224,7 @@ public String convert(String value) {
static class TransactionModeConverter
implements ClientSideStatementValueConverter {
private final CaseInsensitiveEnumMap values =
- new CaseInsensitiveEnumMap<>(
- TransactionMode.class,
- new Function() {
- @Override
- public String apply(TransactionMode input) {
- return input.getStatementString();
- }
- });
+ new CaseInsensitiveEnumMap<>(TransactionMode.class, TransactionMode::getStatementString);
public TransactionModeConverter(String allowedValues) {}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java
index 6f956640c8d..345c881d294 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionImpl.java
@@ -18,7 +18,6 @@
import static com.google.cloud.spanner.SpannerApiFutures.get;
-import com.google.api.core.ApiFunction;
import com.google.api.core.ApiFuture;
import com.google.api.core.ApiFutures;
import com.google.cloud.Timestamp;
@@ -238,8 +237,7 @@ static UnitOfWorkType of(TransactionMode transactionMode) {
Preconditions.checkNotNull(spannerPool);
Preconditions.checkNotNull(ddlClient);
Preconditions.checkNotNull(dbClient);
- this.statementExecutor =
- new StatementExecutor(Collections.emptyList());
+ this.statementExecutor = new StatementExecutor(Collections.emptyList());
this.spannerPool = spannerPool;
this.options = options;
this.spanner = spannerPool.getSpanner(options, this);
@@ -287,14 +285,7 @@ public ApiFuture closeAsync() {
leakedException = null;
spannerPool.removeConnection(options, this);
return ApiFutures.transform(
- ApiFutures.allAsList(futures),
- new ApiFunction, Void>() {
- @Override
- public Void apply(List input) {
- return null;
- }
- },
- MoreExecutors.directExecutor());
+ ApiFutures.allAsList(futures), ignored -> null, MoreExecutors.directExecutor());
}
return ApiFutures.immediateFuture(null);
}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java
index 8e04494f6b9..9c1e4073908 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java
@@ -246,7 +246,7 @@ public String[] getValidValues() {
private static final Set INTERNAL_PROPERTIES =
Collections.unmodifiableSet(
new HashSet<>(
- Arrays.asList(
+ Collections.singletonList(
ConnectionProperty.createStringProperty(USER_AGENT_PROPERTY_NAME, ""))));
private static final Set INTERNAL_VALID_PROPERTIES =
Sets.union(VALID_PROPERTIES, INTERNAL_PROPERTIES);
@@ -671,12 +671,12 @@ static String parseOptimizerVersion(String uri) {
@VisibleForTesting
static boolean parseReturnCommitStats(String uri) {
String value = parseUriProperty(uri, "returnCommitStats");
- return value != null ? Boolean.parseBoolean(value) : false;
+ return Boolean.parseBoolean(value);
}
static boolean parseAutoConfigEmulator(String uri) {
String value = parseUriProperty(uri, "autoConfigEmulator");
- return value != null ? Boolean.parseBoolean(value) : false;
+ return Boolean.parseBoolean(value);
}
@VisibleForTesting
@@ -710,14 +710,13 @@ static String checkValidProperties(String uri) {
}
}
if (lenient) {
- return String.format(
- "Invalid properties found in connection URI: %s", invalidProperties.toString());
+ return String.format("Invalid properties found in connection URI: %s", invalidProperties);
} else {
Preconditions.checkArgument(
invalidProperties.isEmpty(),
String.format(
"Invalid properties found in connection URI. Add lenient=true to the connection string to ignore unknown properties. Invalid properties: %s",
- invalidProperties.toString()));
+ invalidProperties));
return null;
}
}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DdlClient.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DdlClient.java
index 2a901950334..f3c9cdba037 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DdlClient.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/DdlClient.java
@@ -21,7 +21,7 @@
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata;
-import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
/**
@@ -81,7 +81,7 @@ private DdlClient(Builder builder) {
/** Execute a single DDL statement. */
OperationFuture executeDdl(String ddl) {
- return executeDdl(Arrays.asList(ddl));
+ return executeDdl(Collections.singletonList(ddl));
}
/** Execute a list of DDL statements as one operation. */
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/EmulatorUtil.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/EmulatorUtil.java
index 9ffa36c0a54..ee291642031 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/EmulatorUtil.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/EmulatorUtil.java
@@ -71,7 +71,7 @@ static void maybeCreateInstanceAndDatabase(Spanner spanner, DatabaseId databaseI
.createDatabase(
databaseId.getInstanceId().getInstance(),
databaseId.getDatabase(),
- ImmutableList.of())
+ ImmutableList.of())
.get();
} catch (ExecutionException executionException) {
SpannerException spannerException = (SpannerException) executionException.getCause();
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java
index feb8fa29943..6bf3b120a05 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ReadWriteTransaction.java
@@ -45,7 +45,6 @@
import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.spanner.v1.SpannerGrpc;
-import io.grpc.MethodDescriptor;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
@@ -342,7 +341,7 @@ public ApiFuture executeQueryAsync(
},
// ignore interceptors here as they are invoked in the Callable.
InterceptorsUsage.IGNORE_INTERCEPTORS,
- ImmutableList.>of(SpannerGrpc.getExecuteStreamingSqlMethod()));
+ ImmutableList.of(SpannerGrpc.getExecuteStreamingSqlMethod()));
} else {
res = super.executeQueryAsync(statement, analyzeMode, options);
}
@@ -397,7 +396,7 @@ public ApiFuture executeUpdateAsync(final ParsedStatement update) {
},
// ignore interceptors here as they are invoked in the Callable.
InterceptorsUsage.IGNORE_INTERCEPTORS,
- ImmutableList.>of(SpannerGrpc.getExecuteSqlMethod()));
+ ImmutableList.of(SpannerGrpc.getExecuteSqlMethod()));
} else {
res =
executeStatementAsync(
@@ -480,7 +479,7 @@ public ApiFuture executeBatchUpdateAsync(Iterable updat
},
// ignore interceptors here as they are invoked in the Callable.
InterceptorsUsage.IGNORE_INTERCEPTORS,
- ImmutableList.>of(SpannerGrpc.getExecuteBatchDmlMethod()));
+ ImmutableList.of(SpannerGrpc.getExecuteBatchDmlMethod()));
} else {
res =
executeStatementAsync(
@@ -535,7 +534,7 @@ public ApiFuture writeAsync(Iterable mutations) {
private final Callable commitCallable =
new Callable() {
@Override
- public Void call() throws Exception {
+ public Void call() {
checkAborted();
get(txContextFuture).buffer(mutations);
txManager.commit();
@@ -579,7 +578,7 @@ public ApiFuture commitAsync() {
}
},
InterceptorsUsage.IGNORE_INTERCEPTORS,
- ImmutableList.>of(SpannerGrpc.getCommitMethod()));
+ ImmutableList.of(SpannerGrpc.getCommitMethod()));
} else {
res =
executeStatementAsync(
@@ -837,7 +836,7 @@ private void invokeTransactionRetryListenersOnFinish(RetryResult result) {
private final Callable rollbackCallable =
new Callable() {
@Override
- public Void call() throws Exception {
+ public Void call() {
try {
if (state != UnitOfWorkState.ABORTED) {
// Make sure the transaction has actually started before we try to rollback.
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/RetriableBatchUpdate.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/RetriableBatchUpdate.java
index 6fa07d748f7..74925a2e3f7 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/RetriableBatchUpdate.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/RetriableBatchUpdate.java
@@ -44,7 +44,7 @@ final class RetriableBatchUpdate implements RetriableStatement {
@Override
public void retry(AbortedException aborted) throws AbortedException {
- long[] newCount = null;
+ long[] newCount;
try {
transaction
.getStatementExecutor()
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SingleUseTransaction.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SingleUseTransaction.java
index 61f9bedb28e..5fdaf877d83 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SingleUseTransaction.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SingleUseTransaction.java
@@ -37,14 +37,12 @@
import com.google.cloud.spanner.TransactionRunner;
import com.google.cloud.spanner.connection.StatementParser.ParsedStatement;
import com.google.cloud.spanner.connection.StatementParser.StatementType;
-import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.google.spanner.admin.database.v1.DatabaseAdminGrpc;
import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata;
import com.google.spanner.v1.SpannerGrpc;
-import io.grpc.MethodDescriptor;
import java.util.concurrent.Callable;
/**
@@ -356,8 +354,7 @@ private ApiFuture executeTransactionalUpdateAsync(final ParsedStatement up
return executeStatementAsync(
update,
callable,
- ImmutableList.>of(
- SpannerGrpc.getExecuteSqlMethod(), SpannerGrpc.getCommitMethod()));
+ ImmutableList.of(SpannerGrpc.getExecuteSqlMethod(), SpannerGrpc.getCommitMethod()));
}
private ApiFuture executePartitionedUpdateAsync(final ParsedStatement update) {
@@ -385,14 +382,7 @@ private ApiFuture executeTransactionalBatchUpdateAsync(
try {
long[] res =
transaction.batchUpdate(
- Iterables.transform(
- updates,
- new Function() {
- @Override
- public Statement apply(ParsedStatement input) {
- return input.getStatement();
- }
- }));
+ Iterables.transform(updates, ParsedStatement::getStatement));
state = UnitOfWorkState.COMMITTED;
return res;
} catch (Throwable t) {
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java
index 976f69e5934..3d433adf87d 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/SpannerPool.java
@@ -16,7 +16,6 @@
package com.google.cloud.spanner.connection;
-import com.google.api.core.ApiFunction;
import com.google.cloud.NoCredentials;
import com.google.cloud.spanner.ErrorCode;
import com.google.cloud.spanner.SessionPoolOptions;
@@ -41,7 +40,6 @@
import java.util.Objects;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ThreadFactory;
import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -64,12 +62,9 @@ public class SpannerPool {
private static final Logger logger = Logger.getLogger(SpannerPool.class.getName());
private static final Function DEFAULT_CLOSE_FUNCTION =
- new Function() {
- @Override
- public Void apply(Spanner spanner) {
- spanner.close();
- return null;
- }
+ spanner -> {
+ spanner.close();
+ return null;
};
/**
@@ -305,13 +300,10 @@ private void initialize() {
if (this.closeSpannerAfterMillisecondsUnused > 0) {
this.closerService =
Executors.newSingleThreadScheduledExecutor(
- new ThreadFactory() {
- @Override
- public Thread newThread(Runnable r) {
- Thread thread = new Thread(r, "close-unused-spanners-worker");
- thread.setDaemon(true);
- return thread;
- }
+ runnable -> {
+ Thread thread = new Thread(runnable, "close-unused-spanners-worker");
+ thread.setDaemon(true);
+ return thread;
});
this.closerService.scheduleAtFixedRate(
new CloseUnusedSpannersRunnable(),
@@ -322,7 +314,6 @@ public Thread newThread(Runnable r) {
initialized = true;
}
- @SuppressWarnings("rawtypes")
@VisibleForTesting
Spanner createSpanner(SpannerPoolKey key, ConnectionOptions options) {
SpannerOptions.Builder builder = SpannerOptions.newBuilder();
@@ -339,14 +330,7 @@ Spanner createSpanner(SpannerPoolKey key, ConnectionOptions options) {
// Credentials may not be sent over a plain text channel.
builder.setCredentials(NoCredentials.getInstance());
// Set a custom channel configurator to allow http instead of https.
- builder.setChannelConfigurator(
- new ApiFunction() {
- @Override
- public ManagedChannelBuilder apply(ManagedChannelBuilder input) {
- input.usePlaintext();
- return input;
- }
- });
+ builder.setChannelConfigurator(ManagedChannelBuilder::usePlaintext);
}
if (options.getConfigurator() != null) {
options.getConfigurator().configure(builder);
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementResultImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementResultImpl.java
index 37e8d7e5a07..58a1f7ae1c0 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementResultImpl.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/StatementResultImpl.java
@@ -24,7 +24,7 @@
import com.google.cloud.spanner.Struct;
import com.google.cloud.spanner.Type;
import com.google.cloud.spanner.Type.StructField;
-import java.util.Arrays;
+import java.util.Collections;
/** Implementation of {@link StatementResult} */
class StatementResultImpl implements StatementResult {
@@ -77,7 +77,7 @@ static StatementResult resultSet(
return of(
ResultSets.forRows(
Type.struct(StructField.of(name, Type.bool())),
- Arrays.asList(Struct.newBuilder().set(name).to(value).build())),
+ Collections.singletonList(Struct.newBuilder().set(name).to(value).build())),
clientSideStatementType);
}
@@ -90,7 +90,7 @@ static StatementResult resultSet(
return of(
ResultSets.forRows(
Type.struct(StructField.of(name, Type.int64())),
- Arrays.asList(Struct.newBuilder().set(name).to(value).build())),
+ Collections.singletonList(Struct.newBuilder().set(name).to(value).build())),
clientSideStatementType);
}
@@ -103,7 +103,7 @@ static StatementResult resultSet(
return of(
ResultSets.forRows(
Type.struct(StructField.of(name, Type.array(Type.int64()))),
- Arrays.asList(Struct.newBuilder().set(name).toInt64Array(values).build())),
+ Collections.singletonList(Struct.newBuilder().set(name).toInt64Array(values).build())),
clientSideStatementType);
}
@@ -116,7 +116,7 @@ static StatementResult resultSet(
return of(
ResultSets.forRows(
Type.struct(StructField.of(name, Type.string())),
- Arrays.asList(Struct.newBuilder().set(name).to(value).build())),
+ Collections.singletonList(Struct.newBuilder().set(name).to(value).build())),
clientSideStatementType);
}
@@ -130,7 +130,7 @@ static StatementResult resultSet(
return of(
ResultSets.forRows(
Type.struct(StructField.of(name, Type.string())),
- Arrays.asList(Struct.newBuilder().set(name).to(value.toString()).build())),
+ Collections.singletonList(Struct.newBuilder().set(name).to(value.toString()).build())),
clientSideStatementType);
}
@@ -143,7 +143,7 @@ static StatementResult resultSet(
return of(
ResultSets.forRows(
Type.struct(StructField.of(name, Type.timestamp())),
- Arrays.asList(Struct.newBuilder().set(name).to(value).build())),
+ Collections.singletonList(Struct.newBuilder().set(name).to(value).build())),
clientSideStatementType);
}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java
index 3f13af45bb4..29ee44bede3 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java
@@ -658,7 +658,7 @@ private final class OperationFutureCallable call() throws Exception {
+ public OperationFuture call() {
acquireAdministrativeRequestsRateLimiter();
return runWithRetryOnAdministrativeRequestsExceeded(
@@ -701,8 +701,7 @@ private interface OperationsLister {
private Operation mostRecentOperation(
OperationsLister lister,
Function getStartTimeFunction,
- Timestamp initialCallTime)
- throws InvalidProtocolBufferException {
+ Timestamp initialCallTime) {
Operation res = null;
Timestamp currMaxStartTime = null;
String nextPageToken = null;
@@ -981,38 +980,30 @@ public OperationFuture createDatabase(
request,
DatabaseAdminGrpc.getCreateDatabaseMethod(),
instanceName,
- new OperationsLister() {
- @Override
- public Paginated listOperations(String nextPageToken) {
- return listDatabaseOperations(
+ nextPageToken ->
+ listDatabaseOperations(
instanceName,
0,
String.format(
"(metadata.@type:type.googleapis.com/%s) AND (name:%s/operations/)",
CreateDatabaseMetadata.getDescriptor().getFullName(),
String.format("%s/databases/%s", instanceName, databaseId)),
- nextPageToken);
- }
- },
- new Function() {
- @Override
- public Timestamp apply(Operation input) {
- if (input.getDone() && input.hasResponse()) {
- try {
- Timestamp createTime =
- input.getResponse().unpack(Database.class).getCreateTime();
- if (Timestamp.getDefaultInstance().equals(createTime)) {
- // Create time was not returned by the server (proto objects never return
- // null, instead they return the default instance). Return null from this
- // method to indicate that there is no known create time.
- return null;
- }
- } catch (InvalidProtocolBufferException e) {
+ nextPageToken),
+ input -> {
+ if (input.getDone() && input.hasResponse()) {
+ try {
+ Timestamp createTime = input.getResponse().unpack(Database.class).getCreateTime();
+ if (Timestamp.getDefaultInstance().equals(createTime)) {
+ // Create time was not returned by the server (proto objects never return
+ // null, instead they return the default instance). Return null from this
+ // method to indicate that there is no known create time.
return null;
}
+ } catch (InvalidProtocolBufferException e) {
+ return null;
}
- return null;
}
+ return null;
});
return RetryHelper.runWithRetries(
callable,
@@ -1152,31 +1143,24 @@ public OperationFuture createBackup(
request,
DatabaseAdminGrpc.getCreateBackupMethod(),
instanceName,
- new OperationsLister() {
- @Override
- public Paginated listOperations(String nextPageToken) {
- return listBackupOperations(
+ nextPageToken ->
+ listBackupOperations(
instanceName,
0,
String.format(
"(metadata.@type:type.googleapis.com/%s) AND (metadata.name:%s)",
CreateBackupMetadata.getDescriptor().getFullName(),
String.format("%s/backups/%s", instanceName, backupId)),
- nextPageToken);
- }
- },
- new Function() {
- @Override
- public Timestamp apply(Operation input) {
- try {
- return input
- .getMetadata()
- .unpack(CreateBackupMetadata.class)
- .getProgress()
- .getStartTime();
- } catch (InvalidProtocolBufferException e) {
- return null;
- }
+ nextPageToken),
+ input -> {
+ try {
+ return input
+ .getMetadata()
+ .unpack(CreateBackupMetadata.class)
+ .getProgress()
+ .getStartTime();
+ } catch (InvalidProtocolBufferException e) {
+ return null;
}
});
return RetryHelper.runWithRetries(
@@ -1211,31 +1195,24 @@ public OperationFuture restoreDatabase(final
requestBuilder.build(),
DatabaseAdminGrpc.getRestoreDatabaseMethod(),
databaseInstanceName,
- new OperationsLister() {
- @Override
- public Paginated listOperations(String nextPageToken) {
- return listDatabaseOperations(
+ nextPageToken ->
+ listDatabaseOperations(
databaseInstanceName,
0,
String.format(
"(metadata.@type:type.googleapis.com/%s) AND (metadata.name:%s)",
RestoreDatabaseMetadata.getDescriptor().getFullName(),
String.format("%s/databases/%s", databaseInstanceName, databaseId)),
- nextPageToken);
- }
- },
- new Function() {
- @Override
- public Timestamp apply(Operation input) {
- try {
- return input
- .getMetadata()
- .unpack(RestoreDatabaseMetadata.class)
- .getProgress()
- .getStartTime();
- } catch (InvalidProtocolBufferException e) {
- return null;
- }
+ nextPageToken),
+ input -> {
+ try {
+ return input
+ .getMetadata()
+ .unpack(RestoreDatabaseMetadata.class)
+ .getProgress()
+ .getStartTime();
+ } catch (InvalidProtocolBufferException e) {
+ return null;
}
});
return RetryHelper.runWithRetries(
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProvider.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProvider.java
index 7bbe6a31a1e..7f9a32765e0 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProvider.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerMetadataProvider.java
@@ -18,7 +18,7 @@
import com.google.common.collect.ImmutableMap;
import io.grpc.Metadata;
import io.grpc.Metadata.Key;
-import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
@@ -61,7 +61,8 @@ Map> newExtraHeaders(
return ImmutableMap.>builder()
.put(
resourceHeaderKey,
- Arrays.asList(getResourceHeaderValue(resourceTokenTemplate, defaultResourceToken)))
+ Collections.singletonList(
+ getResourceHeaderValue(resourceTokenTemplate, defaultResourceToken)))
.build();
}
diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java
index 9f411ebcc33..cce92e0f378 100644
--- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java
+++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerRpc.java
@@ -123,7 +123,7 @@ final class Paginated {
public Paginated(@Nullable Iterable results, @Nullable String nextPageToken) {
// The generated HTTP client has null members when no results are present, rather than an
// empty list. Implicitly convert to an empty list to minimize the risk of NPEs.
- this.results = (results == null) ? ImmutableList.of() : results;
+ this.results = (results == null) ? ImmutableList.of() : results;
this.nextPageToken =
(nextPageToken == null || nextPageToken.isEmpty()) ? null : nextPageToken;
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractAsyncTransactionTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractAsyncTransactionTest.java
index bf76ea4f392..2296b2d4d6a 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractAsyncTransactionTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractAsyncTransactionTest.java
@@ -30,7 +30,6 @@
import static com.google.cloud.spanner.MockSpannerTestUtil.UPDATE_COUNT;
import static com.google.cloud.spanner.MockSpannerTestUtil.UPDATE_STATEMENT;
-import com.google.api.core.ApiFunction;
import com.google.cloud.NoCredentials;
import com.google.cloud.spanner.MockSpannerServiceImpl.StatementResult;
import io.grpc.ManagedChannelBuilder;
@@ -89,19 +88,12 @@ public static void teardown() throws Exception {
}
@Before
- public void before() throws Exception {
+ public void before() {
String endpoint = address.getHostString() + ":" + server.getPort();
spanner =
SpannerOptions.newBuilder()
.setProjectId(TEST_PROJECT)
- .setChannelConfigurator(
- new ApiFunction() {
- @Override
- public ManagedChannelBuilder apply(ManagedChannelBuilder input) {
- input.usePlaintext();
- return input;
- }
- })
+ .setChannelConfigurator(ManagedChannelBuilder::usePlaintext)
.setHost("https://" + endpoint)
.setCredentials(NoCredentials.getInstance())
.setSessionPoolOption(SessionPoolOptions.newBuilder().setFailOnSessionLeak().build())
@@ -122,7 +114,7 @@ public ManagedChannelBuilder apply(ManagedChannelBuilder input) {
}
@After
- public void after() throws Exception {
+ public void after() {
spanner.close();
spannerWithEmptySessionPool.close();
mockSpanner.removeAllExecutionTimes();
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncResultSetImplStressTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncResultSetImplStressTest.java
index ae59b480423..ea01fecc269 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncResultSetImplStressTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncResultSetImplStressTest.java
@@ -24,9 +24,7 @@
import com.google.api.gax.core.ExecutorProvider;
import com.google.cloud.spanner.AsyncResultSet.CallbackResponse;
import com.google.cloud.spanner.AsyncResultSet.CursorState;
-import com.google.cloud.spanner.AsyncResultSet.ReadyCallback;
import com.google.cloud.spanner.Type.StructField;
-import com.google.common.base.Function;
import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.MoreExecutors;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
@@ -170,20 +168,13 @@ private static ScheduledExecutorService createExecService(int threadCount) {
}
@Test
- public void toList() throws Exception {
+ public void toList() {
ExecutorProvider executorProvider = SpannerOptions.createDefaultAsyncExecutorProvider();
for (int bufferSize = 1; bufferSize < resultSetSize * 2; bufferSize *= 2) {
for (int i = 0; i < TEST_RUNS; i++) {
try (AsyncResultSetImpl impl =
new AsyncResultSetImpl(executorProvider, createResultSet(), bufferSize)) {
- List list =
- impl.toList(
- new Function() {
- @Override
- public Row apply(StructReader input) {
- return Row.create(input);
- }
- });
+ List list = impl.toList(Row::create);
assertThat(list).containsExactlyElementsIn(createExpectedRows());
}
}
@@ -191,21 +182,14 @@ public Row apply(StructReader input) {
}
@Test
- public void toListWithErrors() throws Exception {
+ public void toListWithErrors() {
ExecutorProvider executorProvider = SpannerOptions.createDefaultAsyncExecutorProvider();
for (int bufferSize = 1; bufferSize < resultSetSize * 2; bufferSize *= 2) {
for (int i = 0; i < TEST_RUNS; i++) {
try (AsyncResultSetImpl impl =
new AsyncResultSetImpl(
executorProvider, createResultSetWithErrors(1.0 / resultSetSize), bufferSize)) {
- List list =
- impl.toList(
- new Function() {
- @Override
- public Row apply(StructReader input) {
- return Row.create(input);
- }
- });
+ List list = impl.toList(Row::create);
assertThat(list).containsExactlyElementsIn(createExpectedRows());
} catch (SpannerException e) {
assertThat(e.getErrorCode()).isEqualTo(ErrorCode.INVALID_ARGUMENT);
@@ -224,15 +208,7 @@ public void asyncToList() throws Exception {
for (int i = 0; i < TEST_RUNS; i++) {
try (AsyncResultSet impl =
new AsyncResultSetImpl(executorProvider, createResultSet(), bufferSize)) {
- futures.add(
- impl.toListAsync(
- new Function() {
- @Override
- public Row apply(StructReader input) {
- return Row.create(input);
- }
- },
- executor));
+ futures.add(impl.toListAsync(Row::create, executor));
}
}
List> lists = ApiFutures.allAsList(futures).get();
@@ -256,26 +232,23 @@ public void consume() throws Exception {
final SettableApiFuture> future = SettableApiFuture.create();
try (AsyncResultSetImpl impl =
new AsyncResultSetImpl(executorProvider, createResultSet(), bufferSize)) {
- final ImmutableList.Builder builder = ImmutableList.builder();
+ final ImmutableList.Builder builder = ImmutableList.builder();
impl.setCallback(
executor,
- new ReadyCallback() {
- @Override
- public CallbackResponse cursorReady(AsyncResultSet resultSet) {
- // Randomly do something with the received data or not. Not calling tryNext() in
- // the onDataReady is not 'normal', but users may do it, and the result set
- // should be able to handle that.
- if (random.nextBoolean()) {
- CursorState state;
- while ((state = resultSet.tryNext()) == CursorState.OK) {
- builder.add(Row.create(resultSet));
- }
- if (state == CursorState.DONE) {
- future.set(builder.build());
- }
+ resultSet -> {
+ // Randomly do something with the received data or not. Not calling tryNext() in
+ // the onDataReady is not 'normal', but users may do it, and the result set
+ // should be able to handle that.
+ if (random.nextBoolean()) {
+ CursorState state;
+ while ((state = resultSet.tryNext()) == CursorState.OK) {
+ builder.add(Row.create(resultSet));
+ }
+ if (state == CursorState.DONE) {
+ future.set(builder.build());
}
- return CallbackResponse.CONTINUE;
}
+ return CallbackResponse.CONTINUE;
});
assertThat(future.get()).containsExactlyElementsIn(createExpectedRows());
}
@@ -299,23 +272,20 @@ public void returnDoneBeforeEnd() throws Exception {
ApiFuture res =
impl.setCallback(
executor,
- new ReadyCallback() {
- @Override
- public CallbackResponse cursorReady(AsyncResultSet resultSet) {
- switch (resultSet.tryNext()) {
- case DONE:
- return CallbackResponse.DONE;
- case NOT_READY:
- return random.nextBoolean()
- ? CallbackResponse.DONE
- : CallbackResponse.CONTINUE;
- case OK:
- return random.nextInt(resultSetSize) <= 2
- ? CallbackResponse.DONE
- : CallbackResponse.CONTINUE;
- default:
- throw new IllegalStateException();
- }
+ resultSet -> {
+ switch (resultSet.tryNext()) {
+ case DONE:
+ return CallbackResponse.DONE;
+ case NOT_READY:
+ return random.nextBoolean()
+ ? CallbackResponse.DONE
+ : CallbackResponse.CONTINUE;
+ case OK:
+ return random.nextInt(resultSetSize) <= 2
+ ? CallbackResponse.DONE
+ : CallbackResponse.CONTINUE;
+ default:
+ throw new IllegalStateException();
}
});
assertThat(res.get(10L, TimeUnit.SECONDS)).isNull();
@@ -342,25 +312,22 @@ public void pauseResume() throws Exception {
try (AsyncResultSetImpl impl =
new AsyncResultSetImpl(executorProvider, createResultSet(), bufferSize)) {
resultSets.add(impl);
- final ImmutableList.Builder builder = ImmutableList.builder();
+ final ImmutableList.Builder builder = ImmutableList.builder();
impl.setCallback(
executor,
- new ReadyCallback() {
- @Override
- public CallbackResponse cursorReady(AsyncResultSet resultSet) {
- CursorState state;
- while ((state = resultSet.tryNext()) == CursorState.OK) {
- builder.add(Row.create(resultSet));
- // Randomly request the iterator to pause.
- if (random.nextBoolean()) {
- return CallbackResponse.PAUSE;
- }
- }
- if (state == CursorState.DONE) {
- future.set(builder.build());
+ resultSet -> {
+ CursorState state;
+ while ((state = resultSet.tryNext()) == CursorState.OK) {
+ builder.add(Row.create(resultSet));
+ // Randomly request the iterator to pause.
+ if (random.nextBoolean()) {
+ return CallbackResponse.PAUSE;
}
- return CallbackResponse.CONTINUE;
}
+ if (state == CursorState.DONE) {
+ future.set(builder.build());
+ }
+ return CallbackResponse.CONTINUE;
});
}
}
@@ -404,29 +371,26 @@ public void cancel() throws Exception {
try (AsyncResultSetImpl impl =
new AsyncResultSetImpl(executorProvider, createResultSet(), bufferSize)) {
resultSets.add(impl);
- final ImmutableList.Builder builder = ImmutableList.builder();
+ final ImmutableList.Builder builder = ImmutableList.builder();
impl.setCallback(
executor,
- new ReadyCallback() {
- @Override
- public CallbackResponse cursorReady(AsyncResultSet resultSet) {
- try {
- CursorState state;
- while ((state = resultSet.tryNext()) == CursorState.OK) {
- builder.add(Row.create(resultSet));
- // Randomly request the iterator to pause.
- if (random.nextBoolean()) {
- return CallbackResponse.PAUSE;
- }
- }
- if (state == CursorState.DONE) {
- future.set(builder.build());
+ resultSet -> {
+ try {
+ CursorState state;
+ while ((state = resultSet.tryNext()) == CursorState.OK) {
+ builder.add(Row.create(resultSet));
+ // Randomly request the iterator to pause.
+ if (random.nextBoolean()) {
+ return CallbackResponse.PAUSE;
}
- return CallbackResponse.CONTINUE;
- } catch (SpannerException e) {
- future.setException(e);
- throw e;
}
+ if (state == CursorState.DONE) {
+ future.set(builder.build());
+ }
+ return CallbackResponse.CONTINUE;
+ } catch (SpannerException e) {
+ future.setException(e);
+ throw e;
}
});
}
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncResultSetImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncResultSetImplTest.java
index 682802d85eb..28a46d8951d 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncResultSetImplTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncResultSetImplTest.java
@@ -72,16 +72,19 @@ public void close() {
rs.setCallback(mock(Executor.class), mock(ReadyCallback.class));
fail("missing expected exception");
} catch (IllegalStateException e) {
+ // Expected exception
}
try {
rs.toList(mock(Function.class));
fail("missing expected exception");
} catch (IllegalStateException e) {
+ // Expected exception
}
try {
rs.toListAsync(mock(Function.class), mock(Executor.class));
fail("missing expected exception");
} catch (IllegalStateException e) {
+ // Expected exception
}
// The following methods are allowed on a closed result set.
@@ -117,14 +120,7 @@ public void toList() {
when(delegate.getCurrentRowAsStruct()).thenReturn(mock(Struct.class));
try (AsyncResultSetImpl rs =
new AsyncResultSetImpl(simpleProvider, delegate, AsyncResultSetImpl.DEFAULT_BUFFER_SIZE)) {
- List