Skip to content

Commit 57baaea

Browse files
authored
fix(spanner): honor built-in metrics opt-out for gRPC metrics exporter (#12711)
Fixes: #12229 setBuiltInMetricsEnabled(false) was only disabling the Spanner API tracer metrics path. During channel setup, the client could still install gRPC built-in metrics/export wiring and create the Cloud Monitoring exporter. In practice, users could still see SpannerCloudMonitoringExporter attempts and monitoring.timeSeries.create permission failures even though startup logs reported: ``` Built-in metrics enabled: false ``` That behavior contradicted the documented contract that setBuiltInMetricsEnabled(false) opts out of client-side metrics.
1 parent 15faaaa commit 57baaea

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

java-spanner/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerOptions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2446,7 +2446,7 @@ public OpenTelemetry getBuiltInOpenTelemetry() {
24462446
}
24472447

24482448
public void enablegRPCMetrics(InstantiatingGrpcChannelProvider.Builder channelProviderBuilder) {
2449-
if (SpannerOptions.environment.isEnableGRPCBuiltInMetrics()) {
2449+
if (isEnableBuiltInMetrics() && SpannerOptions.environment.isEnableGRPCBuiltInMetrics()) {
24502450
this.builtInMetricsProvider.enableGrpcMetrics(
24512451
channelProviderBuilder,
24522452
this.getProjectId(),

java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpcTest.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1030,6 +1030,34 @@ public void testGrpcGcpOtelMetricsDisabledSkipsMeterInjection() throws Exception
10301030
assertNull(metricsOptions.getOpenTelemetryMeter());
10311031
}
10321032

1033+
@Test
1034+
public void testBuiltInMetricsDisabledSkipsGrpcBuiltInMetricsConfigurator() {
1035+
try {
1036+
SpannerOptions.useEnvironment(
1037+
new SpannerOptions.SpannerEnvironment() {
1038+
@Override
1039+
public boolean isEnableGRPCBuiltInMetrics() {
1040+
return true;
1041+
}
1042+
});
1043+
1044+
SpannerOptions options =
1045+
SpannerOptions.newBuilder()
1046+
.setProjectId("[PROJECT]")
1047+
.setCredentials(STATIC_CREDENTIALS)
1048+
.setBuiltInMetricsEnabled(false)
1049+
.build();
1050+
InstantiatingGrpcChannelProvider.Builder channelProviderBuilder =
1051+
InstantiatingGrpcChannelProvider.newBuilder();
1052+
1053+
options.enablegRPCMetrics(channelProviderBuilder);
1054+
1055+
assertNull(channelProviderBuilder.getChannelConfigurator());
1056+
} finally {
1057+
SpannerOptions.useDefaultEnvironment();
1058+
}
1059+
}
1060+
10331061
private static final class RecordingTransportChannelProvider implements TransportChannelProvider {
10341062
private final String host;
10351063
private final int port;

0 commit comments

Comments
 (0)