aboutsummaryrefslogtreecommitdiffstats
path: root/filedistribution
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2017-11-23 23:33:00 +0100
committerHarald Musum <musum@oath.com>2017-11-23 23:33:00 +0100
commit03b5d9887f7464e2b25a0f2817dbc5e3cfc8f6e8 (patch)
tree059d5871cc75c348cd8eb3825e70315f2a07a158 /filedistribution
parent30f6004e1a9ed864eff6edc76ed6b761633e4461 (diff)
Implement chained download of file references
* A config server will download from another one (if possible) if it does not have the file itself. * Set error in connection pool when request fails * Use an empty connection pool if only one server
Diffstat (limited to 'filedistribution')
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDownloader.java5
-rw-r--r--filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java18
2 files changed, 14 insertions, 9 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 cd4b3afb9b5..fde410bc8d7 100644
--- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDownloader.java
+++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileDownloader.java
@@ -146,8 +146,7 @@ public class FileDownloader {
fileReferenceDownloader.addToDownloadQueue(fileReferenceDownload);
}
- Set<FileReference> queuedDownloads() {
- return fileReferenceDownloader.queuedDownloads();
+ public FileReferenceDownloader fileReferenceDownloader() {
+ return fileReferenceDownloader;
}
-
}
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 08595662f36..4c9c37dd6da 100644
--- a/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java
+++ b/filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java
@@ -37,7 +37,7 @@ import java.util.stream.Collectors;
* @author hmusum
*/
// TODO: Handle shutdown of executors
-class FileReferenceDownloader {
+public class FileReferenceDownloader {
private final static Logger log = Logger.getLogger(FileReferenceDownloader.class.getName());
private final static Duration rpcTimeout = Duration.ofSeconds(10);
@@ -107,8 +107,7 @@ class FileReferenceDownloader {
Thread.sleep(10);
} catch (InterruptedException e) { /* ignore for now */}
} else {
- log.log(LogLevel.INFO, "Polling queue, found file reference '" +
- fileReferenceDownload.fileReference().value() + "' to download");
+ log.log(LogLevel.DEBUG, "Will download file reference '" + fileReferenceDownload.fileReference().value() + "'");
downloadExecutor.submit(() -> startDownload(fileReferenceDownload.fileReference(), downloadTimeout, fileReferenceDownload));
}
} while (true);
@@ -133,12 +132,16 @@ class FileReferenceDownloader {
return true;
} else {
log.log(LogLevel.INFO, "File reference '" + fileReference.value() + "' not found for " + connection.getAddress());
+ connectionPool.setNewCurrentConnection();
return false;
}
} else {
- log.log(LogLevel.WARNING, "Request failed. Req: " + request + "\nSpec: " + connection.getAddress());
- if (request.isError() && request.errorCode() == ErrorCode.CONNECTION)
- connection.setError(request.errorCode());
+ log.log(LogLevel.WARNING, "Request failed. Req: " + request + "\nSpec: " + connection.getAddress() +
+ ", error code: " + request.errorCode());
+ if (request.isError() && request.errorCode() == ErrorCode.CONNECTION || request.errorCode() == ErrorCode.TIMEOUT) {
+ log.log(LogLevel.WARNING, "Setting error for connection " + connection.getAddress());
+ connectionPool.setError(connection, request.errorCode());
+ }
return false;
}
}
@@ -181,4 +184,7 @@ class FileReferenceDownloader {
return ImmutableMap.copyOf(downloadStatus);
}
+ public ConnectionPool connectionPool() {
+ return connectionPool;
+ }
}