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