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

Commit 5f4a675

Browse files
chore: merge main into generate-libraries-main
2 parents 5c34ef4 + e67d869 commit 5f4a675

15 files changed

Lines changed: 690 additions & 1117 deletions

google-cloud-bigtable/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,8 @@
4545
<bigtable.cfe-data-batch-endpoint>batch-bigtable.googleapis.com:443</bigtable.cfe-data-batch-endpoint>
4646

4747
<!-- These are needed to compile the protobuf used by Changestream merging acceptance test. -->
48-
<test-protoc-grpc.version>1.65.0</test-protoc-grpc.version>
49-
<test-protoc.version>3.25.5</test-protoc.version>
48+
<test-protoc-grpc.version>1.76.3</test-protoc-grpc.version>
49+
<test-protoc.version>4.33.2</test-protoc.version>
5050
</properties>
5151

5252
<dependencyManagement>

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataClient.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,7 @@ public static BigtableDataClient create(BigtableDataSettings settings) throws IO
187187
*/
188188
static BigtableDataClient createWithClientContext(
189189
BigtableDataSettings settings, BigtableClientContext context) throws IOException {
190-
EnhancedBigtableStub stub =
191-
EnhancedBigtableStub.createWithClientContext(settings.getStubSettings(), context);
190+
EnhancedBigtableStub stub = new EnhancedBigtableStub(settings.getStubSettings(), context);
192191
return new BigtableDataClient(stub);
193192
}
194193

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataClientFactory.java

Lines changed: 22 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,8 @@
1616
package com.google.cloud.bigtable.data.v2;
1717

1818
import com.google.api.core.BetaApi;
19-
import com.google.api.gax.rpc.ClientContext;
19+
import com.google.bigtable.v2.InstanceName;
2020
import com.google.cloud.bigtable.data.v2.stub.BigtableClientContext;
21-
import com.google.cloud.bigtable.data.v2.stub.EnhancedBigtableStub;
2221
import java.io.IOException;
2322
import javax.annotation.Nonnull;
2423

