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

Commit 1416736

Browse files
committed
Merge branch 'main' into PR #2663 to update
2 parents 7b93565 + 820acbe commit 1416736

22 files changed

Lines changed: 330 additions & 65 deletions

File tree

google-cloud-bigtable-bom/pom.xml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<modelVersion>4.0.0</modelVersion>
44
<groupId>com.google.cloud</groupId>
55
<artifactId>google-cloud-bigtable-bom</artifactId>
6-
<version>2.77.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
6+
<version>2.77.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable:current} -->
77
<packaging>pom</packaging>
88
<parent>
99
<groupId>com.google.cloud</groupId>
@@ -63,37 +63,37 @@
6363
<dependency>
6464
<groupId>com.google.cloud</groupId>
6565
<artifactId>google-cloud-bigtable</artifactId>
66-
<version>2.77.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
66+
<version>2.77.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable:current} -->
6767
</dependency>
6868
<dependency>
6969
<groupId>com.google.cloud</groupId>
7070
<artifactId>google-cloud-bigtable-emulator</artifactId>
71-
<version>0.214.1</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
71+
<version>0.214.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
7272
</dependency>
7373
<dependency>
7474
<groupId>com.google.cloud</groupId>
7575
<artifactId>google-cloud-bigtable-emulator-core</artifactId>
76-
<version>0.214.1</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
76+
<version>0.214.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
7777
</dependency>
7878
<dependency>
7979
<groupId>com.google.api.grpc</groupId>
8080
<artifactId>grpc-google-cloud-bigtable-admin-v2</artifactId>
81-
<version>2.77.1</version><!-- {x-version-update:grpc-google-cloud-bigtable-admin-v2:current} -->
81+
<version>2.77.2-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-bigtable-admin-v2:current} -->
8282
</dependency>
8383
<dependency>
8484
<groupId>com.google.api.grpc</groupId>
8585
<artifactId>grpc-google-cloud-bigtable-v2</artifactId>
86-
<version>2.77.1</version><!-- {x-version-update:grpc-google-cloud-bigtable-v2:current} -->
86+
<version>2.77.2-SNAPSHOT</version><!-- {x-version-update:grpc-google-cloud-bigtable-v2:current} -->
8787
</dependency>
8888
<dependency>
8989
<groupId>com.google.api.grpc</groupId>
9090
<artifactId>proto-google-cloud-bigtable-admin-v2</artifactId>
91-
<version>2.77.1</version><!-- {x-version-update:proto-google-cloud-bigtable-admin-v2:current} -->
91+
<version>2.77.2-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-bigtable-admin-v2:current} -->
9292
</dependency>
9393
<dependency>
9494
<groupId>com.google.api.grpc</groupId>
9595
<artifactId>proto-google-cloud-bigtable-v2</artifactId>
96-
<version>2.77.1</version><!-- {x-version-update:proto-google-cloud-bigtable-v2:current} -->
96+
<version>2.77.2-SNAPSHOT</version><!-- {x-version-update:proto-google-cloud-bigtable-v2:current} -->
9797
</dependency>
9898
</dependencies>
9999
</dependencyManagement>

google-cloud-bigtable-deps-bom/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
<groupId>com.google.cloud</groupId>
1515
<artifactId>google-cloud-bigtable-deps-bom</artifactId>
16-
<version>2.77.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
16+
<version>2.77.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable:current} -->
1717

1818
<packaging>pom</packaging>
1919
<name>Google Cloud Bigtable Dependency BOM</name>

google-cloud-bigtable-emulator-core/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
<parent>
88
<artifactId>google-cloud-bigtable-parent</artifactId>
99
<groupId>com.google.cloud</groupId>
10-
<version>2.77.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
10+
<version>2.77.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable:current} -->
1111
</parent>
1212
<name>Google Cloud Java - Bigtable Emulator Core</name>
1313

1414
<artifactId>google-cloud-bigtable-emulator-core</artifactId>
15-
<version>0.214.1</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
15+
<version>0.214.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
1616

1717
<description>
1818
A Java wrapper for the Cloud Bigtable emulator.

google-cloud-bigtable-emulator/pom.xml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<modelVersion>4.0.0</modelVersion>
66

