aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-12-12 16:43:43 +0100
committerGitHub <noreply@github.com>2021-12-12 16:43:43 +0100
commit543e57c918969f0c19131a98cf28ac7f403d741b (patch)
tree5e42a7aa8cbd1dce5a7113638bec36a0bc18eaf4
parent59251646dd29cdeb84ccb9600276955c599293c5 (diff)
parentf30c2b36d91658b27d9cdae672aaab17cb4759fb (diff)
Merge pull request #20476 from vespa-engine/hmusum/exponential-backoffv7.514.59
Add exponential backoff if starting download fails [run-systemtest]
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java15
1 files changed, 13 insertions, 2 deletions
diff --git a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java
index e3edee2956f..73d40a40e6f 100644
--- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java
+++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java
@@ -57,14 +57,14 @@ public class FileReferenceDownloader {
int retryCount = 0;
Connection connection = connectionPool.getCurrent();
do {
+ backoff(retryCount);
+
if (FileDownloader.fileReferenceExists(fileReference, downloadDirectory))
return;
if (startDownloadRpc(fileReferenceDownload, retryCount, connection))
return;
- try { Thread.sleep(sleepBetweenRetries.toMillis()); } catch (InterruptedException e) { /* ignored */}
retryCount++;
-
// There is no one connection that will always work for each file reference (each file reference might
// exist on just one config server, and which one could be different for each file reference), so we
// should get a new connection for every retry
@@ -75,6 +75,17 @@ public class FileReferenceDownloader {
downloads.remove(fileReference);
}
+ private void backoff(int retryCount) {
+ if (retryCount > 0) {
+ try {
+ long sleepTime = Math.min(120_000, (long) (Math.pow(2, retryCount)) * sleepBetweenRetries.toMillis());
+ Thread.sleep(sleepTime);
+ } catch (InterruptedException e) {
+ /* ignored */
+ }
+ }
+ }
+
Future<Optional<File>> startDownload(FileReferenceDownload fileReferenceDownload) {
FileReference fileReference = fileReferenceDownload.fileReference();
Optional<FileReferenceDownload> inProgress = downloads.get(fileReference);