summaryrefslogtreecommitdiffstats
path: root/filedistribution
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2017-12-13 09:21:49 +0100
committerHarald Musum <musum@oath.com>2017-12-13 09:21:49 +0100
commite6f5fb49800af3c68a62c08abb6a5b251c2c3d1e (patch)
tree2b4412121d77827e765afa1b12980478e9d6979b /filedistribution
parent35ce8cf9c5dea5c700315cb4d8031b533c8e535d (diff)
Notify config proxy about starting downloads while preparing
Code not activated yet
Diffstat (limited to 'filedistribution')
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDistributionRpcServer.java2
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDownloader.java25
-rw-r--r--filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileDownloaderTest.java2
3 files changed, 16 insertions, 13 deletions
diff --git a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDistributionRpcServer.java b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDistributionRpcServer.java
index d09cf17b9e3..2e58455bc39 100644
--- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDistributionRpcServer.java
+++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDistributionRpcServer.java
@@ -118,7 +118,7 @@ public class FileDistributionRpcServer {
List<FileReference> fileReferences = Stream.of(fileReferenceStrings)
.map(FileReference::new)
.collect(Collectors.toList());
- downloader.queueForDownload(fileReferences);
+ downloader.queueForAsyncDownload(fileReferences);
req.returnValues().add(new Int32Value(0));
}
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 6610893d8ae..05bcaacb107 100644
--- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDownloader.java
+++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDownloader.java
@@ -67,12 +67,19 @@ public class FileDownloader {
} else {
log.log(LogLevel.INFO, "File reference '" + fileReference.value() + "' not found in " +
directory.getAbsolutePath() + ", starting download");
- return queueForDownload(fileReference, timeout);
+ return queueForAsyncDownload(fileReference, timeout);
}
}
- public void queueForDownload(List<FileReference> fileReferences) {
- fileReferences.forEach(this::queueForDownload);
+ // Start downloading, but there is no Future used get file being downloaded
+ public void queueForAsyncDownload(List<FileReference> fileReferences) {
+ fileReferences.forEach(fileReference -> {
+ if (fileReferenceDownloader.isDownloading(fileReference)) {
+ log.log(LogLevel.DEBUG, "Already downloading '" + fileReference.value() + "'");
+ } else {
+ queueForAsyncDownload(fileReference).cancel(false);
+ }
+ });
}
void receiveFile(FileReferenceData fileReferenceData) {
@@ -107,24 +114,20 @@ public class FileDownloader {
return Optional.empty();
}
- private synchronized Future<Optional<File>> queueForDownload(FileReference fileReference, Duration timeout) {
+ private synchronized Future<Optional<File>> queueForAsyncDownload(FileReference fileReference, Duration timeout) {
Future<Optional<File>> inProgress = fileReferenceDownloader.addDownloadListener(fileReference, () -> getFile(fileReference));
if (inProgress != null) {
log.log(LogLevel.DEBUG, "Already downloading '" + fileReference.value() + "'");
return inProgress;
}
- Future<Optional<File>> future = queueForDownload(fileReference);
+ Future<Optional<File>> future = queueForAsyncDownload(fileReference);
log.log(LogLevel.INFO, "Queued '" + fileReference.value() + "' for download with timeout " + timeout);
return future;
}
- // We don't care about the future in this call
- private Future<Optional<File>> queueForDownload(FileReference fileReference) {
- return queueForDownload(new FileReferenceDownload(fileReference, SettableFuture.create()));
- }
-
- private Future<Optional<File>> queueForDownload(FileReferenceDownload fileReferenceDownload) {
+ private Future<Optional<File>> queueForAsyncDownload(FileReference fileReference) {
+ FileReferenceDownload fileReferenceDownload = new FileReferenceDownload(fileReference, SettableFuture.create());
fileReferenceDownloader.addToDownloadQueue(fileReferenceDownload);
return fileReferenceDownload.future();
}
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 60478550084..d2da020539a 100644
--- a/filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileDownloaderTest.java
+++ b/filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileDownloaderTest.java
@@ -189,7 +189,7 @@ public class FileDownloaderTest {
FileReference foo = new FileReference("foo");
FileReference bar = new FileReference("bar");
List<FileReference> fileReferences = Arrays.asList(foo, bar);
- fileDownloader.queueForDownload(fileReferences);
+ fileDownloader.queueForAsyncDownload(fileReferences);
// Verify download status
assertDownloadStatus(fileDownloader, foo, 0.0);