diff options
author | Harald Musum <musum@oath.com> | 2018-01-16 09:52:41 +0100 |
---|---|---|
committer | Harald Musum <musum@oath.com> | 2018-01-16 09:52:41 +0100 |
commit | a7295435da81b348a89c456008e3da773de9b5c6 (patch) | |
tree | 37be47ba171f08eff261942ebbb850c283a60de6 /config-model/src/main | |
parent | f317fee05fcbd7e77b62dc87b118c1699caaef26 (diff) |
Ask other config servers to start downloading files
To have redundancy, ask the other config servers to start downloading
a file, so we have redundancy in case the config server running the code
goes down after deployment has finished
Diffstat (limited to 'config-model/src/main')
5 files changed, 19 insertions, 7 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java b/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java index 2a3ff1ca905..da034619d94 100644 --- a/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java +++ b/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java @@ -64,7 +64,7 @@ public class MockRoot extends AbstractConfigProducerRoot { super(rootConfigId); hostSystem = new HostSystem(this, "hostsystem", deployState.getProvisioner()); this.deployState = deployState; - fileDistributor = new FileDistributor(deployState.getFileRegistry()); + fileDistributor = new FileDistributor(deployState.getFileRegistry(), null); } public FileDistributionConfigProducer getFileDistributionConfigProducer() { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java index eda8b564ffd..47a644a39d4 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java @@ -164,7 +164,7 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri /** Creates a mutable model with no services instantiated */ public static VespaModel createIncomplete(DeployState deployState) throws IOException, SAXException { - return new VespaModel(new NullConfigModelRegistry(), deployState, false, new FileDistributor(deployState.getFileRegistry())); + return new VespaModel(new NullConfigModelRegistry(), deployState, false, new FileDistributor(deployState.getFileRegistry(), null)); } private void validateWrapExceptions() { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java index 24e56472688..b9903ccd163 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java @@ -84,7 +84,7 @@ public abstract class DomAdminBuilderBase extends VespaDomBuilder.DomConfigProdu FileDistributionOptions fileDistributionOptions = FileDistributionOptions.defaultOptions(); fileDistributionOptions.disableFiledistributor(disableFiledistributor); fileDistributionOptions = new DomFileDistributionOptionsBuilder(fileDistributionOptions).build(XML.getChild(adminElement, "filedistribution")); - return new FileDistributionConfigProducer.Builder(fileDistributionOptions).build(parent, fileRegistry); + return new FileDistributionConfigProducer.Builder(fileDistributionOptions).build(parent, fileRegistry, configServerSpecs); } private Element getChildWithFallback(Element parent, String childName, String alternativeChildName) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProducer.java b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProducer.java index c863b180b21..85b937fee19 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProducer.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProducer.java @@ -2,11 +2,13 @@ package com.yahoo.vespa.model.filedistribution; import com.yahoo.config.application.api.FileRegistry; +import com.yahoo.config.model.api.ConfigServerSpec; import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.vespa.model.Host; import com.yahoo.vespa.model.admin.FileDistributionOptions; import java.util.IdentityHashMap; +import java.util.List; import java.util.Map; /** @@ -46,8 +48,8 @@ public class FileDistributionConfigProducer extends AbstractConfigProducer { this.options = fileDistributionOptions; } - public FileDistributionConfigProducer build(AbstractConfigProducer ancestor, FileRegistry fileRegistry) { - FileDistributor fileDistributor = new FileDistributor(fileRegistry); + public FileDistributionConfigProducer build(AbstractConfigProducer ancestor, FileRegistry fileRegistry, List<ConfigServerSpec> configServerSpec) { + FileDistributor fileDistributor = new FileDistributor(fileRegistry, configServerSpec); return new FileDistributionConfigProducer(ancestor, fileDistributor, options); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributor.java b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributor.java index f3aad88a446..7bd0b9c2831 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributor.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributor.java @@ -2,8 +2,10 @@ package com.yahoo.vespa.model.filedistribution; import com.yahoo.config.FileReference; +import com.yahoo.config.model.api.ConfigServerSpec; import com.yahoo.config.model.api.FileDistribution; import com.yahoo.config.application.api.FileRegistry; +import com.yahoo.vespa.model.ConfigProxy; import com.yahoo.vespa.model.Host; import java.util.*; @@ -17,6 +19,7 @@ import java.util.stream.Collectors; public class FileDistributor { private final FileRegistry fileRegistry; + private final List<ConfigServerSpec> configServerSpecs; /** A map from files to the hosts to which that file should be distributed */ private final Map<FileReference, Set<Host>> filesToHosts = new LinkedHashMap<>(); @@ -54,8 +57,9 @@ public class FileDistributor { return hosts; } - public FileDistributor(FileRegistry fileRegistry) { + public FileDistributor(FileRegistry fileRegistry, List<ConfigServerSpec> configServerSpecs) { this.fileRegistry = fileRegistry; + this.configServerSpecs = configServerSpecs; } /** Returns the files which has been marked for distribution to the given host */ @@ -96,9 +100,15 @@ public class FileDistributor { for (Host host : getTargetHosts()) { if ( ! host.getHostname().equals(fileSourceHost)) { dbHandler.sendDeployedFiles(host.getHostname(), filesToSendToHost(host)); - dbHandler.startDownload(host.getHostname(), filesToSendToHost(host)); + dbHandler.startDownload(host.getHostname(), ConfigProxy.BASEPORT, filesToSendToHost(host)); } } + // Ask other config server to download, for redundancy + if (configServerSpecs != null) + configServerSpecs.stream() + .filter(configServerSpec -> !configServerSpec.getHostName().equals(fileSourceHost)) + .forEach(spec -> dbHandler.startDownload(spec.getHostName(), spec.getConfigServerPort(), allFilesToSend())); + dbHandler.sendDeployedFiles(fileSourceHost, allFilesToSend()); dbHandler.removeDeploymentsThatHaveDifferentApplicationId(getTargetHostnames()); } |