Skip to content
This repository was archived by the owner on Apr 7, 2026. It is now read-only.

feat: next release is v6.105.0-rc1 - #4259

Closed
diegomarquezp wants to merge 7 commits into
mainfrom
bump-minor
Closed

feat: next release is v6.105.0-rc1#4259
diegomarquezp wants to merge 7 commits into
mainfrom
bump-minor

Conversation

@diegomarquezp

Copy link
Copy Markdown
Contributor

Includes sync with main, including commits 7b49412 and c735d42

diegomarquezp and others added 7 commits December 3, 2025 14:04
Co-authored-by: release-please[bot] <55107282+release-please[bot]@users.noreply.github.com>
#4252)

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

* test fix
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
@diegomarquezp
diegomarquezp requested review from a team December 10, 2025 20:06
@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 Dec 10, 2025
@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @diegomarquezp, 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 primarily focuses on preparing the project for its next release, v6.105.0-rc1, by updating all relevant version numbers and configuring the automated release process. Concurrently, it introduces a substantial refactoring of the internal server timing header metric recording mechanism, simplifying the codebase and improving maintainability. Additionally, the change enhances error handling for transaction mutation limits by recognizing a broader set of error messages.

Highlights

  • Release Candidate Preparation: The project is being prepared for the v6.105.0-rc1 release, indicated by version updates across pom.xml files and the addition of release-please configuration for a release candidate.
  • Metric Recording Refactoring: Internal logic for recording server timing header metrics has been significantly refactored, consolidating multiple methods into a single, more streamlined approach within BuiltInMetricsRecorder, BuiltInMetricsTracer, and HeaderInterceptor.
  • Enhanced Exception Handling: The TransactionMutationLimitExceededException now recognizes an additional error message ("Transaction resource limits exceeded"), broadening the conditions under which this specific exception is caught.
  • Clirr Configuration Update: clirr-ignored-differences.xml was updated to ignore API differences related to the removal of unused internal methods in CompositeTracer.
  • Test Suite Adjustments: Corresponding test files were updated to align with the metric recording refactoring and the expanded exception handling, including parameterizing a test for different exception types.
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.

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

Copy link
Copy Markdown
Contributor

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 prepares for the v6.105.0-rc1 release. It includes version bumps for all modules, configuration for release-please, and incorporates two main features from the main branch:

  1. Support for a new "Transaction resource limits exceeded" error message, treating it as a transaction mutation limit exceeded error.
  2. A significant refactoring of HeaderInterceptor to improve readability and maintainability by moving metric recording logic from onHeaders to onClose.

The changes are generally good, especially the test parameterization for the new error message and the structural improvements in HeaderInterceptor. However, I've found a critical race condition in the refactored HeaderInterceptor where call-specific state is stored in instance fields of what is likely a shared interceptor, which could lead to incorrect metrics under concurrent load. I've also pointed out a minor formatting issue in an XML configuration file.

Comment on lines +89 to +90
private Float gfeLatency;
private Float afeLatency;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

critical

These fields introduce a potential race condition. HeaderInterceptor is typically a singleton shared across all gRPC calls on a channel. Storing call-specific state like gfeLatency and afeLatency as instance fields can lead to incorrect metric values under concurrent load, as one call might overwrite the values of another.

To fix this, this state should be stored within the scope of a single call. A good place would be as fields within the SimpleForwardingClientCallListener instance created for each call. These values can then be passed as parameters to the record... methods.

<differenceType>7002</differenceType>
<className>com/google/cloud/spanner/CompositeTracer</className>
<method>void recordGFELatency(java.lang.Float)</method>
</difference><difference>

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

There's a formatting issue here. The opening <difference> tag should be on a new line for better readability and to maintain consistent XML formatting throughout the file.

Suggested change
</difference><difference>
</difference>
<difference>

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

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.

3 participants