Skip to content

Conversation

@sakthivelmanii
Copy link
Collaborator

Description:

Currently when multiplexed session fails with any error, we are storing the exception in the session reference and re-throwing that error to all the subsequent requests. This will cause the library to stall since no further requests will be processed successfully. It's a general expectation that all RPC requests are expected due to CPU, Network, GFE and other factors.

Proposed solution:
We will be retrying creation of multiplexed session for the duration of waitForMinSessions. If a client is having a cold start issues(higher CPU/memory during initial start), they can increase the waitForMinSessions time for the client to retry

@sakthivelmanii sakthivelmanii requested review from a team as code owners January 6, 2026 08:11
@product-auto-label product-auto-label bot added size: l Pull request size is large. api: spanner Issues related to the googleapis/java-spanner API. labels Jan 6, 2026
@sakthivelmanii sakthivelmanii changed the title fix(spanner): Retry creation of multiplexed session fix: Retry creation of multiplexed session Jan 6, 2026
@gemini-code-assist
Copy link
Contributor

Summary of Changes

Hello @sakthivelmanii, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request addresses a critical reliability issue in the Spanner client library where transient failures during the initial creation of multiplexed sessions could lead to a complete stall. By introducing a retry mechanism for specific transient error codes (DEADLINE_EXCEEDED, RESOURCE_EXHAUSTED, UNAVAILABLE) during the waitForMinSessions period, the client library becomes more resilient to temporary network or resource issues. This change significantly improves the robustness of the Spanner client, especially during application startup or under fluctuating load conditions, ensuring that operations can proceed after transient hiccups.

Highlights

  • Multiplexed Session Creation Retry Logic: Implemented a retry mechanism for the creation of multiplexed sessions in the Spanner client library. This prevents the library from stalling indefinitely if initial session creation fails due to transient errors.
  • Configurable Retry Duration: The retry duration for multiplexed session creation is now configurable via the waitForMinSessions option in SessionPoolOptions, allowing users to adjust for cold start issues or other transient network conditions.
  • Specific Retryable Error Codes: Retries are specifically triggered for DEADLINE_EXCEEDED, RESOURCE_EXHAUSTED, and UNAVAILABLE error codes, ensuring that only transient, retryable failures lead to retries, while permanent errors are propagated immediately.
  • Enhanced Test Coverage: Added comprehensive unit tests to validate the new retry logic under various scenarios, including successful retries, non-retryable exceptions, and different delay configurations.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a retry mechanism for creating multiplexed sessions, which is a great improvement for handling transient errors during client startup. The changes are well-structured, and the new tests cover the retry logic effectively.

I have a few suggestions to further enhance the implementation:

  • The retry loop in maybeWaitForSessionCreation can be made more efficient by exiting immediately on success or non-retryable errors.
  • Using an EnumSet for RETRYABLE_ERROR_CODES would be more performant.
  • The new test cases in MultiplexedSessionDatabaseClientMockServerTest have some code duplication that could be refactored into a helper method for better maintainability.

Overall, this is a solid contribution that improves the robustness of the client library.

Comment on lines +231 to +245
Spanner testSpanner =
SpannerOptions.newBuilder()
.setProjectId("test-project")
.setChannelProvider(channelProvider)
.setCredentials(NoCredentials.getInstance())
.setSessionPoolOption(
SessionPoolOptions.newBuilder()
.setUseMultiplexedSession(true)
.setUseMultiplexedSessionForRW(true)
.setUseMultiplexedSessionPartitionedOps(true)
.setWaitForMinSessionsDuration(Duration.ofSeconds(1))
.setFailOnSessionLeak()
.build())
.build()
.getService();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

There's significant code duplication across the new test cases for creating Spanner instances with different SessionPoolOptions. To improve maintainability and reduce boilerplate, consider extracting this logic into a private helper method.

For example:

private Spanner createTestSpanner(SessionPoolOptions sessionPoolOptions) {
    return SpannerOptions.newBuilder()
        .setProjectId("test-project")
        .setChannelProvider(channelProvider)
        .setCredentials(NoCredentials.getInstance())
        .setSessionPoolOption(sessionPoolOptions)
        .build()
        .getService();
}

This helper could then be called from each test, passing in the specific SessionPoolOptions required for that test case. This would make the tests cleaner and easier to read.

