diff options
Diffstat (limited to 'filedistribution')
-rw-r--r-- | filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDownloader.java | 14 | ||||
-rw-r--r-- | filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java | 3 |
2 files changed, 14 insertions, 3 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 2854ef8836a..72f0fb977d5 100644 --- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDownloader.java +++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDownloader.java @@ -74,7 +74,17 @@ public class FileDownloader implements AutoCloseable { } } - Future<Optional<File>> getFutureFile(FileReferenceDownload fileReferenceDownload) { + /** Returns a future that times out if download takes too long, and return empty on unsuccessful download. */ + public Future<Optional<File>> getFutureFileOrTimeout(FileReferenceDownload fileReferenceDownload) { + return getFutureFile(fileReferenceDownload) + .orTimeout(timeout.toMillis(), TimeUnit.MILLISECONDS) + .exceptionally(thrown -> { + fileReferenceDownloader.failedDownloading(fileReferenceDownload.fileReference()); + return Optional.empty(); + }); + } + + CompletableFuture<Optional<File>> getFutureFile(FileReferenceDownload fileReferenceDownload) { FileReference fileReference = fileReferenceDownload.fileReference(); Optional<File> file = getFileFromFileSystem(fileReference); @@ -135,7 +145,7 @@ public class FileDownloader implements AutoCloseable { } /** Start downloading, the future returned will be complete()d by receiving method in {@link FileReceiver} */ - private synchronized Future<Optional<File>> startDownload(FileReferenceDownload fileReferenceDownload) { + private synchronized CompletableFuture<Optional<File>> startDownload(FileReferenceDownload fileReferenceDownload) { return fileReferenceDownloader.startDownload(fileReferenceDownload); } 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 e26936cd5cf..5ad197e8633 100644 --- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java +++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java @@ -15,6 +15,7 @@ import java.time.Instant; import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; @@ -98,7 +99,7 @@ public class FileReferenceDownloader { } } - Future<Optional<File>> startDownload(FileReferenceDownload fileReferenceDownload) { + CompletableFuture<Optional<File>> startDownload(FileReferenceDownload fileReferenceDownload) { FileReference fileReference = fileReferenceDownload.fileReference(); Optional<FileReferenceDownload> inProgress = downloads.get(fileReference); if (inProgress.isPresent()) return inProgress.get().future(); |