From 742bed5153f05e816eaac3f7931523e8cc73f8aa Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Sun, 12 Dec 2021 15:26:32 +0100 Subject: Add exponential backoff if starting download fails --- .../vespa/filedistribution/FileReferenceDownloader.java | 14 ++++++++++++-- 1 file 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> startDownload(FileReferenceDownload fileReferenceDownload) { FileReference fileReference = fileReferenceDownload.fileReference(); Optional inProgress = downloads.get(fileReference); -- cgit v1.2.3 From f30c2b36d91658b27d9cdae672aaab17cb4759fb Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Sun, 12 Dec 2021 16:41:25 +0100 Subject: Make sure sleep time never exceeds 120 seconds --- .../java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 1f7649b4dbc..73d40a40e6f 100644 --- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java +++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java @@ -78,7 +78,8 @@ public class FileReferenceDownloader { private void backoff(int retryCount) { if (retryCount > 0) { try { - Thread.sleep((long) (Math.pow(2, retryCount)) * sleepBetweenRetries.toMillis()); + long sleepTime = Math.min(120_000, (long) (Math.pow(2, retryCount)) * sleepBetweenRetries.toMillis()); + Thread.sleep(sleepTime); } catch (InterruptedException e) { /* ignored */ } -- cgit v1.2.3