@product-auto-label product-auto-label bot added size: m Pull request size is medium. and removed size: l Pull request size is large. labels Jan 6, 2026
@sakthivelmanii sakthivelmanii force-pushed the retry_multiplexed_session_till_session_wait_time branch from f86aa85 to 9f585a8 Compare January 6, 2026 08:58
@product-auto-label product-auto-label bot added size: l Pull request size is large. and removed size: m Pull request size is medium. labels Jan 6, 2026
@sakthivelmanii sakthivelmanii force-pushed the retry_multiplexed_session_till_session_wait_time branch 4 times, most recently from 04eab47 to f9260d1 Compare January 6, 2026 11:37
@sakthivelmanii
Copy link
Collaborator Author

/gemini review

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a valuable retry mechanism for creating multiplexed sessions, making the Spanner client more resilient to transient failures, particularly during cold starts. The implementation correctly extracts the session creation logic for reuse within a new retry loop in maybeWaitForSessionCreation, and the accompanying tests are comprehensive. I have one suggestion to improve the clarity of an error message in the case of a timeout, but otherwise, this is a solid and well-executed enhancement.

@sakthivelmanii sakthivelmanii force-pushed the retry_multiplexed_session_till_session_wait_time branch 6 times, most recently from eaab0fb to 8fea7db Compare January 6, 2026 17:15
@sakthivelmanii sakthivelmanii force-pushed the retry_multiplexed_session_till_session_wait_time branch from 8fea7db to 26ddd73 Compare January 6, 2026 17:30
Comment on lines 362 to 378
mockSpanner.setCreateSessionExecutionTime(
SimulatedExecutionTime.ofMinimumAndRandomTimeAndExceptions(
600,
0,
Arrays.asList(
Status.DEADLINE_EXCEEDED
.withDescription(
"CallOptions deadline exceeded after 22.986872393s. "
+ "Name resolution delay 6.911918521 seconds. [closed=[], "
+ "open=[[connecting_and_lb_delay=32445014148ns, was_still_waiting]]]")
.asRuntimeException(),
Status.DEADLINE_EXCEEDED
.withDescription(
"CallOptions deadline exceeded after 22.986872393s. "
+ "Name resolution delay 6.911918521 seconds. [closed=[], "
+ "open=[[connecting_and_lb_delay=32445014148ns, was_still_waiting]]]")
.asRuntimeException())));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If I understand this correctly, then it will wait for 600ms and then return a DEADLINE_EXCEEDED error based on the exceptions. This will again trigger a retry, which will time out. Can we:

  1. Lower the wait time to keep the tests as quick as possible
  2. Use a different retryable error code for the exceptions to show that the timeout error is really coming from the retry and not the exceptions that are being returned

