Skip to content

Commit eff4a09

Browse files
fix(bigquery): Make exponential backoff retry second based (#2212)
* fix(bigquery): Make exponential backoff retry second based - Currently these retries are doing retries in milliseconds, which is way too aggressive, the current retry steps are (1ms, 2ms, 4ms, 8ms, 16ms, 32ms, 64ms, 128ms, 256ms, 512ms, 1024ms, ...), it's highly likely the first 7 retries will fail with rate limiting specially in a big workload (specifically this is causing an issue in the Spark bigquery connector), I suspect the exponential retries here were meant to be in seconds (though even if it wasn't meant to, this might be a slightly better approach to reduce the load on the servers - The new steps would be: 1s, 2s, 4s, 8s, 16s, 32s, 60s (repeated till we exhaust the 5 minutes max retries) * Update retry base to 50ms * Update tests * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md * Avoid long overflow - Make the comparison happen on the double side then cast to long at the end to avoid overflow happening from the calculation itself - This was actually a bug from before, just wasn't happening because there was no 50 multiplier to get it into that state! --------- Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
1 parent 308e9d6 commit eff4a09

File tree

2 files changed

+3
-3
lines changed

2 files changed

+3
-3
lines changed

google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/ConnectionWorker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,7 @@ private void maybeWaitForInflightQuota() {
590590

591591
@VisibleForTesting
592592
static long calculateSleepTimeMilli(long retryCount) {
593-
return Math.min((long) Math.pow(2, retryCount), 60000);
593+
return (long) Math.min(Math.pow(2, retryCount) * 50, 60000);
594594
}
595595

596596
@VisibleForTesting

google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/ConnectionWorkerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -518,8 +518,8 @@ public void testStreamNameMismatch() throws Exception {
518518

519519
@Test
520520
public void testExponentialBackoff() throws Exception {
521-
assertThat(ConnectionWorker.calculateSleepTimeMilli(0)).isEqualTo(1);
522-
assertThat(ConnectionWorker.calculateSleepTimeMilli(5)).isEqualTo(32);
521+
assertThat(ConnectionWorker.calculateSleepTimeMilli(0)).isEqualTo(50);
522+
assertThat(ConnectionWorker.calculateSleepTimeMilli(5)).isEqualTo(1600);
523523
assertThat(ConnectionWorker.calculateSleepTimeMilli(100)).isEqualTo(60000);
524524
}
525525

0 commit comments

Comments
 (0)