diff options
author | Harald Musum <musum@oath.com> | 2017-11-23 23:33:00 +0100 |
---|---|---|
committer | Harald Musum <musum@oath.com> | 2017-11-23 23:33:00 +0100 |
commit | 03b5d9887f7464e2b25a0f2817dbc5e3cfc8f6e8 (patch) | |
tree | 059d5871cc75c348cd8eb3825e70315f2a07a158 /filedistribution | |
parent | 30f6004e1a9ed864eff6edc76ed6b761633e4461 (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.java | 5 | ||||
-rw-r--r-- | filedistribution/src/main/java/com/yahoo/vespa/filedistribution/FileReferenceDownloader.java | 18 |
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; + } } |