From e6f5fb49800af3c68a62c08abb6a5b251c2c3d1e Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Wed, 13 Dec 2017 09:21:49 +0100 Subject: Notify config proxy about starting downloads while preparing Code not activated yet --- .../CombinedLegacyDistribution.java | 35 ++++++++++++++++++++++ .../server/filedistribution/FileDBHandler.java | 10 +++++-- .../config/server/filedistribution/FileServer.java | 11 +++---- .../server/filedistribution/MockFileDBHandler.java | 6 ++-- 4 files changed, 50 insertions(+), 12 deletions(-) (limited to 'configserver') diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/CombinedLegacyDistribution.java b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/CombinedLegacyDistribution.java index 588f2d1d63f..f0e64a936a5 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/CombinedLegacyDistribution.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/CombinedLegacyDistribution.java @@ -3,21 +3,42 @@ package com.yahoo.vespa.config.server.filedistribution; import com.yahoo.config.FileReference; import com.yahoo.config.model.api.FileDistribution; +import com.yahoo.jrt.Request; +import com.yahoo.jrt.Spec; +import com.yahoo.jrt.StringArray; +import com.yahoo.jrt.Supervisor; +import com.yahoo.jrt.Target; +import com.yahoo.jrt.Transport; +import com.yahoo.log.LogLevel; import java.util.Collection; import java.util.Set; +import java.util.logging.Logger; +/** + * @author baldersheim + */ public class CombinedLegacyDistribution implements FileDistribution { + private final static Logger log = Logger.getLogger(CombinedLegacyDistribution.class.getName()); + + private final Supervisor supervisor = new Supervisor(new Transport()); private final FileDistribution legacy; CombinedLegacyDistribution(FileDBHandler legacy) { this.legacy = legacy; } + @Override public void sendDeployedFiles(String hostName, Set fileReferences) { legacy.sendDeployedFiles(hostName, fileReferences); } + @Override + public void startDownload(String hostName, Set fileReferences) { + // TODO: Not active for now + // startDownloadingFileReferences(hostName, fileReferences); + } + @Override public void reloadDeployFileDistributor() { legacy.reloadDeployFileDistributor(); @@ -27,4 +48,18 @@ public class CombinedLegacyDistribution implements FileDistribution { public void removeDeploymentsThatHaveDifferentApplicationId(Collection targetHostnames) { legacy.removeDeploymentsThatHaveDifferentApplicationId(targetHostnames); } + + // Notifies config proxy which file references it should start downloading. It's OK if the call does not succeed, + // as downloading will then start synchronously when a service requests a file reference instead + private void startDownloadingFileReferences(String hostName, Set fileReferences) { + Target target = supervisor.connect(new Spec(hostName, 19090)); + double timeout = 0.1; + Request request = new Request("filedistribution.setFileReferencesToDownload"); + request.parameters().add(new StringArray(fileReferences.stream().map(FileReference::value).toArray(String[]::new))); + log.log(LogLevel.INFO, "Executing " + request.methodName() + " against " + target.toString()); + target.invokeSync(request, timeout); + if (request.isError()) { + log.log(LogLevel.INFO, request.methodName() + " failed: " + request.errorCode() + " (" + request.errorMessage() + ")"); + } + } } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDBHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDBHandler.java index f0ce6104496..9b3f4c39a45 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDBHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileDBHandler.java @@ -10,9 +10,8 @@ import java.util.*; /** * Implements invoker of filedistribution using manager with JNI. * - * @author tonytv - * @author lulf - * @since 5.1.14 + * @author Tony Vaagenes + * @author Ulf Lilleengen */ public class FileDBHandler implements FileDistribution { private final FileDistributionManager manager; @@ -30,6 +29,11 @@ public class FileDBHandler implements FileDistribution { manager.setDeployedFiles(hostName, referencesAsString); } + @Override + public void startDownload(String hostName, Set fileReferences) { + throw new UnsupportedOperationException("Not valid for this Filedistribution implementation"); + } + @Override public void removeDeploymentsThatHaveDifferentApplicationId(Collection targetHostnames) { manager.removeDeploymentsThatHaveDifferentApplicationId(targetHostnames); diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java index 81f5e62016a..a9c56cf99d0 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/FileServer.java @@ -6,12 +6,12 @@ import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.config.FileReference; import com.yahoo.config.model.api.FileDistribution; import com.yahoo.config.subscription.ConfigSourceSet; -import com.yahoo.io.IOUtils; import com.yahoo.jrt.Int32Value; import com.yahoo.jrt.Request; import com.yahoo.jrt.StringValue; import com.yahoo.jrt.Supervisor; import com.yahoo.jrt.Transport; +import com.yahoo.log.LogLevel; import com.yahoo.net.HostName; import com.yahoo.vespa.config.Connection; import com.yahoo.vespa.config.ConnectionPool; @@ -108,8 +108,7 @@ public class FileServer { private void serveFile(FileReference reference, Receiver target) { File file = root.getFile(reference); - // TODO remove once verified in system tests. - log.info("Start serving reference '" + reference.value() + "' with file '" + file.getAbsolutePath() + "'"); + log.log(LogLevel.DEBUG, "Start serving reference '" + reference.value() + "' with file '" + file.getAbsolutePath() + "'"); boolean success = false; String errorDescription = "OK"; FileReferenceData fileData = FileReferenceDataBlob.empty(reference, file.getName()); @@ -122,8 +121,7 @@ public class FileServer { } target.receive(fileData, new ReplayStatus(success ? 0 : 1, success ? "OK" : errorDescription)); - // TODO remove once verified in system tests. - log.info("Done serving reference '" + reference.toString() + "' with file '" + file.getAbsolutePath() + "'"); + log.log(LogLevel.DEBUG, "Done serving reference '" + reference.toString() + "' with file '" + file.getAbsolutePath() + "'"); } private FileReferenceData readFileReferenceData(FileReference reference) throws IOException { @@ -143,8 +141,7 @@ public class FileServer { private void serveFile(String fileReference, Request request, Receiver receiver) { FileApiErrorCodes result; try { - // TODO remove once verified in system tests. - log.info("Received request for reference '" + fileReference + "'"); + log.log(LogLevel.DEBUG, "Received request for reference '" + fileReference + "'"); result = hasFile(fileReference) ? FileApiErrorCodes.OK : FileApiErrorCodes.NOT_FOUND; diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/MockFileDBHandler.java b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/MockFileDBHandler.java index eb23d38e23e..caf64cca4d0 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/MockFileDBHandler.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/filedistribution/MockFileDBHandler.java @@ -8,8 +8,7 @@ import java.util.Collection; import java.util.Set; /** - * @author lulf - * @since 5.1 + * @author Ulf Lilleengen */ public class MockFileDBHandler implements FileDistribution { public int sendDeployedFilesCalled = 0; @@ -21,6 +20,9 @@ public class MockFileDBHandler implements FileDistribution { sendDeployedFilesCalled++; } + @Override + public void startDownload(String hostName, Set fileReferences) { /* not implemented */ } + @Override public void reloadDeployFileDistributor() { reloadDeployFileDistributorCalled++; -- cgit v1.2.3