summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2017-11-30 22:38:20 +0100
committerHarald Musum <musum@oath.com>2017-11-30 22:38:20 +0100
commit3394315a5af577a4e7ba888ff9de1028a386fa27 (patch)
tree6b4e62429848ae089e3d3eba7a96a7b1045bab7d /config-model
parent86777e222a600608f034739428ed42adb3d46a6e (diff)
Do not setup a service for filedistributor when it is disabled
Some workarounds needed to still file distribution config even when such a serice is not set up (can be simplified a lot when file distributor is removed for good)
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java26
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/Container.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/filedistribution/DummyFileDistributionConfigProducer.java42
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProducer.java22
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProvider.java59
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributorService.java54
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java11
8 files changed, 155 insertions, 65 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java b/config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java
index d751e332ff3..c540a5f62d2 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/ConfigProxy.java
@@ -16,6 +16,8 @@ package com.yahoo.vespa.model;
*/
public class ConfigProxy extends AbstractService {
+ public final static int BASEPORT = 19090;
+
/**
* Creates a new ConfigProxy instance.
*
@@ -31,7 +33,7 @@ public class ConfigProxy extends AbstractService {
/**
* Returns the desired base port for this service.
*/
- public int getWantedPort() { return 19090; }
+ public int getWantedPort() { return BASEPORT; }
/**
* The desired base port is the only allowed base port.
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java
index 2575cdb6237..d892d70e0de 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java
@@ -14,6 +14,8 @@ import com.yahoo.vespa.model.admin.monitoring.MetricsConsumer;
import com.yahoo.vespa.model.admin.monitoring.Monitoring;
import com.yahoo.vespa.model.admin.monitoring.builder.Metrics;
import com.yahoo.vespa.model.container.ContainerCluster;
+import com.yahoo.vespa.model.filedistribution.DummyFileDistributionConfigProducer;
+import com.yahoo.vespa.model.filedistribution.FileDistributionConfigProvider;
import com.yahoo.vespa.model.filedistribution.FileDistributionConfigProducer;
import com.yahoo.vespa.model.filedistribution.FileDistributor;
import com.yahoo.vespa.model.filedistribution.FileDistributorService;
@@ -213,11 +215,25 @@ public class Admin extends AbstractConfigProducer implements Serializable {
fileDistributor.fileSourceHost() + "'. Hostsystem=" + getHostSystem());
}
- FileDistributorService fds = new FileDistributorService(fileDistribution, host.getHost().getHostName(),
- fileDistribution.getFileDistributor(), fileDistribution.getOptions(), host == deployHost);
- fds.setHostResource(host);
- fds.initService();
- fileDistribution.addFileDistributionService(host.getHost(), fds);
+ FileDistributionConfigProvider configProvider =
+ new FileDistributionConfigProvider(fileDistributor,
+ fileDistribution.getOptions(),
+ host == deployHost,
+ host.getHost());
+ if (fileDistribution.getOptions().disableFiledistributor()) {
+ DummyFileDistributionConfigProducer dummyFileDistributionConfigProducer =
+ new DummyFileDistributionConfigProducer(fileDistribution,
+ host.getHost().getHostName(),
+ configProvider);
+ fileDistribution.addFileDistributionConfigProducer(host.getHost(), dummyFileDistributionConfigProducer);
+ } else {
+ FileDistributorService fds = new FileDistributorService(fileDistribution,
+ host.getHost().getHostName(),
+ configProvider);
+ fds.setHostResource(host);
+ fds.initService();
+ fileDistribution.addFileDistributionConfigProducer(host.getHost(), fds);
+ }
}
private boolean deployHostIsMissing(HostResource deployHost) {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java b/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java
index 8ccc0b3e011..5925ec978bb 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java
@@ -330,7 +330,7 @@ public class Container extends AbstractService implements
FileDistributionConfigProducer fileDistribution = getRoot().getFileDistributionConfigProducer();
if (fileDistribution != null) {
- builder.configid(fileDistribution.getFileDistributorService(getHost()).getConfigId());
+ builder.configid(fileDistribution.getConfigProducer(getHost()).getConfigId());
}
return builder;
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/DummyFileDistributionConfigProducer.java b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/DummyFileDistributionConfigProducer.java
new file mode 100644
index 00000000000..1b1e66594d1
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/DummyFileDistributionConfigProducer.java
@@ -0,0 +1,42 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.filedistribution;
+
+import com.yahoo.cloud.config.filedistribution.FiledistributorConfig;
+import com.yahoo.cloud.config.filedistribution.FiledistributorrpcConfig;
+import com.yahoo.cloud.config.filedistribution.FilereferencesConfig;
+import com.yahoo.config.model.producer.AbstractConfigProducer;
+
+/**
+ * @author hmusum
+ * <p>
+ * Dummy file distribution config producer, needed for serving file distribution config when there is no FiledistributorService.
+ */
+public class DummyFileDistributionConfigProducer extends AbstractConfigProducer implements
+ FiledistributorConfig.Producer,
+ FiledistributorrpcConfig.Producer,
+ FilereferencesConfig.Producer {
+
+ private final FileDistributionConfigProvider configProvider;
+
+ public DummyFileDistributionConfigProducer(AbstractConfigProducer parent,
+ String hostname,
+ FileDistributionConfigProvider configProvider) {
+ super(parent, hostname);
+ this.configProvider = configProvider;
+ }
+
+ @Override
+ public void getConfig(FiledistributorConfig.Builder builder) {
+ configProvider.getConfig(builder);
+ }
+
+ @Override
+ public void getConfig(FiledistributorrpcConfig.Builder builder) {
+ configProvider.getConfig(builder);
+ }
+
+ @Override
+ public void getConfig(FilereferencesConfig.Builder builder) {
+ configProvider.getConfig(builder);
+ }
+}
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 9e5e3074c5e..c863b180b21 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
@@ -10,11 +10,13 @@ import java.util.IdentityHashMap;
import java.util.Map;
/**
- * @author tonytv
+ * @author hmusum
+ * <p>
+ * File distribution config producer, delegates getting config to {@link DummyFileDistributionConfigProducer} (one per host)
*/
public class FileDistributionConfigProducer extends AbstractConfigProducer {
- private final Map<Host, FileDistributorService> fileDistributorServices = new IdentityHashMap<>();
+ private final Map<Host, AbstractConfigProducer> fileDistributionConfigProducers = new IdentityHashMap<>();
private final FileDistributor fileDistributor;
private final FileDistributionOptions options;
@@ -24,14 +26,6 @@ public class FileDistributionConfigProducer extends AbstractConfigProducer {
this.options = options;
}
- public FileDistributorService getFileDistributorService(Host host) {
- FileDistributorService service = fileDistributorServices.get(host);
- if (service == null) {
- throw new IllegalStateException("No file distribution service for host " + host);
- }
- return service;
- }
-
public FileDistributor getFileDistributor() {
return fileDistributor;
}
@@ -40,8 +34,8 @@ public class FileDistributionConfigProducer extends AbstractConfigProducer {
return options;
}
- public void addFileDistributionService(Host host, FileDistributorService fds) {
- fileDistributorServices.put(host, fds);
+ public void addFileDistributionConfigProducer(Host host, AbstractConfigProducer fileDistributionConfigProducer) {
+ fileDistributionConfigProducers.put(host, fileDistributionConfigProducer);
}
public static class Builder {
@@ -58,4 +52,8 @@ public class FileDistributionConfigProducer extends AbstractConfigProducer {
}
}
+ public AbstractConfigProducer getConfigProducer(Host host) {
+ return fileDistributionConfigProducers.get(host);
+ }
+
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProvider.java b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProvider.java
new file mode 100644
index 00000000000..33cc581c3a8
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributionConfigProvider.java
@@ -0,0 +1,59 @@
+// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+package com.yahoo.vespa.model.filedistribution;
+
+import com.yahoo.cloud.config.filedistribution.FiledistributorConfig;
+import com.yahoo.cloud.config.filedistribution.FiledistributorrpcConfig;
+import com.yahoo.cloud.config.filedistribution.FilereferencesConfig;
+import com.yahoo.config.FileReference;
+import com.yahoo.config.model.api.FileDistribution;
+import com.yahoo.vespa.model.ConfigProxy;
+import com.yahoo.vespa.model.Host;
+import com.yahoo.vespa.model.admin.FileDistributionOptions;
+
+import java.util.Collection;
+
+public class FileDistributionConfigProvider {
+
+ private final FileDistributor fileDistributor;
+ private final FileDistributionOptions fileDistributionOptions;
+ private final boolean sendAllFiles;
+ private final Host host;
+
+ public FileDistributionConfigProvider(FileDistributor fileDistributor,
+ FileDistributionOptions fileDistributionOptions,
+ boolean sendAllFiles,
+ Host host) {
+ this.fileDistributor = fileDistributor;
+ this.fileDistributionOptions = fileDistributionOptions;
+ this.sendAllFiles = sendAllFiles;
+ this.host = host;
+ }
+
+ public void getConfig(FiledistributorConfig.Builder builder) {
+ fileDistributionOptions.getConfig(builder);
+ builder.torrentport(FileDistributorService.BASEPORT + 1);
+ builder.stateport(FileDistributorService.BASEPORT + 2);
+ builder.hostname(host.getHostName());
+ builder.filedbpath(FileDistribution.getDefaultFileDBPath().toString());
+ }
+
+ public void getConfig(FiledistributorrpcConfig.Builder builder) {
+ // If disabled config proxy should act as file distributor, so use config proxy port
+ int port = (fileDistributionOptions.disableFiledistributor()) ? ConfigProxy.BASEPORT : FileDistributorService.BASEPORT;
+ builder.connectionspec("tcp/" + host.getHostName() + ":" + port);
+ }
+
+ public void getConfig(FilereferencesConfig.Builder builder) {
+ for (FileReference reference : getFileReferences()) {
+ builder.filereferences(reference.value());
+ }
+ }
+
+ private Collection<FileReference> getFileReferences() {
+ if (sendAllFiles) {
+ return fileDistributor.allFilesToSend();
+ } else {
+ return fileDistributor.filesToSendToHost(host);
+ }
+ }
+}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributorService.java b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributorService.java
index 9129e951657..986334125d2 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributorService.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/filedistribution/FileDistributorService.java
@@ -4,59 +4,36 @@ package com.yahoo.vespa.model.filedistribution;
import com.yahoo.cloud.config.filedistribution.FiledistributorConfig;
import com.yahoo.cloud.config.filedistribution.FiledistributorrpcConfig;
import com.yahoo.cloud.config.filedistribution.FilereferencesConfig;
-import com.yahoo.config.FileReference;
-
-import com.yahoo.config.model.api.FileDistribution;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.vespa.model.AbstractService;
-import com.yahoo.vespa.model.admin.FileDistributionOptions;
-
-import java.util.Collection;
/**
* @author Tony Vaagenes
+ *
+ * Config is produced by {@link FileDistributionConfigProvider}
*/
public class FileDistributorService extends AbstractService implements
FiledistributorConfig.Producer,
FiledistributorrpcConfig.Producer,
FilereferencesConfig.Producer {
- private final static int BASEPORT = 19092;
- private final FileDistributor fileDistributor;
- private final FileDistributionOptions fileDistributionOptions;
- private final boolean sendAllFiles;
+ final static int BASEPORT = 19092;
- private Collection<FileReference> getFileReferences() {
- if (sendAllFiles) {
- return fileDistributor.allFilesToSend();
- } else {
- return fileDistributor.filesToSendToHost(getHost());
- }
- }
+ private final FileDistributionConfigProvider configProvider;
- public FileDistributorService(AbstractConfigProducer parent,
- String name,
- FileDistributor fileDistributor,
- FileDistributionOptions fileDistributionOptions,
- boolean sendAllFiles) {
- super(parent, name);
+ public FileDistributorService(AbstractConfigProducer parent, String hostname, FileDistributionConfigProvider configProvider) {
+ super(parent, hostname);
+ this.configProvider = configProvider;
portsMeta.on(0).tag("rpc");
portsMeta.on(1).tag("torrent");
portsMeta.on(2).tag("http").tag("state");
setProp("clustertype", "filedistribution");
setProp("clustername", "admin");
-
- this.fileDistributor = fileDistributor;
- this.fileDistributionOptions = fileDistributionOptions;
- this.sendAllFiles = sendAllFiles;
}
@Override
public String getStartupCommand() {
- // If disabled config proxy should act as file distributor, so don't start this service
- return (fileDistributionOptions.disableFiledistributor())
- ? null
- : "exec $ROOT/sbin/vespa-filedistributor" + " --configid " + getConfigId();
+ return "exec $ROOT/sbin/vespa-filedistributor" + " --configid " + getConfigId();
}
@Override
@@ -69,6 +46,7 @@ public class FileDistributorService extends AbstractService implements
return true;
}
+ @Override
public int getPortCount() {
return 3;
}
@@ -80,24 +58,16 @@ public class FileDistributorService extends AbstractService implements
@Override
public void getConfig(FiledistributorConfig.Builder builder) {
- fileDistributionOptions.getConfig(builder);
- builder.torrentport(getRelativePort(1));
- builder.stateport(getRelativePort(2));
- builder.hostname(getHostName());
- builder.filedbpath(FileDistribution.getDefaultFileDBPath().toString());
+ configProvider.getConfig(builder);
}
@Override
public void getConfig(FiledistributorrpcConfig.Builder builder) {
- // If disabled config proxy should act as file distributor, so use config proxy port
- int port = (fileDistributionOptions.disableFiledistributor()) ? 19090 : getRelativePort(0);
- builder.connectionspec("tcp/" + getHostName() + ":" + port);
+ configProvider.getConfig(builder);
}
@Override
public void getConfig(FilereferencesConfig.Builder builder) {
- for (FileReference reference : getFileReferences()) {
- builder.filereferences(reference.value());
- }
+ configProvider.getConfig(builder);
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java
index 941d1fe1ff3..819d5904c25 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java
@@ -19,6 +19,7 @@ import com.yahoo.vespa.model.admin.monitoring.Monitoring;
import com.yahoo.vespa.model.application.validation.RestartConfigs;
import com.yahoo.vespa.model.builder.xml.dom.VespaDomBuilder;
import com.yahoo.vespa.model.content.ContentNode;
+import com.yahoo.vespa.model.filedistribution.DummyFileDistributionConfigProducer;
import com.yahoo.vespa.model.filedistribution.FileDistributionConfigProducer;
import com.yahoo.vespa.model.filedistribution.FileDistributorService;
import org.w3c.dom.Element;
@@ -228,10 +229,12 @@ public class SearchNode extends AbstractService implements
public void getConfig(FiledistributorrpcConfig.Builder builder) {
FileDistributionConfigProducer fileDistribution = getRoot().getFileDistributionConfigProducer();
if (fileDistribution != null) {
- FileDistributorService fds = fileDistribution.getFileDistributorService(getHost());
- if (fds != null) {
- fds.getConfig(builder);
- }
+ AbstractConfigProducer configProducer = fileDistribution.getConfigProducer(getHost());
+ // TODO: Hack, will be fixed when FileDistributorService is gone
+ if (configProducer instanceof DummyFileDistributionConfigProducer)
+ ((DummyFileDistributionConfigProducer) configProducer).getConfig(builder);
+ else
+ ((FileDistributorService) configProducer).getConfig(builder);
}
}