summaryrefslogtreecommitdiffstats
path: root/filedistribution
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2018-03-05 22:14:04 +0100
committerHarald Musum <musum@oath.com>2018-03-05 22:14:04 +0100
commit50476bc875dba422ab0937881ff514966ff3bb6e (patch)
tree6208957ec6f721ceaf19f37978911ab27f957517 /filedistribution
parent637f92465afe8866849d61fd1ed768e44b82c731 (diff)
Make sure to remove from download queue if download fails, else
we will never try to download again, even if there is an external request for the file reference again
Diffstat (limited to 'filedistribution')
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDownloader.java2
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java7
-rw-r--r--filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileDownloaderTest.java4
3 files changed, 11 insertions, 2 deletions
diff --git a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDownloader.java b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDownloader.java
index bed38bdcac6..41967c72357 100644
--- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDownloader.java
+++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDownloader.java
@@ -50,6 +50,8 @@ public class FileDownloader {
try {
return getFutureFile(fileReference).get(timeout.toMillis(), TimeUnit.MILLISECONDS);
} catch (InterruptedException | ExecutionException | TimeoutException e) {
+ log.log(LogLevel.INFO, "Failed downloading file, removing from download queue");
+ fileReferenceDownloader.failedDownloading(fileReference);
return Optional.empty();
}
}
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 92c483fc3b1..e4ef885c083 100644
--- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java
+++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java
@@ -100,6 +100,13 @@ public class FileReferenceDownloader {
}
}
+ void failedDownloading(FileReference fileReference) {
+ synchronized (downloads) {
+ downloadStatus.put(fileReference, 0.0);
+ downloads.remove(fileReference);
+ }
+ }
+
private boolean startDownloadRpc(FileReference fileReference) {
Connection connection = connectionPool.getCurrent();
Request request = new Request("filedistribution.serveFile");
diff --git a/filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileDownloaderTest.java b/filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileDownloaderTest.java
index c8d9e0a3eda..960a18aaa4c 100644
--- a/filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileDownloaderTest.java
+++ b/filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileDownloaderTest.java
@@ -161,14 +161,14 @@ public class FileDownloaderTest {
File fileReferenceFullPath = fileReferenceFullPath(downloadDir, fileReference);
assertFalse(fileReferenceFullPath.getAbsolutePath(), fileDownloader.getFile(fileReference).isPresent());
- // Verify download status
+ // Getting file failed, verify download status and since there was an error is not downloading ATM
assertDownloadStatus(fileDownloader, fileReference, 0.0);
+ assertFalse(fileDownloader.fileReferenceDownloader().isDownloading(fileReference));
// Receives fileReference, should return and make it available to caller
String filename = "abc.jar";
receiveFile(fileReference, filename, FileReferenceData.Type.file, "some other content");
Optional<File> downloadedFile = fileDownloader.getFile(fileReference);
-
assertTrue(downloadedFile.isPresent());
File downloadedFileFullPath = new File(fileReferenceFullPath, filename);
assertEquals(downloadedFileFullPath.getAbsolutePath(), downloadedFile.get().getAbsolutePath());