diff --git a/.github/workflows/update_generation_config.yaml b/.github/workflows/update_generation_config.yaml
index 59e39834dd0..a7e14bb483c 100644
--- a/.github/workflows/update_generation_config.yaml
+++ b/.github/workflows/update_generation_config.yaml
@@ -26,7 +26,7 @@ jobs:
# the branch into which the pull request is merged
base_branch: main
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.CLOUD_JAVA_BOT_TOKEN }}
diff --git a/.kokoro/build.sh b/.kokoro/build.sh
index 110835b464f..eb66097a4f1 100755
--- a/.kokoro/build.sh
+++ b/.kokoro/build.sh
@@ -104,7 +104,7 @@ integration)
verify
RETURN_CODE=$?
;;
-integration-directpath-enabled)
+integration-regular-sessions)
mvn -B ${INTEGRATION_TEST_ARGS} \
-ntp \
-Penable-integration-tests \
@@ -113,13 +113,13 @@ integration-directpath-enabled)
-Dclirr.skip=true \
-Denforcer.skip=true \
-Dmaven.main.skip=true \
- -Dspanner.testenv.instance=projects/span-cloud-testing/instances/spanner-java-client-directpath \
- -Dspanner.gce.config.project_id=span-cloud-testing \
+ -Dspanner.gce.config.project_id=gcloud-devel \
+ -Dspanner.testenv.instance=projects/gcloud-devel/instances/java-client-integration-tests-regular-sessions \
-fae \
verify
RETURN_CODE=$?
;;
-integration-multiplexed-sessions-enabled)
+integration-directpath-enabled)
mvn -B ${INTEGRATION_TEST_ARGS} \
-ntp \
-Penable-integration-tests \
@@ -129,7 +129,7 @@ integration-multiplexed-sessions-enabled)
-Denforcer.skip=true \
-Dmaven.main.skip=true \
-Dspanner.gce.config.project_id=gcloud-devel \
- -Dspanner.testenv.instance=projects/gcloud-devel/instances/java-client-integration-tests-multiplexed-sessions \
+ -Dspanner.testenv.instance=projects/gcloud-devel/instances/java-client-integration-tests-directpath \
-fae \
verify
RETURN_CODE=$?
@@ -184,12 +184,14 @@ integration-cloud-staging|integration-cloud-staging-directpath-enabled)
;;
graalvm)
# Run Unit and Integration Tests with Native Image
- mvn test -Pnative -Penable-integration-tests -Dspanner.gce.config.project_id=gcloud-devel -Dspanner.testenv.instance=projects/gcloud-devel/instances/java-client-integration-tests
+ # NOTE: These integration tests run on the Emulator.
+ mvn test -Pnative -Penable-integration-tests -Dspanner.gce.config.project_id=gcloud-devel -Dspanner.testenv.instance=projects/gcloud-devel/instances/java-client-integration-tests-graalvm
RETURN_CODE=$?
;;
graalvm17)
# Run Unit and Integration Tests with Native Image
- mvn test -Pnative -Penable-integration-tests -Dspanner.gce.config.project_id=gcloud-devel -Dspanner.testenv.instance=projects/gcloud-devel/instances/java-client-integration-tests
+ # NOTE: These integration tests run on the Emulator.
+ mvn test -Pnative -Penable-integration-tests -Dspanner.gce.config.project_id=gcloud-devel -Dspanner.testenv.instance=projects/gcloud-devel/instances/java-client-integration-tests-graalvm
RETURN_CODE=$?
;;
slowtests)
diff --git a/.kokoro/presubmit/integration-directpath-enabled.cfg b/.kokoro/presubmit/integration-directpath-enabled.cfg
index ceb3bddfa70..1a921363936 100644
--- a/.kokoro/presubmit/integration-directpath-enabled.cfg
+++ b/.kokoro/presubmit/integration-directpath-enabled.cfg
@@ -24,12 +24,12 @@ env_vars: {
env_vars: {
key: "GOOGLE_APPLICATION_CREDENTIALS"
- value: "secret_manager/java-client-testing"
+ value: "secret_manager/java-it-service-account"
}
env_vars: {
key: "SECRET_MANAGER_KEYS"
- value: "java-client-testing"
+ value: "java-it-service-account"
}
env_vars: {
diff --git a/.kokoro/presubmit/integration-multiplexed-sessions-enabled.cfg b/.kokoro/presubmit/integration-multiplexed-sessions-enabled.cfg
deleted file mode 100644
index 800e2a21558..00000000000
--- a/.kokoro/presubmit/integration-multiplexed-sessions-enabled.cfg
+++ /dev/null
@@ -1,48 +0,0 @@
-# Format: //devtools/kokoro/config/proto/build.proto
-
-# Configure the docker image for kokoro-trampoline.
-env_vars: {
- key: "TRAMPOLINE_IMAGE"
- value: "gcr.io/cloud-devrel-kokoro-resources/java8"
-}
-
-env_vars: {
- key: "JOB_TYPE"
- value: "integration-multiplexed-sessions-enabled"
-}
-
-# TODO: remove this after we've migrated all tests and scripts
-env_vars: {
- key: "GCLOUD_PROJECT"
- value: "gcloud-devel"
-}
-
-env_vars: {
- key: "GOOGLE_CLOUD_PROJECT"
- value: "gcloud-devel"
-}
-
-env_vars: {
- key: "GOOGLE_APPLICATION_CREDENTIALS"
- value: "secret_manager/java-it-service-account"
-}
-
-env_vars: {
- key: "SECRET_MANAGER_KEYS"
- value: "java-it-service-account"
-}
-
-env_vars: {
- key: "GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS"
- value: "true"
-}
-
-env_vars: {
- key: "GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_PARTITIONED_OPS"
- value: "true"
-}
-
-env_vars: {
- key: "GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_FOR_RW"
- value: "true"
-}
diff --git a/.kokoro/presubmit/integration-regular-sessions-enabled.cfg b/.kokoro/presubmit/integration-regular-sessions-enabled.cfg
index c2ba18efac0..b454868ebf1 100644
--- a/.kokoro/presubmit/integration-regular-sessions-enabled.cfg
+++ b/.kokoro/presubmit/integration-regular-sessions-enabled.cfg
@@ -8,7 +8,7 @@ env_vars: {
env_vars: {
key: "JOB_TYPE"
- value: "integration"
+ value: "integration-regular-sessions"
}
# TODO: remove this after we've migrated all tests and scripts
diff --git a/README.md b/README.md
index 6fc3af24e73..09bdb791d8a 100644
--- a/README.md
+++ b/README.md
@@ -19,7 +19,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file:
com.google.cloud
libraries-bom
- 26.68.0
+ 26.69.0
pom
import
@@ -56,13 +56,13 @@ implementation 'com.google.cloud:google-cloud-spanner'
If you are using Gradle without BOM, add this to your dependencies:
```Groovy
-implementation 'com.google.cloud:google-cloud-spanner:6.101.1'
+implementation 'com.google.cloud:google-cloud-spanner:6.102.0'
```
If you are using SBT, add this to your dependencies:
```Scala
-libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.101.1"
+libraryDependencies += "com.google.cloud" % "google-cloud-spanner" % "6.102.0"
```
## Authentication
@@ -731,7 +731,7 @@ Java is a registered trademark of Oracle and/or its affiliates.
[kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-spanner/java11.html
[stability-image]: https://img.shields.io/badge/stability-stable-green
[maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-spanner.svg
-[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.101.1
+[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-spanner/6.102.0
[authentication]: https://github.com/googleapis/google-cloud-java#authentication
[auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes
[predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles
diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml
index 67f9a086028..bd33eac3b81 100644
--- a/google-cloud-spanner/pom.xml
+++ b/google-cloud-spanner/pom.xml
@@ -64,6 +64,7 @@
${spanner.testenv.instance}
${spanner.gce.config.project_id}
${spanner.testenv.kms_key.name}
+ logging.properties
@@ -88,6 +89,7 @@
${spanner.testenv.instance}
${spanner.gce.config.project_id}
${spanner.testenv.kms_key.name}
+ logging.properties
3000
@@ -124,6 +126,7 @@
-Dspanner.testenv.instance=${spanner.testenv.instance}
-Dspanner.gce.config.project_id=${spanner.gce.config.project_id}
-Dspanner.testenv.kms_key.name=${spanner.testenv.kms_key.name}
+ -Djava.util.logging.config.file=logging.properties
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java
index 20a82e7aac1..999df014c8c 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/IntegrationTestEnv.java
@@ -141,8 +141,7 @@ protected void before() throws Throwable {
.anyMatch(testEnvOption -> TestEnvOptions.USE_END_TO_END_TRACING.equals(testEnvOption))) {
// OpenTelemetry set up for enabling End to End tracing for all integration test env.
// The gRPC stub and connections are created during test env set up using SpannerOptions and
- // are
- // reused for executing statements.
+ // are reused for executing statements.
options = spannerOptionsWithEndToEndTracing(options);
}
String instanceProperty = System.getProperty(TEST_INSTANCE_PROPERTY, "");
@@ -293,7 +292,7 @@ static boolean isRetryableResourceExhaustedException(SpannerException exception)
}
private void cleanUpOldDatabases(InstanceId instanceId) {
- long OLD_DB_THRESHOLD_SECS = TimeUnit.SECONDS.convert(6L, TimeUnit.HOURS);
+ long OLD_DB_THRESHOLD_SECS = TimeUnit.SECONDS.convert(2L, TimeUnit.HOURS);
Timestamp currentTimestamp = Timestamp.now();
int numDropped = 0;
String TEST_DB_REGEX = "(testdb_(.*)_(.*))|(mysample-(.*))";
diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java
index bc171a40cde..973dc5ea17c 100644
--- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java
+++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/SpannerPoolTest.java
@@ -44,6 +44,7 @@
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.util.concurrent.TimeUnit;
+import java.util.logging.ConsoleHandler;
import java.util.logging.Handler;
import java.util.logging.Logger;
import java.util.logging.StreamHandler;
@@ -211,7 +212,8 @@ private void attachLogCapturer() {
currentLogger = currentLogger.getParent();
}
if (handlers.length == 0) {
- throw new IllegalStateException("no handlers found for logger");
+ handlers = new Handler[1];
+ handlers[0] = new ConsoleHandler();
}
customLogHandler = new StreamHandler(logCapturingStream, handlers[0].getFormatter());
useParentHandlers = log.getUseParentHandlers();
@@ -267,6 +269,7 @@ public void testRemoveConnectionConnectionAlreadyRemoved() {
@Test
public void testCloseSpanner() {
+ attachLogCapturer();
SpannerPool pool = createSubjectAndMocks();
Spanner spanner = pool.getSpanner(options1, connection1);
// verify that closing is not possible until all connections have been removed
diff --git a/google-cloud-spanner/src/test/resources/logging.properties b/google-cloud-spanner/src/test/resources/logging.properties
new file mode 100644
index 00000000000..c817ab7acd9
--- /dev/null
+++ b/google-cloud-spanner/src/test/resources/logging.properties
@@ -0,0 +1,7 @@
+.level=INFO
+.handlers=java.util.logging.ConsoleHandler
+java.util.logging.ConsoleHandler.level=INFO
+java.util.logging.Logger.useParentHandlers=true
+
+# Set log level to WARN for SpannerImpl to prevent log spamming of the Spanner configuration.
+com.google.cloud.spanner.SpannerImpl.LEVEL=WARN