77
<artifactId>google-cloud-bigtable-emulator</artifactId>
8-
<version>0.214.1</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
8+
<version>0.214.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
99
<name>Google Cloud Java - Bigtable Emulator</name>
1010
<url>https://github.com/googleapis/java-bigtable</url>
1111
<description>
@@ -14,7 +14,7 @@
1414
<parent>
1515
<groupId>com.google.cloud</groupId>
1616
<artifactId>google-cloud-bigtable-parent</artifactId>
17-
<version>2.77.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
17+
<version>2.77.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable:current} -->
1818
</parent>
1919
<scm>
2020
<connection>scm:git:git@github.com:googleapis/java-bigtable.git</connection>
@@ -81,14 +81,14 @@
8181
<dependency>
8282
<groupId>com.google.cloud</groupId>
8383
<artifactId>google-cloud-bigtable-deps-bom</artifactId>
84-
<version>2.77.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
84+
<version>2.77.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable:current} -->
8585
<type>pom</type>
8686
<scope>import</scope>
8787
</dependency>
8888
<dependency>
8989
<groupId>com.google.cloud</groupId>
9090
<artifactId>google-cloud-bigtable-bom</artifactId>
91-
<version>2.77.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
91+
<version>2.77.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable:current} -->
9292
<type>pom</type>
9393
<scope>import</scope>
9494
</dependency>
@@ -99,7 +99,7 @@
9999
<dependency>
100100
<groupId>com.google.cloud</groupId>
101101
<artifactId>google-cloud-bigtable-emulator-core</artifactId>
102-
<version>0.214.1</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
102+
<version>0.214.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
103103
</dependency>
104104

105105
<dependency>

google-cloud-bigtable/pom.xml

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
33
<modelVersion>4.0.0</modelVersion>
44
<artifactId>google-cloud-bigtable</artifactId>
5-
<version>2.77.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
5+
<version>2.77.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable:current} -->
66
<packaging>jar</packaging>
77
<name>Google Cloud Bigtable</name>
88
<url>https://github.com/googleapis/java-bigtable</url>
@@ -12,11 +12,11 @@
1212
<parent>
1313
<groupId>com.google.cloud</groupId>
1414
<artifactId>google-cloud-bigtable-parent</artifactId>
15-
<version>2.77.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
15+
<version>2.77.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable:current} -->
1616
</parent>
1717
<properties>
1818
<!-- The version that will be embedded in the published jar via maven-resources-plugin -->
19-
<java-bigtable.version>2.77.1</java-bigtable.version><!-- {x-version-update:google-cloud-bigtable:current} -->
19+
<java-bigtable.version>2.77.2-SNAPSHOT</java-bigtable.version><!-- {x-version-update:google-cloud-bigtable:current} -->
2020

2121
<site.installationModule>google-cloud-bigtable</site.installationModule>
2222

@@ -54,14 +54,14 @@
5454
<dependency>
5555
<groupId>com.google.cloud</groupId>
5656
<artifactId>google-cloud-bigtable-deps-bom</artifactId>
57-
<version>2.77.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
57+
<version>2.77.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable:current} -->
5858
<type>pom</type>
5959
<scope>import</scope>
6060
</dependency>
6161
<dependency>
6262
<groupId>com.google.cloud</groupId>
6363
<artifactId>google-cloud-bigtable-bom</artifactId>
64-
<version>2.77.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
64+
<version>2.77.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable:current} -->
6565
<type>pom</type>
6666
<scope>import</scope>
6767
</dependency>
@@ -253,6 +253,12 @@
253253
<artifactId>proto-google-cloud-monitoring-v3</artifactId>
254254
</dependency>
255255

