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

Commit 78ac37e

Browse files
chore: merge main into generate-libraries-main
2 parents 457c4dd + 62ffd1b commit 78ac37e

23 files changed

Lines changed: 440 additions & 84 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.70.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
6+
<version>2.70.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.70.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
66+
<version>2.70.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.207.1</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
71+
<version>0.207.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.207.1</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
76+
<version>0.207.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.70.1</version><!-- {x-version-update:grpc-google-cloud-bigtable-admin-v2:current} -->
81+
<version>2.70.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.70.1</version><!-- {x-version-update:grpc-google-cloud-bigtable-v2:current} -->
86+
<version>2.70.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.70.1</version><!-- {x-version-update:proto-google-cloud-bigtable-admin-v2:current} -->
91+
<version>2.70.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.70.1</version><!-- {x-version-update:proto-google-cloud-bigtable-v2:current} -->
96+
<version>2.70.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.70.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
16+
<version>2.70.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.70.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
10+
<version>2.70.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.207.1</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
15+
<version>0.207.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.207.1</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
8+
<version>0.207.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.70.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
17+
<version>2.70.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.70.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
84+
<version>2.70.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.70.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
91+
<version>2.70.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.207.1</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
102+
<version>0.207.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable-emulator:current} -->
103103
</dependency>
104104

105105
<dependency>

google-cloud-bigtable/pom.xml

Lines changed: 5 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.70.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
5+
<version>2.70.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.70.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
15+
<version>2.70.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.70.1</java-bigtable.version><!-- {x-version-update:google-cloud-bigtable:current} -->
19+
<java-bigtable.version>2.70.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.70.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
57+
<version>2.70.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.70.1</version><!-- {x-version-update:google-cloud-bigtable:current} -->
64+
<version>2.70.2-SNAPSHOT</version><!-- {x-version-update:google-cloud-bigtable:current} -->
6565
<type>pom</type>
6666
<scope>import</scope>
6767
</dependency>

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.70.1";
23+
public static String VERSION = "2.70.2-SNAPSHOT";
2424
// {x-version-update-end}
2525
}

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

Lines changed: 49 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
*/
1616
package com.google.cloud.bigtable.data.v2.stub;
1717

18+
import static com.google.cloud.bigtable.data.v2.stub.metrics.Util.extractStatus;
19+
1820
import com.google.api.gax.rpc.ApiCallContext;
1921
import com.google.api.gax.rpc.DeadlineExceededException;
2022
import com.google.api.gax.rpc.ResourceExhaustedException;
@@ -37,6 +39,7 @@
3739
import java.util.concurrent.atomic.AtomicReference;
3840
import java.util.logging.Logger;
3941
import javax.annotation.Nonnull;
42+
import javax.annotation.Nullable;
4043

