summaryrefslogtreecommitdiffstats
path: root/filedistribution
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2018-04-05 13:01:06 +0200
committerHarald Musum <musum@oath.com>2018-04-05 13:01:06 +0200
commitebab8a3e2e2183f17e6002f5906b113ea23a5048 (patch)
tree137e184eb496b07ace7423484d69271d9599d155 /filedistribution
parent837e0aad88bb1c11a62d0491302c86ef1df2c533 (diff)
Do not download only if another download for the same file reference is in progress
Diffstat (limited to 'filedistribution')
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDistributionRpcServer.java3
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDownloader.java8
-rw-r--r--filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileDownloaderTest.java4
3 files changed, 7 insertions, 8 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 3b15d5c83b5..2f5fc043f97 100644
--- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDistributionRpcServer.java
+++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDistributionRpcServer.java
@@ -105,8 +105,7 @@ public class FileDistributionRpcServer {
public final void setFileReferencesToDownload(Request req) {
Arrays.stream(req.parameters().get(0).asStringArray())
.map(FileReference::new)
- .forEach(fileReference -> downloader.queueForAsyncDownload(
- new FileReferenceDownload(fileReference)));
+ .forEach(fileReference -> downloader.download(new FileReferenceDownload(fileReference)));
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 c9f29197854..9aa49f57896 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,7 @@ public class FileDownloader {
} else {
log.log(LogLevel.DEBUG, () -> "File reference '" + fileReference.value() + "' not found in " +
directory.getAbsolutePath() + ", starting download");
- return queueForAsyncDownload(fileReferenceDownload, timeout);
+ return download(fileReferenceDownload);
}
}
@@ -106,7 +106,7 @@ public class FileDownloader {
return Optional.empty();
}
- public synchronized Future<Optional<File>> queueForAsyncDownload(FileReferenceDownload fileReferenceDownload, Duration timeout) {
+ public synchronized Future<Optional<File>> download(FileReferenceDownload fileReferenceDownload) {
FileReference fileReference = fileReferenceDownload.fileReference();
Future<Optional<File>> inProgress = fileReferenceDownloader.addDownloadListener(fileReference, () -> getFile(fileReferenceDownload));
if (inProgress != null) {
@@ -114,12 +114,12 @@ public class FileDownloader {
return inProgress;
}
- Future<Optional<File>> future = queueForAsyncDownload(fileReferenceDownload);
+ Future<Optional<File>> future = queueForDownload(fileReferenceDownload);
log.log(LogLevel.DEBUG, () -> "Queued '" + fileReference.value() + "' for download with timeout " + timeout);
return future;
}
- public Future<Optional<File>> queueForAsyncDownload(FileReferenceDownload fileReferenceDownload) {
+ private Future<Optional<File>> queueForDownload(FileReferenceDownload fileReferenceDownload) {
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 4351b796624..0ba30b5c6f7 100644
--- a/filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileDownloaderTest.java
+++ b/filedistribution/src/test/java/com/yahoo/vespa/filedistribution/FileDownloaderTest.java
@@ -192,8 +192,8 @@ public class FileDownloaderTest {
FileDownloader fileDownloader = new FileDownloader(connectionPool, downloadDir, tempDir, timeout, sleepBetweenRetries);
FileReference foo = new FileReference("foo");
FileReference bar = new FileReference("bar");
- fileDownloader.queueForAsyncDownload(new FileReferenceDownload(foo));
- fileDownloader.queueForAsyncDownload(new FileReferenceDownload(bar));
+ fileDownloader.download(new FileReferenceDownload(foo));
+ fileDownloader.download(new FileReferenceDownload(bar));
// Verify download status
assertDownloadStatus(fileDownloader, foo, 0.0);