Skip to content

Conversation

@diegomarquezp
Copy link
Contributor

@diegomarquezp diegomarquezp commented Jan 7, 2026

This PR introduces a feature flag to control the collection of metrics in GAX. Metrics are now disabled by default and can be enabled via an environment variable or system property.

Changes:

  • Feature Flag Implementation:
    • Added MetricsUtils.java to handle the feature flag logic. It checks for the GOOGLE_CLOUD_ENABLE_METRICS environment variable or system property.
    • Updated MetricsTracerFactory.java to respect the feature flag. If metrics are disabled, newTracer now returns a BaseApiTracer (no-op) instead of a MetricsTracer.
  • Discovery and Warning:
    • Updated MetricsTracer.java to log an INFO message once per JVM instance if it is instantiated while metrics are disabled. This helps users who have explicitly configured a MetricsTracerFactory discover that they also need to enable the global feature flag.
  • Testing:
    • Unit Tests: Added MetricsUtilsTest.java to verify the feature flag logic. Updated MetricsTracerFactoryTest.java to ensure it correctly returns a no-op tracer when metrics are disabled.
    • Integration Tests: Updated ITOtelMetrics.java in the showcase module to include a new test case testMetricsFeatureFlag(), which verifies the end-to-end behavior of the flag.
  • Maintenance:
    • Updated copyright years in modified files.
    • Improved test setup in MetricsTracerFactoryTest.java using @ExtendWith(MockitoExtension.class).

How to enable metrics:

To enable metrics collection, set the following environment variable or system property to true:
GOOGLE_CLOUD_ENABLE_METRICS=true

@product-auto-label product-auto-label bot added the size: m Pull request size is medium. label Jan 7, 2026
@diegomarquezp diegomarquezp changed the title feat: Add Metrics feature flag' feat: Add Metrics feature flag Jan 7, 2026
@gemini-code-assist
Copy link
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 implements a new feature flag to control the activation of metrics tracing within the GAX library. This enhancement allows developers to easily enable or disable metrics collection at runtime using system properties or environment variables, providing more flexibility and control over application performance monitoring. The changes include a dedicated utility class for flag management, modifications to the metrics tracer factory, and thorough testing to ensure robust and predictable behavior.

Highlights

  • Metrics Feature Flag: Introduced a new feature flag, GOOGLE_CLOUD_ENABLE_METRICS, which allows users to enable or disable metrics collection via system properties or environment variables. This provides granular control over when metrics are active.
  • New Utility Class: A new utility class, MetricsUtils, has been added to encapsulate the logic for checking the status of the metrics feature flag, making the decision-making process centralized and reusable.
  • Conditional Metrics Tracing: The MetricsTracerFactory now conditionally creates a MetricsTracer instance. If the GOOGLE_CLOUD_ENABLE_METRICS flag is not enabled, it will return a BaseApiTracer instead, effectively disabling metrics tracing.
  • Comprehensive Testing: New unit tests for MetricsUtils and additional test cases for MetricsTracerFactory have been added to ensure the feature flag logic works as expected. Integration tests were also updated to validate the flag's behavior in a broader context.
  • Copyright Year Update: The copyright year in several files has been updated to 2026.

🧠 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 feature flag, GOOGLE_CLOUD_ENABLE_METRICS, to control metrics collection. The implementation in MetricsUtils correctly checks for a system property or environment variable. The changes are well-tested, including unit tests for the new utility class and integration tests for the feature flag behavior. My review includes suggestions to improve test code style by using explicit imports and to enhance the robustness of a test case by avoiding the use of a null MetricsRecorder.

diegomarquezp and others added 4 commits January 7, 2026 18:40
…/v1beta1/it/ITOtelMetrics.java

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

sonarqubecloud bot commented Jan 7, 2026

@sonarqubecloud
Copy link

sonarqubecloud bot commented Jan 8, 2026

Quality Gate Failed Quality Gate failed for 'java_showcase_integration_tests'

Failed conditions
65.0% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud


@Override
public ApiTracer newTracer(ApiTracer parent, SpanName spanName, OperationType operationType) {
if (!MetricsUtils.isMetricsEnabled()) {
Copy link

Choose a reason for hiding this comment

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

I don't want to change how existing metrics works, the flag is intended to protect new metric instrumentation from people taking dependencies on it while it stabilizes.

Copy link

@westarle westarle left a comment

Choose a reason for hiding this comment

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

I like the API and the implementation, but we shouldn't apply it to existing metrics. I also think the first one we might be interested in is for tracing, if we are going to work on tracing first.

/cc @blakeli0

* system property.
*/
public static boolean isMetricsEnabled() {
String enableMetrics = System.getProperty(GOOGLE_CLOUD_ENABLE_METRICS);
Copy link

Choose a reason for hiding this comment

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

I would like this to have the words "JAVA" and "EXPERIMENTAL" or "UNSTABLE" in it. The Go one is GOOGLE_SDK_GO_EXPERIMENTAL_FOO

Copy link

@westarle westarle Jan 8, 2026

Choose a reason for hiding this comment

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

The "JAVA" part of this comment is intended to apply to the env variable rather than the Java property...

public static boolean isMetricsEnabled() {
String enableMetrics = System.getProperty(GOOGLE_CLOUD_ENABLE_METRICS);
if (enableMetrics == null) {
enableMetrics = System.getenv(GOOGLE_CLOUD_ENABLE_METRICS);
Copy link

Choose a reason for hiding this comment

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

Do we need to cache the result, or can we put a note on the method that it should be cached by clients (I'd like to avoid a read to env or properties on every RPC).

@diegomarquezp
Copy link
Contributor Author

I will close this for now and keep the feedback for the next iteration.

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

Labels

size: m Pull request size is medium.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants