summaryrefslogtreecommitdiffstats
path: root/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java
diff options
context:
space:
mode:
Diffstat (limited to 'filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java')
-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);