aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2018-01-16 09:52:41 +0100
committerHarald Musum <musum@oath.com>2018-01-16 09:52:41 +0100
commita7295435da81b348a89c456008e3da773de9b5c6 (patch)
tree37be47ba171f08eff261942ebbb850c283a60de6 /config-model/src/main
parentf317fee05fcbd7e77b62dc87b118c1699caaef26 (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')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminBuilderBase.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProducer.java6
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributor.java14
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());
}