4144
class RateLimitingServerStreamingCallable
4245
extends ServerStreamingCallable<MutateRowsRequest, MutateRowsResponse> {
@@ -69,6 +72,8 @@ class RateLimitingServerStreamingCallable
6972

7073
private final ServerStreamingCallable<MutateRowsRequest, MutateRowsResponse> innerCallable;
7174

75+
private BigtableTracer bigtableTracer;
76+
7277
RateLimitingServerStreamingCallable(
7378
@Nonnull ServerStreamingCallable<MutateRowsRequest, MutateRowsResponse> innerCallable) {
7479
this.limiter = new ConditionalRateLimiter(DEFAULT_QPS);
@@ -84,8 +89,8 @@ public void call(
8489
limiter.acquire();
8590
stopwatch.stop();
8691
if (context.getTracer() instanceof BigtableTracer) {
87-
((BigtableTracer) context.getTracer())
88-
.batchRequestThrottled(stopwatch.elapsed(TimeUnit.NANOSECONDS));
92+
bigtableTracer = (BigtableTracer) context.getTracer();
93+
bigtableTracer.batchRequestThrottled(stopwatch.elapsed(TimeUnit.NANOSECONDS));
8994
}
9095
RateLimitingResponseObserver innerObserver = new RateLimitingResponseObserver(responseObserver);
9196
innerCallable.call(request, innerObserver, context);
@@ -104,7 +109,10 @@ static class ConditionalRateLimiter {
104109

105110
public ConditionalRateLimiter(long defaultQps) {
106111
limiter = RateLimiter.create(defaultQps);
107-
logger.info("Rate limiting is initiated (but disabled) with rate of " + defaultQps + " QPS.");
112+
logger.info(
113+
"Batch write flow control: rate limiter is initiated (but disabled) with rate of "
114+
+ defaultQps
115+
+ " QPS.");
108116
}
109117

110118
/**
@@ -128,7 +136,7 @@ public void tryDisable() {
128136
if (now.isAfter(nextTime)) {
129137
boolean wasEnabled = this.enabled.getAndSet(false);
130138
if (wasEnabled) {
131-
logger.info("Rate limiter is disabled.");
139+
logger.info("Batch write flow control: rate limiter is disabled.");
132140
}
133141
// No need to update nextRateUpdateTime, any new RateLimitInfo can enable rate limiting and
134142
// update the rate again.
@@ -139,7 +147,7 @@ public void tryDisable() {
139147
public void enable() {
140148
boolean wasEnabled = this.enabled.getAndSet(true);
141149
if (!wasEnabled) {
142-
logger.info("Rate limiter is enabled.");
150+
logger.info("Batch write flow control: rate limiter is enabled.");
143151
}
144152
}
145153

@@ -158,31 +166,52 @@ public double getRate() {
158166
* @param rate The new rate of the rate limiter.
159167
* @param period The period during which rate should not be updated again and the rate limiter
160168
* should not be disabled.
169+
* @param bigtableTracer The tracer for exporting client-side metrics.
170+
* @param factor The capped factor that we're trying to apply.
171+
* @param status The status of the response from which the factor is retrieved or derived.
161172
*/
162-
public void trySetRate(double rate, Duration period) {
173+
public void trySetRate(
174+
double rate,
175+
Duration period,
176+
@Nullable BigtableTracer bigtableTracer,
177+
double factor,
178+
@Nullable Throwable status) {
163179
Instant nextTime = nextRateUpdateTime.get();
164180
Instant now = Instant.now();
165181

166182
if (now.isBefore(nextTime)) {
183+
if (bigtableTracer != null) {
184+
bigtableTracer.addBatchWriteFlowControlFactor(factor, status, false);
185+
}
167186
return;
168187
}
169188

170189
Instant newNextTime = now.plusSeconds(period.getSeconds());
171190

172191
if (!nextRateUpdateTime.compareAndSet(nextTime, newNextTime)) {
173192
// Someone else updated it already.
193+
if (bigtableTracer != null) {
194+
bigtableTracer.addBatchWriteFlowControlFactor(factor, status, false);
195+
}
174196
return;
175197
}
176198
final double oldRate = limiter.getRate();
177199
limiter.setRate(rate);
178200
logger.info(
179-
"Updated max rate from "
201+
"Batch write flow control: updated max rate from "
180202
+ oldRate
181203
+ " to "
182204
+ rate
205+
+ " applied factor "
206+
+ factor
183207
+ " with period "
184208
+ period.getSeconds()
185-
+ " seconds.");
209+
+ " seconds. Status="
210+
+ extractStatus(status));
211+
if (bigtableTracer != null) {
212+
bigtableTracer.setBatchWriteFlowControlTargetQps(rate);
213+
bigtableTracer.addBatchWriteFlowControlFactor(factor, status, true);
214+
}
186215
}
187216

188217
@VisibleForTesting
@@ -215,17 +244,21 @@ private boolean hasValidRateLimitInfo(MutateRowsResponse response) {
215244
// have presence even thought it's marked as "optional". Check the factor and
216245
// period to make sure they're not 0.
217246
if (!response.hasRateLimitInfo()) {
218-
logger.finest("Response carries no RateLimitInfo");
247+
logger.finest("Batch write flow control: response carries no RateLimitInfo");
219248
return false;
220249
}
221250

222251
if (response.getRateLimitInfo().getFactor() <= 0
223252
|| response.getRateLimitInfo().getPeriod().getSeconds() <= 0) {
224-
logger.finest("Response carries invalid RateLimitInfo=" + response.getRateLimitInfo());
253+
logger.finest(
254+
"Batch write flow control: response carries invalid RateLimitInfo="
255+
+ response.getRateLimitInfo());
225256
return false;
226257
}
227258

228-
logger.finest("Response carries valid RateLimitInfo=" + response.getRateLimitInfo());
259+
logger.finest(
260+
"Batch write flow control: response carries valid RateLimitInfo="
261+
+ response.getRateLimitInfo());
229262
return true;
230263
}
231264

@@ -236,7 +269,8 @@ protected void onResponseImpl(MutateRowsResponse response) {
236269
RateLimitInfo info = response.getRateLimitInfo();
237270
updateQps(
238271
info.getFactor(),
239-
Duration.ofSeconds(com.google.protobuf.util.Durations.toSeconds(info.getPeriod())));
272+
Duration.ofSeconds(com.google.protobuf.util.Durations.toSeconds(info.getPeriod())),
273+
null);
240274
} else {
241275
limiter.tryDisable();
242276
}
@@ -250,7 +284,7 @@ protected void onErrorImpl(Throwable t) {
250284
if (t instanceof DeadlineExceededException
251285
|| t instanceof UnavailableException
252286
|| t instanceof ResourceExhaustedException) {
253-
updateQps(MIN_FACTOR, DEFAULT_PERIOD);
287+
updateQps(MIN_FACTOR, DEFAULT_PERIOD, t);
254288
}
255289
outerObserver.onError(t);
256290
}
@@ -260,11 +294,11 @@ protected void onCompleteImpl() {
260294
outerObserver.onComplete();
261295
}
262296

263-
private void updateQps(double factor, Duration period) {
297+
private void updateQps(double factor, Duration period, @Nullable Throwable status) {
264298
double cappedFactor = Math.min(Math.max(factor, MIN_FACTOR), MAX_FACTOR);
265299
double currentRate = limiter.getRate();
266300
double cappedRate = Math.min(Math.max(currentRate * cappedFactor, MIN_QPS), MAX_QPS);
267-
limiter.trySetRate(cappedRate, period);
301+
limiter.trySetRate(cappedRate, period, bigtableTracer, cappedFactor, status);
268302
}
269303
}
270304

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

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package com.google.cloud.bigtable.data.v2.stub.metrics;
1717

1818
import com.google.api.core.BetaApi;
19+
import com.google.api.core.InternalApi;
1920
import com.google.api.gax.rpc.ApiCallContext;
2021
import com.google.api.gax.tracing.ApiTracer;
2122
import com.google.api.gax.tracing.BaseApiTracer;
@@ -115,4 +116,25 @@ public void grpcMessageSent() {
115116
public void setTotalTimeoutDuration(Duration totalTimeoutDuration) {
116117
// noop
117118
}
119+
120+
/**
121+
* Record the target QPS for batch write flow control.
122+
*
123+
* @param targetQps The new target QPS for the client.
124+
*/
125+
@InternalApi
126+
public void setBatchWriteFlowControlTargetQps(double targetQps) {}
127+
128+
/**
129+
* Record the factors received from server-side for batch write flow control. The factors are
130+
* capped by min and max allowed factor values. Status and whether the factor was actually applied
131+
* are also recorded.
132+
*
133+
* @param factor Capped factor from server-side. For non-OK response, min factor is used.
134+
* @param status The status of the response from which the factor is retrieved or derived.
135+
* @param applied Whether the factor was actually applied.
136+
*/
137+
@InternalApi
138+
public void addBatchWriteFlowControlFactor(
139+
double factor, @Nullable Throwable status, boolean applied) {}
118140
}

0 commit comments

Comments
 (0)