Skip to content

Commit 871e6a3

Browse files
chore: clean fallback for skipping trailers (#2770)
* chore: clean fallback for skipping trailers This feature is no longer experimental Change-Id: I0685f78dae580111f52edf6783ba2a118768ca29 * chore: generate libraries at Mon Feb 2 23:09:09 UTC 2026 --------- Co-authored-by: cloud-java-bot <cloud-java-bot@google.com>
1 parent 52d5ffe commit 871e6a3

7 files changed

Lines changed: 79 additions & 289 deletions

File tree

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

Lines changed: 25 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import static com.google.cloud.bigtable.data.v2.stub.metrics.BuiltinMetricsConstants.INSTANCE_ID_KEY;
2222

2323
import com.google.api.core.ApiFuture;
24-
import com.google.api.core.ApiFutures;
2524
import com.google.api.core.BetaApi;
2625
import com.google.api.core.InternalApi;
2726
import com.google.api.gax.batching.Batcher;
@@ -112,7 +111,6 @@
112111
import com.google.cloud.bigtable.data.v2.stub.readrows.FilterMarkerRowsCallable;
113112
import com.google.cloud.bigtable.data.v2.stub.readrows.LargeReadRowsResumptionStrategy;
114113
import com.google.cloud.bigtable.data.v2.stub.readrows.ReadRowsBatchingDescriptor;
115-
import com.google.cloud.bigtable.data.v2.stub.readrows.ReadRowsFirstCallable;
116114
import com.google.cloud.bigtable.data.v2.stub.readrows.ReadRowsResumptionStrategy;
117115
import com.google.cloud.bigtable.data.v2.stub.readrows.ReadRowsRetryCompletedCallable;
118116
import com.google.cloud.bigtable.data.v2.stub.readrows.ReadRowsUserCallable;
@@ -131,7 +129,6 @@
131129
import com.google.common.base.Preconditions;
132130
import com.google.common.collect.ImmutableList;
133131
import com.google.common.collect.ImmutableMap;
134-
import com.google.common.util.concurrent.MoreExecutors;
135132
import com.google.protobuf.ByteString;
136133
import io.grpc.MethodDescriptor;
137134
import io.opencensus.stats.Stats;
@@ -404,52 +401,31 @@ public <RowT> ServerStreamingCallable<Query, RowT> createReadRowsCallable(
404401
*/
405402
public <RowT> UnaryCallable<Query, RowT> createReadRowCallable(RowAdapter<RowT> rowAdapter) {
406403
ClientContext clientContext = bigtableClientContext.getClientContext();
407-
if (!settings.getEnableSkipTrailers()) {
408-
ServerStreamingCallable<ReadRowsRequest, RowT> readRowsCallable =
409-
createReadRowsBaseCallable(
410-
ServerStreamingCallSettings.<ReadRowsRequest, Row>newBuilder()
411-
.setRetryableCodes(settings.readRowSettings().getRetryableCodes())
412-
.setRetrySettings(settings.readRowSettings().getRetrySettings())
413-
.setIdleTimeout(settings.readRowSettings().getRetrySettings().getTotalTimeout())
414-
.build(),
415-
rowAdapter);
416-
417-
ReadRowsUserCallable<RowT> readRowCallable =
418-
new ReadRowsUserCallable<>(readRowsCallable, requestContext);
419-
ReadRowsFirstCallable<RowT> firstRow = new ReadRowsFirstCallable<>(readRowCallable);
420-
UnaryCallable<Query, RowT> traced =
421-
new TracedUnaryCallable<>(
422-
firstRow, clientContext.getTracerFactory(), getSpanName("ReadRow"));
423-
return traced.withDefaultCallContext(
424-
clientContext
425-
.getDefaultCallContext()
426-
.withRetrySettings(settings.readRowSettings().getRetrySettings()));
427-
} else {
428-
ServerStreamingCallable<ReadRowsRequest, RowT> readRowsCallable =
429-
createReadRowsBaseCallable(
430-
ServerStreamingCallSettings.<ReadRowsRequest, Row>newBuilder()
431-
.setRetryableCodes(settings.readRowSettings().getRetryableCodes())
432-
.setRetrySettings(settings.readRowSettings().getRetrySettings())
433-
.setIdleTimeoutDuration(Duration.ZERO)
434-
.setWaitTimeoutDuration(Duration.ZERO)
435-
.build(),
436-
rowAdapter,
437-
new SimpleStreamResumptionStrategy<>());
438-
ServerStreamingCallable<Query, RowT> readRowCallable =
439-
new TransformingServerStreamingCallable<>(
440-
readRowsCallable,
441-
(query) -> query.limit(1).toProto(requestContext),
442-
Functions.identity());
443-
444-
return new BigtableUnaryOperationCallable<>(
445-
readRowCallable,
446-
clientContext
447-
.getDefaultCallContext()
448-
.withRetrySettings(settings.readRowSettings().getRetrySettings()),
449-
clientContext.getTracerFactory(),
450-
getSpanName("ReadRow"),
451-
/* allowNoResponses= */ true);
452-
}
404+
405+
ServerStreamingCallable<ReadRowsRequest, RowT> readRowsCallable =
406+
createReadRowsBaseCallable(
407+
ServerStreamingCallSettings.<ReadRowsRequest, Row>newBuilder()
408+
.setRetryableCodes(settings.readRowSettings().getRetryableCodes())
409+
.setRetrySettings(settings.readRowSettings().getRetrySettings())
410+
.setIdleTimeoutDuration(Duration.ZERO)
411+
.setWaitTimeoutDuration(Duration.ZERO)
412+
.build(),
413+
rowAdapter,
414+
new SimpleStreamResumptionStrategy<>());
415+
ServerStreamingCallable<Query, RowT> readRowCallable =
416+
new TransformingServerStreamingCallable<>(
417+
readRowsCallable,
418+
(query) -> query.limit(1).toProto(requestContext),
419+
Functions.identity());
420+
421+
return new BigtableUnaryOperationCallable<>(
422+
readRowCallable,
423+
clientContext
424+
.getDefaultCallContext()
425+
.withRetrySettings(settings.readRowSettings().getRetrySettings()),
426+
clientContext.getTracerFactory(),
427+
getSpanName("ReadRow"),
428+
/* allowNoResponses= */ true);
453429
}
454430

455431
private <ReqT, RowT> ServerStreamingCallable<ReadRowsRequest, RowT> createReadRowsBaseCallable(
@@ -1292,67 +1268,6 @@ private <BaseReqT, BaseRespT, ReqT, RespT> UnaryCallable<ReqT, RespT> createUnar
12921268
UnaryCallSettings<ReqT, RespT> callSettings,
12931269
Function<ReqT, BaseReqT> requestTransformer,
12941270
Function<BaseRespT, RespT> responseTranformer) {
1295-
if (settings.getEnableSkipTrailers()) {
1296-
return createUnaryCallableNew(
1297-
methodDescriptor, headerParamsFn, callSettings, requestTransformer, responseTranformer);
1298-
} else {
1299-
return createUnaryCallableOld(
1300-
methodDescriptor, headerParamsFn, callSettings, requestTransformer, responseTranformer);
1301-
}
1302-
}
1303-
1304-
private <BaseReqT, BaseRespT, ReqT, RespT> UnaryCallable<ReqT, RespT> createUnaryCallableOld(
1305-
MethodDescriptor<BaseReqT, BaseRespT> methodDescriptor,
1306-
RequestParamsExtractor<BaseReqT> headerParamsFn,
1307-
UnaryCallSettings<ReqT, RespT> callSettings,
1308-
Function<ReqT, BaseReqT> requestTransformer,
1309-
Function<BaseRespT, RespT> responseTranformer) {
1310-
1311-
UnaryCallable<BaseReqT, BaseRespT> base =
1312-
GrpcRawCallableFactory.createUnaryCallable(
1313-
GrpcCallSettings.<BaseReqT, BaseRespT>newBuilder()
1314-
.setMethodDescriptor(methodDescriptor)
1315-
.setParamsExtractor(headerParamsFn)
1316-
.build(),
1317-
callSettings.getRetryableCodes());
1318-
1319-
UnaryCallable<BaseReqT, BaseRespT> withStatsHeaders = new StatsHeadersUnaryCallable<>(base);
1320-
1321-
UnaryCallable<BaseReqT, BaseRespT> withBigtableTracer =
1322-
new BigtableTracerUnaryCallable<>(withStatsHeaders);
1323-
1324-
UnaryCallable<BaseReqT, BaseRespT> retrying = withRetries(withBigtableTracer, callSettings);
1325-
1326-
UnaryCallable<ReqT, RespT> transformed =
1327-
new UnaryCallable<ReqT, RespT>() {
1328-
@Override
1329-
public ApiFuture<RespT> futureCall(ReqT reqT, ApiCallContext apiCallContext) {
1330-
ApiFuture<BaseRespT> f =
1331-
retrying.futureCall(requestTransformer.apply(reqT), apiCallContext);
1332-
return ApiFutures.transform(
1333-
f, responseTranformer::apply, MoreExecutors.directExecutor());
1334-
}
1335-
};
1336-
1337-
UnaryCallable<ReqT, RespT> traced =
1338-
new TracedUnaryCallable<>(
1339-
transformed,
1340-
bigtableClientContext.getClientContext().getTracerFactory(),
1341-
getSpanName(methodDescriptor.getBareMethodName()));
1342-
1343-
return traced.withDefaultCallContext(
1344-
bigtableClientContext
1345-
.getClientContext()
1346-
.getDefaultCallContext()
1347-
.withRetrySettings(callSettings.getRetrySettings()));
1348-
}
1349-
1350-
private <BaseReqT, BaseRespT, ReqT, RespT> UnaryCallable<ReqT, RespT> createUnaryCallableNew(
1351-
MethodDescriptor<BaseReqT, BaseRespT> methodDescriptor,
1352-
RequestParamsExtractor<BaseReqT> headerParamsFn,
1353-
UnaryCallSettings<ReqT, RespT> callSettings,
1354-
Function<ReqT, BaseReqT> requestTransformer,
1355-
Function<BaseRespT, RespT> responseTranformer) {
13561271

13571272
ServerStreamingCallable<BaseReqT, BaseRespT> base =
13581273
GrpcRawCallableFactory.createServerStreamingCallable(

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

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@
6767
import java.util.Collections;
6868
import java.util.List;
6969
import java.util.Map;
70-
import java.util.Optional;
7170
import java.util.Set;
7271
import java.util.concurrent.ScheduledExecutorService;
7372
import java.util.logging.Logger;
@@ -119,11 +118,6 @@ public class EnhancedBigtableStubSettings extends StubSettings<EnhancedBigtableS
119118
private static final boolean DIRECT_PATH_BOUND_TOKEN_DISABLED =
120119
Boolean.parseBoolean(System.getenv("CBT_DISABLE_DIRECTPATH_BOUND_TOKEN"));
121120

122-
private static final boolean SKIP_TRAILERS =
123-
Optional.ofNullable(System.getenv("CBT_SKIP_HEADERS"))
124-
.map(Boolean::parseBoolean)
125-
.orElse(true);
126-
127121
private static final Set<Code> IDEMPOTENT_RETRY_CODES =
128122
ImmutableSet.of(Code.DEADLINE_EXCEEDED, Code.UNAVAILABLE);
129123

@@ -268,7 +262,6 @@ public class EnhancedBigtableStubSettings extends StubSettings<EnhancedBigtableS
268262
private ImmutableList<String> primedTableIds;
269263
private final boolean enableRoutingCookie;
270264
private final boolean enableRetryInfo;
271-
private final boolean enableSkipTrailers;
272265

273266
private final ServerStreamingCallSettings<Query, Row> readRowsSettings;
274267
private final UnaryCallSettings<Query, Row> readRowSettings;
@@ -318,7 +311,6 @@ private EnhancedBigtableStubSettings(Builder builder) {
318311
primedTableIds = builder.primedTableIds;
319312
enableRoutingCookie = builder.enableRoutingCookie;
320313
enableRetryInfo = builder.enableRetryInfo;
321-
enableSkipTrailers = builder.enableSkipTrailers;
322314
metricsProvider = builder.metricsProvider;
323315
metricsEndpoint = builder.metricsEndpoint;
324316
internalMetricsProvider = builder.internalMetricsProvider;
@@ -413,10 +405,6 @@ public boolean getEnableRetryInfo() {
413405
return enableRetryInfo;
414406
}
415407

416-
boolean getEnableSkipTrailers() {
417-
return enableSkipTrailers;
418-
}
419-
420408
/**
421409
* Gets the Google Cloud Monitoring endpoint for publishing client side metrics. If it's null,
422410
* client will publish metrics to the default monitoring endpoint.
@@ -769,7 +757,6 @@ public static class Builder extends StubSettings.Builder<EnhancedBigtableStubSet
769757
private String jwtAudience;
770758
private boolean enableRoutingCookie;
771759
private boolean enableRetryInfo;
772-
private boolean enableSkipTrailers;
773760

774761
private final ServerStreamingCallSettings.Builder<Query, Row> readRowsSettings;
775762
private final UnaryCallSettings.Builder<Query, Row> readRowSettings;
@@ -810,7 +797,6 @@ private Builder() {
810797
setCredentialsProvider(defaultCredentialsProviderBuilder().build());
811798
this.enableRoutingCookie = true;
812799
this.enableRetryInfo = true;
813-
this.enableSkipTrailers = SKIP_TRAILERS;
814800
metricsProvider = DefaultMetricsProvider.INSTANCE;
815801
this.internalMetricsProvider = DEFAULT_INTERNAL_OTEL_PROVIDER;
816802
this.jwtAudience = DEFAULT_DATA_JWT_AUDIENCE;
@@ -1223,11 +1209,6 @@ public boolean getEnableRetryInfo() {
12231209
return enableRetryInfo;
12241210
}
12251211

1226-
Builder setEnableSkipTrailers(boolean enabled) {
1227-
this.enableSkipTrailers = enabled;
1228-
return this;
1229-
}
1230-
12311212
/** Returns the builder for the settings used for calls to readRows. */
12321213
public ServerStreamingCallSettings.Builder<Query, Row> readRowsSettings() {
12331214
return readRowsSettings;
@@ -1360,7 +1341,6 @@ public String toString() {
13601341
.add("primedTableIds", primedTableIds)
13611342
.add("enableRoutingCookie", enableRoutingCookie)
13621343
.add("enableRetryInfo", enableRetryInfo)
1363-
.add("enableSkipTrailers", enableSkipTrailers)
13641344
.add("readRowsSettings", readRowsSettings)
13651345
.add("readRowSettings", readRowSettings)
13661346
.add("sampleRowKeysSettings", sampleRowKeysSettings)

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

Lines changed: 0 additions & 79 deletions
This file was deleted.

google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubSettingsTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -995,7 +995,6 @@ public void enableRetryInfoFalseValueTest() throws IOException {
995995
"primedTableIds",
996996
"enableRoutingCookie",
997997
"enableRetryInfo",
998-
"enableSkipTrailers",
999998
"readRowsSettings",
1000999
"readRowSettings",
10011000
"sampleRowKeysSettings",

google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/SkipTrailersTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public void setUp() throws Exception {
102102
.setInstanceId(INSTANCE_ID)
103103
.setMetricsProvider(NoopMetricsProvider.INSTANCE)
104104
.setCredentialsProvider(NoCredentialsProvider.create());
105-
clientBuilder.stubSettings().setEnableSkipTrailers(true).setTracerFactory(tracerFactory);
105+
clientBuilder.stubSettings().setTracerFactory(tracerFactory);
106106

107107
client = BigtableDataClient.create(clientBuilder.build());
108108
}

0 commit comments

Comments
 (0)