diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-12-12 16:43:43 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-12 16:43:43 +0100 |
commit | 543e57c918969f0c19131a98cf28ac7f403d741b (patch) | |
tree | 5e42a7aa8cbd1dce5a7113638bec36a0bc18eaf4 | |
parent | 59251646dd29cdeb84ccb9600276955c599293c5 (diff) | |
parent | f30c2b36d91658b27d9cdae672aaab17cb4759fb (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.java | 15 |
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); |