@@ -75,8 +74,7 @@ public final class BigtableDataClientFactory implements AutoCloseable {
7574
public static BigtableDataClientFactory create(BigtableDataSettings defaultSettings)
7675
throws IOException {
7776
BigtableClientContext sharedClientContext =
78-
EnhancedBigtableStub.createBigtableClientContext(defaultSettings.getStubSettings());
79-
77+
BigtableClientContext.create(defaultSettings.getStubSettings());
8078
return new BigtableDataClientFactory(sharedClientContext, defaultSettings);
8179
}
8280

@@ -107,17 +105,11 @@ public void close() throws Exception {
107105
*/
108106
public BigtableDataClient createDefault() {
109107
try {
110-
ClientContext clientContext =
111-
sharedClientContext.getClientContext().toBuilder()
112-
.setTracerFactory(
113-
EnhancedBigtableStub.createBigtableTracerFactory(
114-
defaultSettings.getStubSettings(),
115-
sharedClientContext.getBuiltinOpenTelemetry(),
116-
sharedClientContext.getUserOpenTelemetry()))
117-
.build();
108+
BigtableClientContext ctx =
109+
sharedClientContext.createChild(
110+
sharedClientContext.getInstanceName(), sharedClientContext.getAppProfileId());
118111

119-
return BigtableDataClient.createWithClientContext(
120-
defaultSettings, sharedClientContext.withClientContext(clientContext));
112+
return BigtableDataClient.createWithClientContext(defaultSettings, ctx);
121113
} catch (IOException e) {
122114
// Should never happen because the connection has been established already
123115
throw new RuntimeException(
@@ -137,17 +129,12 @@ public BigtableDataClient createDefault() {
137129
public BigtableDataClient createForAppProfile(@Nonnull String appProfileId) throws IOException {
138130
BigtableDataSettings settings =
139131
defaultSettings.toBuilder().setAppProfileId(appProfileId).build();
132+
BigtableClientContext ctx =
133+
sharedClientContext.createChild(
134+
InstanceName.of(settings.getProjectId(), settings.getInstanceId()),
135+
settings.getAppProfileId());
140136

141-
ClientContext clientContext =
142-
sharedClientContext.getClientContext().toBuilder()
143-
.setTracerFactory(
144-
EnhancedBigtableStub.createBigtableTracerFactory(
145-
settings.getStubSettings(),
146-
sharedClientContext.getBuiltinOpenTelemetry(),
147-
sharedClientContext.getUserOpenTelemetry()))
148-
.build();
149-
return BigtableDataClient.createWithClientContext(
150-
settings, sharedClientContext.withClientContext(clientContext));
137+
return BigtableDataClient.createWithClientContext(settings, ctx);
151138
}
152139

153140
/**
@@ -167,18 +154,12 @@ public BigtableDataClient createForInstance(@Nonnull String projectId, @Nonnull
167154
.setInstanceId(instanceId)
168155
.setDefaultAppProfileId()
169156
.build();
157+
BigtableClientContext ctx =
158+
sharedClientContext.createChild(
159+
InstanceName.of(settings.getProjectId(), settings.getInstanceId()),
160+
settings.getAppProfileId());
170161

171-
ClientContext clientContext =
172-
sharedClientContext.getClientContext().toBuilder()
173-
.setTracerFactory(
174-
EnhancedBigtableStub.createBigtableTracerFactory(
175-
settings.getStubSettings(),
176-
sharedClientContext.getBuiltinOpenTelemetry(),
177-
sharedClientContext.getUserOpenTelemetry()))
178-
.build();
179-
180-
return BigtableDataClient.createWithClientContext(
181-
settings, sharedClientContext.withClientContext(clientContext));
162+
return BigtableDataClient.createWithClientContext(settings, ctx);
182163
}
183164

184165
/**
@@ -199,15 +180,11 @@ public BigtableDataClient createForInstance(
199180
.setInstanceId(instanceId)
200181
.setAppProfileId(appProfileId)
201182
.build();
202-
ClientContext clientContext =
203-
sharedClientContext.getClientContext().toBuilder()
204-
.setTracerFactory(
205-
EnhancedBigtableStub.createBigtableTracerFactory(
206-
settings.getStubSettings(),
207-
sharedClientContext.getBuiltinOpenTelemetry(),
208-
sharedClientContext.getUserOpenTelemetry()))
209-
.build();
210-
return BigtableDataClient.createWithClientContext(
211-
settings, sharedClientContext.withClientContext(clientContext));
183+
BigtableClientContext ctx =
184+
sharedClientContext.createChild(
185+
InstanceName.of(settings.getProjectId(), settings.getInstanceId()),
186+
settings.getAppProfileId());
187+
188+
return BigtableDataClient.createWithClientContext(settings, ctx);
212189
}
213190
}

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/BigtableDataSettings.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,6 @@ public boolean isRefreshingChannel() {
450450
*/
451451
@Deprecated
452452
public Builder setPrimingTableIds(String... tableIds) {
453-
stubSettings.setPrimedTableIds(tableIds);
454453
return this;
455454
}
456455

google-cloud-bigtable/src/main/java/com/google/cloud/bigtable/data/v2/stub/BigtableClientContext.java

Lines changed: 97 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,25 @@
2424
import com.google.api.gax.core.FixedExecutorProvider;
2525
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
2626
import com.google.api.gax.rpc.ClientContext;
27+
import com.google.api.gax.tracing.ApiTracerFactory;
2728
import com.google.auth.Credentials;
2829
import com.google.auth.oauth2.ServiceAccountJwtAccessCredentials;
2930
import com.google.bigtable.v2.InstanceName;
3031
import com.google.cloud.bigtable.data.v2.internal.JwtCredentialsWithAudience;
3132
import com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants;
3233
import com.google.cloud.bigtable.data.v2.stub.metrics.ChannelPoolMetricsTracer;
34+
import com.google.cloud.bigtable.data.v2.stub.metrics.CompositeTracerFactory;
3335
import com.google.cloud.bigtable.data.v2.stub.metrics.CustomOpenTelemetryMetricsProvider;
3436
import com.google.cloud.bigtable.data.v2.stub.metrics.Util;
3537
import com.google.cloud.bigtable.gaxx.grpc.BigtableTransportChannelProvider;
3638
import com.google.cloud.bigtable.gaxx.grpc.ChannelPrimer;
39+
import com.google.common.collect.ImmutableList;
3740
import io.grpc.ManagedChannelBuilder;
3841
import io.grpc.opentelemetry.GrpcOpenTelemetry;
42+
import io.opencensus.stats.Stats;
43+
import io.opencensus.stats.StatsRecorder;
44+
import io.opencensus.tags.Tagger;
45+
import io.opencensus.tags.Tags;
3946
import io.opentelemetry.api.OpenTelemetry;
4047
import io.opentelemetry.sdk.OpenTelemetrySdk;
4148
import java.io.IOException;
@@ -55,15 +62,30 @@ public class BigtableClientContext {
5562

5663
private static final Logger logger = Logger.getLogger(BigtableClientContext.class.getName());
5764

65+
private final boolean isChild;
66+
private final InstanceName instanceName;
67+
private final String appProfileId;
68+
private final ApiTracerFactory userTracerFactory;
5869
@Nullable private final OpenTelemetrySdk builtinOpenTelemetry;
5970
@Nullable private final OpenTelemetry userOpenTelemetry;
6071
private final ClientContext clientContext;
6172
// the background executor shared for OTEL instances and monitoring client and all other
6273
// background tasks
6374
private final ExecutorProvider backgroundExecutorProvider;
75+
private final Tagger ocTagger;
76+
private final StatsRecorder ocRecorder;
6477

6578
public static BigtableClientContext create(EnhancedBigtableStubSettings settings)
6679
throws IOException {
80+
return create(settings, Tags.getTagger(), Stats.getStatsRecorder());
81+
}
82+
83+
public static BigtableClientContext create(
84+
EnhancedBigtableStubSettings settings, Tagger ocTagger, StatsRecorder ocRecorder)
85+
throws IOException {
86+
InstanceName instanceName = InstanceName.of(settings.getProjectId(), settings.getInstanceId());
87+
String appProfileId = settings.getAppProfileId();
88+
6789
EnhancedBigtableStubSettings.Builder builder = settings.toBuilder();
6890

6991
// Set up credentials
@@ -85,6 +107,8 @@ public static BigtableClientContext create(EnhancedBigtableStubSettings settings
85107
FixedExecutorProvider.create(backgroundExecutor, shouldAutoClose);
86108
builder.setBackgroundExecutorProvider(executorProvider);
87109

110+
ApiTracerFactory userTracerFactory = settings.getTracerFactory();
111+
88112
// Set up OpenTelemetry
89113
@Nullable OpenTelemetry userOtel = null;
90114
if (settings.getMetricsProvider() instanceof CustomOpenTelemetryMetricsProvider) {
@@ -128,10 +152,7 @@ public static BigtableClientContext create(EnhancedBigtableStubSettings settings
128152
}
129153

130154
if (transportProvider != null) {
131-
// Set up cookie holder if routing cookie is enabled
132-
if (builder.getEnableRoutingCookie()) {
133-
setupCookieHolder(transportProvider);
134-
}
155+
setupCookieHolder(transportProvider);
135156

136157
ChannelPrimer channelPrimer = NoOpChannelPrimer.create();
137158

@@ -161,7 +182,17 @@ public static BigtableClientContext create(EnhancedBigtableStubSettings settings
161182
channelPoolMetricsTracer.start(clientContext.getExecutor());
162183
}
163184

164-
return new BigtableClientContext(clientContext, builtinOtel, userOtel, executorProvider);
185+
return new BigtableClientContext(
186+
false,
187+
instanceName,
188+
appProfileId,
189+
clientContext,
190+
userTracerFactory,
191+
builtinOtel,
192+
userOtel,
193+
ocTagger,
194+
ocRecorder,
195+
executorProvider);
165196
}
166197

167198
private static void configureGrpcOtel(
@@ -192,14 +223,53 @@ private static void configureGrpcOtel(
192223
}
193224

194225
private BigtableClientContext(
226+
boolean isChild,
227+
InstanceName instanceName,
228+
String appProfileId,
195229
ClientContext clientContext,
196-
@Nullable OpenTelemetrySdk internalOtel,
197-
@Nullable OpenTelemetry userOpenTelemetry,
198-
ExecutorProvider backgroundExecutorProvider) {
199-
this.clientContext = clientContext;
200-
this.userOpenTelemetry = userOpenTelemetry;
201-
this.builtinOpenTelemetry = internalOtel;
230+
ApiTracerFactory userTracerFactory,
231+
@Nullable OpenTelemetrySdk builtinOtel,
232+
@Nullable OpenTelemetry userOtel,
233+
Tagger ocTagger,
234+
StatsRecorder ocRecorder,
235+
ExecutorProvider backgroundExecutorProvider)
236+
throws IOException {
237+
this.isChild = isChild;
238+
this.instanceName = instanceName;
239+
this.appProfileId = appProfileId;
240+
241+
this.userTracerFactory = userTracerFactory;
242+
this.builtinOpenTelemetry = builtinOtel;
243+
this.userOpenTelemetry = userOtel;
244+
this.ocTagger = ocTagger;
245+
this.ocRecorder = ocRecorder;
202246
this.backgroundExecutorProvider = backgroundExecutorProvider;
247+
248+
ImmutableList.Builder<ApiTracerFactory> tracerFactories = ImmutableList.builder();
249+
tracerFactories
250+
.add(Util.createOCTracingFactory(instanceName, appProfileId))
251+
.add(Util.createOCMetricsFactory(instanceName, appProfileId, ocTagger, ocRecorder))
252+
.add(userTracerFactory);
253+
254+
if (builtinOtel != null) {
255+
tracerFactories.add(Util.createOtelMetricsFactory(builtinOtel, instanceName, appProfileId));
256+
}
257+
if (userOtel != null) {
258+
tracerFactories.add(Util.createOtelMetricsFactory(userOtel, instanceName, appProfileId));
259+
}
260+
261+
this.clientContext =
262+
clientContext.toBuilder()
263+
.setTracerFactory(new CompositeTracerFactory(tracerFactories.build()))
264+
.build();
265+
}
266+
267+
public InstanceName getInstanceName() {
268+
return instanceName;
269+
}
270+
271+
public String getAppProfileId() {
272+
return appProfileId;
203273
}
204274

205275
@Nullable
@@ -216,12 +286,26 @@ public ClientContext getClientContext() {
216286
return this.clientContext;
217287
}
218288

219-
public BigtableClientContext withClientContext(ClientContext clientContext) {
289+
public BigtableClientContext createChild(InstanceName instanceName, String appProfileId)
290+
throws IOException {
220291
return new BigtableClientContext(
221-
clientContext, builtinOpenTelemetry, userOpenTelemetry, backgroundExecutorProvider);
292+
true,
293+
instanceName,
294+
appProfileId,
295+
clientContext,
296+
userTracerFactory,
297+
builtinOpenTelemetry,
298+
userOpenTelemetry,
299+
ocTagger,
300+
ocRecorder,
301+
backgroundExecutorProvider);
222302
}
223303

224304
public void close() throws Exception {
305+
if (isChild) {
306+
return;
307+
}
308+
225309
for (BackgroundResource resource : clientContext.getBackgroundResources()) {
226310
resource.close();
227311
}

0 commit comments

Comments
 (0)