256+
<!-- export custom metrics to cloud console -->
257+
<dependency>
258+
<groupId>com.google.cloud.opentelemetry</groupId>
259+
<artifactId>exporter-metrics</artifactId>
260+
</dependency>
261+
256262
<!-- Test dependencies -->
257263
<dependency>
258264
<groupId>com.google.api.grpc</groupId>

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/Version.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@
2020
@InternalApi("For internal use only")
2121
public final class Version {
2222
// {x-version-update-start:google-cloud-bigtable:current}
23-
public static String VERSION = "2.77.1";
23+
public static String VERSION = "2.77.2-SNAPSHOT";
2424
// {x-version-update-end}
2525
}

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/csm/MetricRegistry.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.google.cloud.bigtable.data.v2.internal.csm.metrics.ClientSessionOpenLatency;
2828
import com.google.cloud.bigtable.data.v2.internal.csm.metrics.ClientSessionUptime;
2929
import com.google.cloud.bigtable.data.v2.internal.csm.metrics.ClientTransportLatency;
30+
import com.google.cloud.bigtable.data.v2.internal.csm.metrics.CustomAttemptLatency;
3031
import com.google.cloud.bigtable.data.v2.internal.csm.metrics.GrpcMetric;
3132
import com.google.cloud.bigtable.data.v2.internal.csm.metrics.MetricWrapper;
3233
import com.google.cloud.bigtable.data.v2.internal.csm.metrics.PacemakerDelay;
@@ -87,6 +88,8 @@ public class MetricRegistry {
8788

8889
final ClientChannelPoolFallbackCount channelFallbackCountMetric;
8990

91+
final CustomAttemptLatency customAttemptLatencyMetric;
92+
9093
private final Map<String, MetricWrapper<?>> metrics = new HashMap<>();
9194
private final List<String> grpcMetricNames = new ArrayList<>();
9295

@@ -117,6 +120,8 @@ public MetricRegistry() {
117120

118121
channelFallbackCountMetric = register(new ClientChannelPoolFallbackCount());
119122

123+
customAttemptLatencyMetric = register(new CustomAttemptLatency());
124+
120125
// From
121126
// https://github.com/grpc/grpc-java/blob/31fdb6c2268b4b1c8ba6c995ee46c58e84a831aa/rls/src/main/java/io/grpc/rls/CachingRlsLbClient.java#L138-L165
122127
registerGrpcMetric(
@@ -226,6 +231,8 @@ public class RecorderRegistry {
226231

227232
public final ClientChannelPoolFallbackCount.Recorder channelFallbackCount;
228233

234+
public final CustomAttemptLatency.Recorder customAttemptLatency;
235+
229236
private RecorderRegistry(Meter meter, boolean disableInternalMetrics) {
230237
// Public metrics
231238
operationLatency = operationLatencyMetric.newRecorder(meter);
@@ -260,6 +267,8 @@ private RecorderRegistry(Meter meter, boolean disableInternalMetrics) {
260267
pacemakerDelay = pacemakerDelayMetric.newRecorder(meter);
261268

262269
channelFallbackCount = channelFallbackCountMetric.newRecorder(meter);
270+
271+
customAttemptLatency = customAttemptLatencyMetric.newRecorder(meter);
263272
}
264273
}
265274
}

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/csm/MetricsImpl.java

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import com.google.cloud.bigtable.data.v2.internal.csm.attributes.ClientInfo;
3131
import com.google.cloud.bigtable.data.v2.internal.csm.attributes.EnvInfo;
3232
import com.google.cloud.bigtable.data.v2.internal.csm.exporter.BigtableCloudMonitoringExporter;
33+
import com.google.cloud.bigtable.data.v2.internal.csm.exporter.BigtableFilteringExporter;
3334
import com.google.cloud.bigtable.data.v2.internal.csm.exporter.BigtablePeriodicReader;
3435
import com.google.cloud.bigtable.data.v2.internal.csm.opencensus.MetricsTracerFactory;
3536
import com.google.cloud.bigtable.data.v2.internal.csm.opencensus.RpcMeasureConstants;
@@ -52,6 +53,8 @@
5253
import com.google.cloud.bigtable.data.v2.internal.session.SessionPoolInfo;
5354
import com.google.cloud.bigtable.data.v2.internal.session.VRpcDescriptor;
5455
import com.google.cloud.bigtable.data.v2.stub.metrics.NoopMetricsProvider;
56+
import com.google.cloud.opentelemetry.metric.GoogleCloudMetricExporter;
57+
import com.google.cloud.opentelemetry.metric.MetricConfiguration;
5558
import com.google.common.base.Preconditions;
5659
import com.google.common.base.Splitter;
5760
import com.google.common.base.Suppliers;
@@ -68,17 +71,28 @@
6871
import io.opentelemetry.sdk.OpenTelemetrySdk;
6972
import io.opentelemetry.sdk.metrics.SdkMeterProvider;
7073
import io.opentelemetry.sdk.metrics.SdkMeterProviderBuilder;
74+
import io.opentelemetry.sdk.metrics.export.PeriodicMetricReader;
7175
import java.io.Closeable;
7276
import java.io.IOException;
77+
import java.time.Duration;
7378
import java.util.ArrayList;
7479
import java.util.List;
80+
import java.util.Optional;
7581
import java.util.concurrent.ScheduledExecutorService;
7682
import java.util.concurrent.ScheduledFuture;
7783
import java.util.concurrent.TimeUnit;
7884
import javax.annotation.Nullable;
7985
import javax.annotation.concurrent.GuardedBy;
8086

8187
public class MetricsImpl implements Metrics, Closeable {
88+
89+
public static final String CUSTOM_METRIC = "bigtable.internal.enable-custom-metric";
90+
91+
private static final boolean enableCustomMetric =
92+
Optional.ofNullable(System.getProperty(CUSTOM_METRIC))
93+
.map(Boolean::parseBoolean)
94+
.orElse(false);
95+
8296
private final ApiTracerFactory userTracerFactory;
8397
private final @Nullable OpenTelemetrySdk internalOtel;
8498
private final @Nullable MetricRegistry.RecorderRegistry internalRecorder;
@@ -196,7 +210,8 @@ public VRpcTracer newTableTracer(
196210
}
197211
ImmutableList.Builder<VRpcTracer> builder = ImmutableList.builder();
198212
builder.add(
199-
new VRpcTracerImpl(internalRecorder, poolInfo, descriptor.getMethodInfo(), deadline));
213+
new VRpcTracerImpl(
214+
internalRecorder, poolInfo, descriptor.getMethodInfo(), deadline, enableCustomMetric));
200215
if (userRecorder != null) {
201216
builder.add(new VRpcTracerImpl(userRecorder, poolInfo, descriptor.getMethodInfo(), deadline));
202217
}
@@ -300,8 +315,28 @@ public static OpenTelemetrySdk createBuiltinOtel(
300315
metricsEndpoint,
301316
universeDomain);
302317

303-
meterProvider.registerMetricReader(new BigtablePeriodicReader(exporter, executor));
304-
318+
meterProvider.registerMetricReader(
319+
new BigtablePeriodicReader(
320+
new BigtableFilteringExporter(
321+
exporter,
322+
input -> input.getName().startsWith("bigtable.googleapis.com/internal/client")),
323+
executor));
324+
325+
if (enableCustomMetric) {
326+
// Monitored resource and project id are detected at export time
327+
MetricConfiguration metricConfig =
328+
MetricConfiguration.builder()
329+
.setCredentials(credentials)
330+
.setInstrumentationLibraryLabelsEnabled(false)
331+
.build();
332+
meterProvider.registerMetricReader(
333+
PeriodicMetricReader.builder(
334+
new BigtableFilteringExporter(
335+
GoogleCloudMetricExporter.createWithConfiguration(metricConfig),
336+
input -> input.getName().startsWith("bigtable.custom")))
337+
.setInterval(Duration.ofMinutes(1))
338+
.build());
339+
}
305340
return OpenTelemetrySdk.builder().setMeterProvider(meterProvider.build()).build();
306341
}
307342

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/internal/csm/attributes/Util.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ public static String formatTransportType(@Nullable PeerInfo peerInfo) {
7979
.orElse(TransportType.TRANSPORT_TYPE_UNKNOWN));
8080
}
8181

82+
public static long formatAfeId(@Nullable PeerInfo peerInfo) {
83+
return Optional.ofNullable(peerInfo).map(PeerInfo::getApplicationFrontendId).orElse(0L);
84+
}
85+
8286
public static String transportTypeToString(TransportType transportType) {
8387
String label = transportTypeToStringWithoutFallback(transportType);
8488
if (label != null) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
/*
2+
* Copyright 2026 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.google.cloud.bigtable.data.v2.internal.csm.exporter;
17+
18+
import io.opentelemetry.sdk.common.CompletableResultCode;
19+
import io.opentelemetry.sdk.metrics.InstrumentType;
20+
import io.opentelemetry.sdk.metrics.data.AggregationTemporality;
21+
import io.opentelemetry.sdk.metrics.data.MetricData;
22+
import io.opentelemetry.sdk.metrics.export.MetricExporter;
23+
import java.util.Collection;
24+
import java.util.List;
25+
import java.util.function.Predicate;
26+
import java.util.stream.Collectors;
27+
28+
public class BigtableFilteringExporter implements MetricExporter {
29+
30+
private MetricExporter delegate;
31+
private Predicate<MetricData> filter;
32+
33+
public BigtableFilteringExporter(MetricExporter exporter, Predicate<MetricData> filter) {
34+
this.delegate = exporter;
35+
this.filter = filter;
36+
}
37+
38+
@Override
39+
public CompletableResultCode export(Collection<MetricData> metrics) {
40+
List<MetricData> filtered = metrics.stream().filter(filter).collect(Collectors.toList());
41+
return delegate.export(filtered);
42+
}
43+
44+
@Override
45+
public CompletableResultCode flush() {
46+
return delegate.flush();
47+
}
48+
49+
@Override
50+
public CompletableResultCode shutdown() {
51+
return delegate.shutdown();
52+
}
53+
54+
public void prepareForShutdown() {
55+
if (delegate instanceof BigtableCloudMonitoringExporter) {
56+
((BigtableCloudMonitoringExporter) delegate).prepareForShutdown();
57+
}
58+
}
59+
60+
@Override
61+
public AggregationTemporality getAggregationTemporality(InstrumentType instrumentType) {
62+
return delegate.getAggregationTemporality(instrumentType);
63+
}
64+
}

0 commit comments

Comments
 (0)