summaryrefslogtreecommitdiffstats
path: root/filedistribution
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2021-12-12 15:26:32 +0100
committerHarald Musum <musum@yahooinc.com>2021-12-12 15:26:32 +0100
commit742bed5153f05e816eaac3f7931523e8cc73f8aa (patch)
tree2a607e3cdeff4e4fc6b08a4962c1ebbad2bc5d36 /filedistribution
parentc2523f853ce2190dd50caf1f5a661baf50475db3 (diff)
Add exponential backoff if starting download fails
Diffstat (limited to 'filedistribution')
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java14
1 files changed, 12 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..1f7649b4dbc 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,16 @@ public class FileReferenceDownloader {
downloads.remove(fileReference);
}
+ private void backoff(int retryCount) {
+ if (retryCount > 0) {
+ try {
+ Thread.sleep((long) (Math.pow(2, retryCount)) * sleepBetweenRetries.toMillis());
+ } catch (InterruptedException e) {
+ /* ignored */
+ }
+ }
+ }
+
Future<Optional<File>> startDownload(FileReferenceDownload fileReferenceDownload) {
FileReference fileReference = fileReferenceDownload.fileReference();
Optional<FileReferenceDownload> inProgress = downloads.get(fileReference);