public void testRetryWithDelayInExceptionWithInSessionCreationWaitTime() {
mockSpanner.setCreateSessionExecutionTime(
SimulatedExecutionTime.ofMinimumAndRandomTimeAndExceptions(
200,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we lower this value to keep the tests as fast as possible?

@sakthivelmanii sakthivelmanii merged commit 735e29e into main Jan 7, 2026
60 of 62 checks passed
@sakthivelmanii sakthivelmanii deleted the retry_multiplexed_session_till_session_wait_time branch January 7, 2026 15:10
blakeli0 added a commit that referenced this pull request Feb 3, 2026
* chore: add release-please config for protobuf-4.x (#4249)

* fix: Refine connecitivity metrics to capture RPCs with no response he… (#4252)

* fix: Refine connecitivity metrics to capture RPCs with no response headers

* test fix

* fix: retry as PDML dit not retry Resource limit exceeded (#4258)

Most transactions that exceed the mutation limit for an atomic transaction will fail with the error "The transaction contains too many mutations.". However, it is also possible that the transaction fails with the more generic error message "Transaction resource limits exceeded". This error did not trigger a retry of the statement using a PDML transaction.

Fixes #4253

* deps: update dependency com.google.cloud:sdk-platform-java-config to v3.54.2 (#4261)

* deps: update googleapis/sdk-platform-java action to v2.64.2 (#4262)

* feat: include RequestID in requests and errors (#4263)

- Send a RequestID to Spanner for each request
- Make sure that the attempt number of the RequestID is increased
  if the RPC is retried.
- Include the RequestID in every error that is thrown due to an error
  that is returned by Spanner.

* feat: make grpc-gcp default enabled (#4239)

This PR enables the gRPC-GCP channel pool extension by default for Cloud Spanner Java client.

**What's Changing for Customers**

**Before this change**

- gRPC-GCP extension was disabled by default
- Default number of channels: 4
- Channel pooling was handled by GAX

**After this change**

- gRPC-GCP extension is enabled by default
- Default number of channels: 8
- Channel pooling is handled by gRPC-GCP extension

**Benefits of gRPC-GCP**

- **Improved resilience:** When a network connection fails on a particular channel, operations can be automatically retried on a different gRPC channel
- **Better channel management:** gRPC-GCP provides more sophisticated channel affinity and load balancing

**How to Disable gRPC-GCP (Switch Back to GAX Channel Pool)**

If you need to disable gRPC-GCP and use the previous GAX channel pooling behavior, use the `disableGrpcGcpExtension()` method:
```
SpannerOptions options = SpannerOptions.newBuilder()
    .setProjectId("my-project")
    .disableGrpcGcpExtension()
    .build();
```

When disabled, the default number of channels reverts to 4 (the previous default).

**When You Might Want to Disable gRPC-GCP**

- **Maintaining previous behavior:** If you want to keep the exact same behavior as before this change (GAX channel pool with 4 default channels).
- **Troubleshooting**: If you experience any unexpected behavior, disabling gRPC-GCP can help isolate whether the issue is related to the channel pooling mechanism.

* chore(main): release 6.104.1-SNAPSHOT (#4248)

:robot: I have created a release *beep* *boop*
---


### Updating meta-information for bleeding-edge SNAPSHOT release.

---
This PR was generated with [Release Please](https://togithub.com/googleapis/release-please). See [documentation](https://togithub.com/googleapis/release-please#release-please).

* feat: add support of dynamic channel pooling (#4265)

* feat: add support of dynamic channel pooling

* set initial pool size to 0 make dynamic channel pool work

* chore: generate libraries at Tue Dec 16 06:00:50 UTC 2025

* bump grpc-gcp-java version

* fix test

* incorporate suggestions

* chore: generate libraries at Tue Dec 16 09:56:45 UTC 2025

* make dynamic channel pool default disabled

* add verifySameChannelId back and fix partitionDML test

* support setting GcpChannelPoolOptions directly

---------

Co-authored-by: cloud-java-bot <cloud-java-bot@google.com>

* chore(main): release 6.105.0 (#4267)

* chore(main): release 6.105.0

* chore: generate libraries at Tue Dec 16 17:46:24 UTC 2025

---------

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Co-authored-by: cloud-java-bot <cloud-java-bot@google.com>

* chore(main): release 6.105.1-SNAPSHOT (#4268)

:robot: I have created a release *beep* *boop*
---


### Updating meta-information for bleeding-edge SNAPSHOT release.

---
This PR was generated with [Release Please](https://togithub.com/googleapis/release-please). See [documentation](https://togithub.com/googleapis/release-please#release-please).

* chore: enable afe latency metric test (#4283)

* chore: use graal-sdk-nativeimage.version to manage graal nativeimage versions (#4284)

* chore: use graal-sdk-nativeimage.version to manage graal-sdk versions

* chore: generate libraries at Thu Jan  1 23:39:12 UTC 2026

---------

Co-authored-by: cloud-java-bot <cloud-java-bot@google.com>

* feat: support SHOW DEFAULT_TRANSACTION_ISOLATION for PG databases (#4285)

The `SHOW DEFAULT_TRANSACTION_ISOLATION` command can be used in PostgreSQL to query
the current default isolation level for a connection. This command was not supported
by the Spanner JDBC driver and PGAdapter, which made it difficult for customers to
check whether their attempt to set a different default isolation level actually worked.

Updates GoogleCloudPlatform/pgadapter#3984

* fix: adjust the initial polling delay for ddl operations (#4275)

* fix: adjust the initial polling delay for ddl operations

* fix the lint issue

* refactor the code

* create a separate setting for updateDatabaseDdl

* chore: abstract plain text settings into a SpannerOption (#4264)

* chore: abstract plain text settings into a SpannerOption

* add unit test for plain text scenarios

* gemini suggested code changes

* updated javadoc

* missing space

* fixed unit test

---------

Co-authored-by: rahul2393 <irahul@google.com>

* fix: Retry creation of multiplexed session (#4288)

* fix(spanner): Retry creation of multiplexed session

* Reduce wait time to run tests faster

* chore(main): release 6.106.0 (#4286)

* chore(main): release 6.106.0

* chore: generate libraries at Wed Jan  7 15:11:02 UTC 2026

---------

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Co-authored-by: cloud-java-bot <cloud-java-bot@google.com>

* chore: Add Clirr exemptions for Protobuf 4.27.4+ runtime (#4297)

* feat: Add Dynamic Channel Pooling (DCP) support to Connection API (#4299)

* feat: Add Dynamic Channel Pooling (DCP) support to Connection API

* incorporate changes

* test: skip PGErrorCode assert check for experimental host in ITQueryTest.badquery (#4290)

* test: skip PGErrorCode assert check for experimental host

* gemini suggested code applied

* chore: cleanup release-please config (#4254)

* chore: cleanup release-please config

- Remove redundant options already declared at the top level.\n- Remove bumpMinorPreMajor for repositories after the first major release.

* chore: format release-please.yml

---------

Co-authored-by: rahul2393 <irahul@google.com>

* deps: update dependency com.google.cloud:sdk-platform-java-config to v3.55.1 (#4302)

* deps: update googleapis/sdk-platform-java action to v2.65.1 (#4301)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [googleapis/sdk-platform-java](https://redirect.github.com/googleapis/sdk-platform-java) | action | minor | `v2.64.2` → `v2.65.1` |

---

### Release Notes

<details>
<summary>googleapis/sdk-platform-java (googleapis/sdk-platform-java)</summary>

### [`v2.65.1`](https://redirect.github.com/googleapis/sdk-platform-java/releases/tag/v2.65.1)

[Compare Source](https://redirect.github.com/googleapis/sdk-platform-java/compare/v2.65.0...v2.65.1)

##### Documentation

- Update docs for GoogleCredentialsProvider#setScopesToApply ([#&#8203;4057](https://redirect.github.com/googleapis/sdk-platform-java/issues/4057)) ([0a9962f](https://redirect.github.com/googleapis/sdk-platform-java/commit/0a9962f9945b6018796a808f89a6a3a309d1ca04))

### [`v2.65.0`](https://redirect.github.com/googleapis/sdk-platform-java/releases/tag/v2.65.0)

[Compare Source](https://redirect.github.com/googleapis/sdk-platform-java/compare/v2.64.2...v2.65.0)

##### Features

- add org.json:json to third-party-dependencies pom ([#&#8203;4047](https://redirect.github.com/googleapis/sdk-platform-java/issues/4047)) ([ffa432e](https://redirect.github.com/googleapis/sdk-platform-java/commit/ffa432e4e4ae763845afd48b404836c88698bdc0)), closes [#&#8203;4046](https://redirect.github.com/googleapis/sdk-platform-java/issues/4046)
- remove dependency management of graal-sdk ([#&#8203;4033](https://redirect.github.com/googleapis/sdk-platform-java/issues/4033)) ([ad05c34](https://redirect.github.com/googleapis/sdk-platform-java/commit/ad05c34e205c09ad035f469170b0c62b4423b748))

##### Bug Fixes

- add api\_version breadcrumb to client docs ([#&#8203;4018](https://redirect.github.com/googleapis/sdk-platform-java/issues/4018)) ([a2b2179](https://redirect.github.com/googleapis/sdk-platform-java/commit/a2b2179874e6a5435001fe201f4eecc2a8e4c531))
- Create a single S2AChannelCredentials per application ([#&#8203;3989](https://redirect.github.com/googleapis/sdk-platform-java/issues/3989)) ([3758b43](https://redirect.github.com/googleapis/sdk-platform-java/commit/3758b436d7e80b79ad7d5ea330d8f2bf2f430330))
- provide API to share the same background executor for channel po… ([#&#8203;4030](https://redirect.github.com/googleapis/sdk-platform-java/issues/4030)) ([178182c](https://redirect.github.com/googleapis/sdk-platform-java/commit/178182c76c1b35e702215a88adc3ab511dd35a9e))

##### Dependencies

- update dependencies.txt for grpc-gcp to 1.9.0  ([#&#8203;4025](https://redirect.github.com/googleapis/sdk-platform-java/issues/4025)) ([b68791d](https://redirect.github.com/googleapis/sdk-platform-java/commit/b68791d074c02e02a5ccf2f937a5922749a14f56))
- update google api dependencies ([#&#8203;3917](https://redirect.github.com/googleapis/sdk-platform-java/issues/3917)) ([480cf13](https://redirect.github.com/googleapis/sdk-platform-java/commit/480cf13148687c53c4af3da9d48490aeb5bf4b88))
- update google.http-client.version to 2.0.3 ([#&#8203;4054](https://redirect.github.com/googleapis/sdk-platform-java/issues/4054)) ([b9a8c89](https://redirect.github.com/googleapis/sdk-platform-java/commit/b9a8c8924e7b03bca8a97e476abfd012b86f6d45))

##### Documentation

- Fix retry guide link in javadocs ([#&#8203;4029](https://redirect.github.com/googleapis/sdk-platform-java/issues/4029)) ([b43f77c](https://redirect.github.com/googleapis/sdk-platform-java/commit/b43f77c66d93d2423744d0f6d6a0a2a53a06e6d9))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/googleapis/java-spanner).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi43NC41IiwidXBkYXRlZEluVmVyIjoiNDIuNzQuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

* chore: remove explicit grpc-gcp version pinning (#4303)

* feat: add SsFormat encoding library (#4292)

* feat: add SsFormat encoding library

* remove unsigned methods

* fix javadoc

* refactored appendInt method names + added tests for target range

* chore(main): release 6.106.1-SNAPSHOT (#4291)

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>

* chore: Add gcp resource name span attribute (#4306)

* chore: Add gcp resource name span attribute

* Update google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetrySpanTest.java

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* chore: Add gcp resource name span attribute

---------

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

* deps: update dependency net.bytebuddy:byte-buddy to v1.18.4 (#4244)

This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [net.bytebuddy:byte-buddy](https://bytebuddy.net) | `1.18.1` → `1.18.4` | ![age](https://developer.mend.io/api/mc/badges/age/maven/net.bytebuddy:byte-buddy/1.18.4?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/net.bytebuddy:byte-buddy/1.18.4?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/net.bytebuddy:byte-buddy/1.18.1/1.18.4?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/net.bytebuddy:byte-buddy/1.18.1/1.18.4?slim=true) |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/googleapis/java-spanner).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xOS45IiwidXBkYXRlZEluVmVyIjoiNDIuNzQuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

* deps: update google.cloud.monitoring.version to v3.83.0 (#4270)

This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [com.google.cloud:google-cloud-monitoring](https://redirect.github.com/googleapis/google-cloud-java) | `3.81.0` → `3.83.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.cloud:google-cloud-monitoring/3.83.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.cloud:google-cloud-monitoring/3.83.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.cloud:google-cloud-monitoring/3.81.0/3.83.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.cloud:google-cloud-monitoring/3.81.0/3.83.0?slim=true) |
| [com.google.api.grpc:grpc-google-cloud-monitoring-v3](https://redirect.github.com/googleapis/google-cloud-java) | `3.81.0` → `3.83.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.api.grpc:grpc-google-cloud-monitoring-v3/3.83.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.api.grpc:grpc-google-cloud-monitoring-v3/3.83.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.api.grpc:grpc-google-cloud-monitoring-v3/3.81.0/3.83.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.api.grpc:grpc-google-cloud-monitoring-v3/3.81.0/3.83.0?slim=true) |
| [com.google.api.grpc:proto-google-cloud-monitoring-v3](https://redirect.github.com/googleapis/google-cloud-java) | `3.81.0` → `3.83.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.api.grpc:proto-google-cloud-monitoring-v3/3.83.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.api.grpc:proto-google-cloud-monitoring-v3/3.83.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.api.grpc:proto-google-cloud-monitoring-v3/3.81.0/3.83.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.api.grpc:proto-google-cloud-monitoring-v3/3.81.0/3.83.0?slim=true) |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/googleapis/java-spanner).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi41NC4yIiwidXBkYXRlZEluVmVyIjoiNDIuNzQuNSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

* chore(deps): update dependency com.google.cloud:libraries-bom to v26.72.0 (#4234)

This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [com.google.cloud:libraries-bom](https://cloud.google.com/java/docs/bom) ([source](https://redirect.github.com/googleapis/java-cloud-bom)) | `26.71.0` -> `26.72.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.cloud:libraries-bom/26.72.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.cloud:libraries-bom/26.72.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.cloud:libraries-bom/26.71.0/26.72.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.cloud:libraries-bom/26.71.0/26.72.0?slim=true) |

---

### Release Notes

<details>
<summary>googleapis/java-cloud-bom (com.google.cloud:libraries-bom)</summary>

### [`v26.72.0`](https://redirect.github.com/googleapis/java-cloud-bom/blob/HEAD/CHANGELOG.md#26720-2025-11-18)

[Compare Source](https://redirect.github.com/googleapis/java-cloud-bom/compare/v26.71.0...v26.72.0)

##### Dependencies

- update dependency com.google.cloud:first-party-dependencies to v3.54.1 ([#&#8203;7266](https://redirect.github.com/googleapis/java-cloud-bom/issues/7266)) ([2b00ef5](https://redirect.github.com/googleapis/java-cloud-bom/commit/2b00ef51060c6fc8b1b772b352bd0b22f25ee09a))
- update dependency com.google.cloud:gapic-libraries-bom to v1.74.0 ([#&#8203;7271](https://redirect.github.com/googleapis/java-cloud-bom/issues/7271)) ([b52b9d9](https://redirect.github.com/googleapis/java-cloud-bom/commit/b52b9d958d2a5f89600b808164f14720dfb56d7f))
- update dependency com.google.cloud:google-cloud-bigquery to v2.56.0 ([#&#8203;7279](https://redirect.github.com/googleapis/java-cloud-bom/issues/7279)) ([d7876b6](https://redirect.github.com/googleapis/java-cloud-bom/commit/d7876b6b11bce64d3f62f405da6d9ed928a5ecab))
- update dependency com.google.cloud:google-cloud-bigquerystorage-bom to v3.18.0 ([#&#8203;7273](https://redirect.github.com/googleapis/java-cloud-bom/issues/7273)) ([b59ad99](https://redirect.github.com/googleapis/java-cloud-bom/commit/b59ad99edc23294254334d3dae4a181c8e0c25ed))
- update dependency com.google.cloud:google-cloud-bigtable-bom to v2.70.0 ([#&#8203;7281](https://redirect.github.com/googleapis/java-cloud-bom/issues/7281)) ([5f79ffc](https://redirect.github.com/googleapis/java-cloud-bom/commit/5f79ffc4d14c510d38d5a019ab5f0d7a711c2e6a))
- update dependency com.google.cloud:google-cloud-datastore-bom to v2.33.0 ([#&#8203;7276](https://redirect.github.com/googleapis/java-cloud-bom/issues/7276)) ([52bc904](https://redirect.github.com/googleapis/java-cloud-bom/commit/52bc90484653070c5288312342aac53915ac8973))
- update dependency com.google.cloud:google-cloud-firestore-bom to v3.33.4 ([#&#8203;7274](https://redirect.github.com/googleapis/java-cloud-bom/issues/7274)) ([58aa10c](https://redirect.github.com/googleapis/java-cloud-bom/commit/58aa10ca5b7bb81115c6fab3f8719375f2345d84))
- update dependency com.google.cloud:google-cloud-logging-bom to v3.23.8 ([#&#8203;7275](https://redirect.github.com/googleapis/java-cloud-bom/issues/7275)) ([6538b89](https://redirect.github.com/googleapis/java-cloud-bom/commit/6538b890fd2c1d966d898cf10ad13cd3d10aeba9))
- update dependency com.google.cloud:google-cloud-logging-logback to v0.132.19-alpha ([#&#8203;7277](https://redirect.github.com/googleapis/java-cloud-bom/issues/7277)) ([7c5c2f0](https://redirect.github.com/googleapis/java-cloud-bom/commit/7c5c2f080956a73f22a723fd3d67efca0d8d6967))
- update dependency com.google.cloud:google-cloud-nio to v0.128.8 ([#&#8203;7269](https://redirect.github.com/googleapis/java-cloud-bom/issues/7269)) ([0ef2783](https://redirect.github.com/googleapis/java-cloud-bom/commit/0ef2783c1e92cbb90fd9aa9baf9a4749cad87a29))
- update dependency com.google.cloud:google-cloud-pubsub-bom to v1.143.1 ([#&#8203;7272](https://redirect.github.com/googleapis/java-cloud-bom/issues/7272)) ([f9c869b](https://redirect.github.com/googleapis/java-cloud-bom/commit/f9c869bd0e4f1a71ff225ca09d6d094434d250d2))
- update dependency com.google.cloud:google-cloud-pubsublite-bom to v1.15.19 ([#&#8203;7278](https://redirect.github.com/googleapis/java-cloud-bom/issues/7278)) ([3f9ad11](https://redirect.github.com/googleapis/java-cloud-bom/commit/3f9ad11ecc0683563c3878bee01c6d033f2b4d16))
- update dependency com.google.cloud:google-cloud-spanner-bom to v6.103.0 ([#&#8203;7280](https://redirect.github.com/googleapis/java-cloud-bom/issues/7280)) ([0b61648](https://redirect.github.com/googleapis/java-cloud-bom/commit/0b616489685dac70d765778966b00c2523589190))
- update dependency com.google.cloud:google-cloud-spanner-jdbc to v2.34.0 ([#&#8203;7265](https://redirect.github.com/googleapis/java-cloud-bom/issues/7265)) ([297f8d5](https://redirect.github.com/googleapis/java-cloud-bom/commit/297f8d505d97bff0dd93ef5dba92d641ccbb7a64))
- update dependency com.google.cloud:google-cloud-storage-bom to v2.60.0 ([#&#8203;7267](https://redirect.github.com/googleapis/java-cloud-bom/issues/7267)) ([63b1b4c](https://redirect.github.com/googleapis/java-cloud-bom/commit/63b1b4c765bd019153cfeae3b98d69363e679d6e))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/googleapis/java-spanner).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi4xMy41IiwidXBkYXRlZEluVmVyIjoiNDIuMzIuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

* deps: update dependency com.google.api.grpc:proto-google-cloud-trace-v1 to v2.82.0 (#4227)

This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [com.google.api.grpc:proto-google-cloud-trace-v1](https://redirect.github.com/googleapis/google-cloud-java) | `2.79.0` → `2.82.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.api.grpc:proto-google-cloud-trace-v1/2.82.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.api.grpc:proto-google-cloud-trace-v1/2.82.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.api.grpc:proto-google-cloud-trace-v1/2.79.0/2.82.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.api.grpc:proto-google-cloud-trace-v1/2.79.0/2.82.0?slim=true) |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/googleapis/java-spanner).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNzMuMSIsInVwZGF0ZWRJblZlciI6IjQyLjc0LjUiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

* deps: update dependency com.google.cloud:google-cloud-monitoring to v3.83.0 (#4169)

This PR contains the following updates:

| Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Adoption](https://docs.renovatebot.com/merge-confidence/) | [Passing](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) |
|---|---|---|---|---|---|
| [com.google.cloud:google-cloud-monitoring](https://redirect.github.com/googleapis/google-cloud-java) | `3.77.0` → `3.83.0` | ![age](https://developer.mend.io/api/mc/badges/age/maven/com.google.cloud:google-cloud-monitoring/3.83.0?slim=true) | ![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.google.cloud:google-cloud-monitoring/3.83.0?slim=true) | ![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.google.cloud:google-cloud-monitoring/3.77.0/3.83.0?slim=true) | ![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.google.cloud:google-cloud-monitoring/3.77.0/3.83.0?slim=true) |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/googleapis/java-spanner).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDMuMSIsInVwZGF0ZWRJblZlciI6IjQyLjc0LjUiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

* chore(main): release 6.107.0 (#4304)

* chore(main): release 6.107.0

* chore: generate libraries at Fri Jan 16 17:05:30 UTC 2026

---------

Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Co-authored-by: cloud-java-bot <cloud-java-bot@google.com>

---------

Co-authored-by: Diego Marquez <diegomarquezp@google.com>
Co-authored-by: surbhigarg92 <surbhigarg.92@gmail.com>
Co-authored-by: Knut Olav Løite <koloite@gmail.com>
Co-authored-by: Mend Renovate <bot@renovateapp.com>
Co-authored-by: rahul2393 <irahul@google.com>
Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
Co-authored-by: cloud-java-bot <cloud-java-bot@google.com>
Co-authored-by: Mridula <66699525+mpeddada1@users.noreply.github.com>
Co-authored-by: Hengfeng Li <hengfeng@google.com>
Co-authored-by: Sagnik Ghosh <sagnikghosh@google.com>
Co-authored-by: Sakthivel Subramanian <179120858+sakthivelmanii@users.noreply.github.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

api: spanner Issues related to the googleapis/java-spanner API. size: l Pull request size is large.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants