diff options
author | Jon Bratseth <bratseth@gmail.com> | 2021-10-06 23:40:08 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@gmail.com> | 2021-10-06 23:40:08 +0200 |
commit | 3840e31d1973cdf5d3af17c368154b2bb539d8b4 (patch) | |
tree | 750e13f23162e86bc4dbbf00c5075d4b54f719e8 /config-model/src/main/java | |
parent | e39ac9a9abddb4706716c04ed009a8f31b3ae75f (diff) |
Create config server when not configured explicitly
Diffstat (limited to 'config-model/src/main/java')
4 files changed, 52 insertions, 42 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java b/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java index decc6e98bc4..b8e1247d2b9 100644 --- a/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java +++ b/config-model/src/main/java/com/yahoo/config/model/producer/AbstractConfigProducer.java @@ -385,7 +385,7 @@ public abstract class AbstractConfigProducer<CHILD extends AbstractConfigProduce public void validate() throws Exception { assert (childrenBySubId.isFrozen()); - for (AbstractConfigProducer child : childrenBySubId.values()) { + for (AbstractConfigProducer<?> child : childrenBySubId.values()) { child.validate(); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerCluster.java index e72f74829d3..6e2818673c7 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerCluster.java @@ -16,6 +16,7 @@ import com.yahoo.vespa.model.container.Container; import java.util.ArrayList; import java.util.Collection; +import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; @@ -78,17 +79,19 @@ public class ClusterControllerCluster extends AbstractConfigProducer<ClusterCont @Override public void validate() { - assert(containerCluster != null); + Objects.requireNonNull(containerCluster); for (Container c1 : containerCluster.getContainers()) { assert(c1 instanceof ClusterControllerContainer); for (Service service : c1.getHostResource().getServices()) { if (service instanceof Configserver) { - throw new IllegalArgumentException("Error validating cluster controller cluster: cluster controller '" + c1.getConfigId() + "' is set to run on the same host as a configserver"); + throw new IllegalArgumentException("Error validating cluster controller cluster: cluster controller '" + + c1.getConfigId() + "' is set to run on the same host as a configserver"); } } for (Container c2 : containerCluster.getContainers()) { if (c1 != c2 && c1.getHostName().equals(c2.getHostName())) { - throw new IllegalArgumentException("Error validating cluster controller cluster: cluster controllers '" + c1.getConfigId() + "' and '" + c2.getConfigId() + "' share the same host"); + throw new IllegalArgumentException("Error validating cluster controller cluster: cluster controllers '" + + c1.getConfigId() + "' and '" + c2.getConfigId() + "' share the same host"); } } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java index 8e3451540f9..c3cffa018fa 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java @@ -15,6 +15,7 @@ import com.yahoo.vespa.model.admin.clustercontroller.ClusterControllerCluster; import com.yahoo.vespa.model.admin.clustercontroller.ClusterControllerContainer; import com.yahoo.vespa.model.admin.clustercontroller.ClusterControllerContainerCluster; import com.yahoo.vespa.model.builder.xml.dom.VespaDomBuilder.DomConfigProducerBuilder; +import com.yahoo.vespa.model.container.Container; import org.w3c.dom.Element; import java.util.ArrayList; @@ -44,8 +45,7 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { admin.addConfigservers(configservers); admin.addSlobroks(getSlobroks(deployState, admin, XML.getChild(adminE, "slobroks"))); if ( ! admin.multitenant()) - admin.setClusterControllers(addConfiguredClusterControllers(deployState, admin, adminE), - deployState); + admin.setClusterControllers(addConfiguredClusterControllers(deployState, admin, adminE), deployState); ModelElement adminElement = new ModelElement(adminE); addLogForwarders(adminElement.child("logforwarding"), admin); @@ -57,16 +57,17 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { private List<Configserver> parseConfigservers(DeployState deployState, Admin admin, Element adminE) { List<Configserver> configservers; - if (multitenant) { + if (multitenant) configservers = getConfigServersFromSpec(deployState.getDeployLogger(), admin); - } else { + else configservers = getConfigServers(deployState, admin, adminE); - } - int count = configservers.size(); - if (count % 2 == 0) { - deployState.getDeployLogger().logApplicationPackage(Level.WARNING, "An even number (" + count + ") of config servers have been configured. " + - "This is discouraged, see doc for configuration server "); - } + if (configservers.isEmpty() && ! multitenant) + configservers = createSingleConfigServer(deployState, admin); + if (configservers.size() % 2 == 0) + deployState.getDeployLogger().logApplicationPackage(Level.WARNING, + "An even number (" + configservers.size() + + ") of config servers have been configured. " + + "This is discouraged, see doc for configuration server "); return configservers; } @@ -78,7 +79,9 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { return new LogserverBuilder().build(deployState, admin, logserverE); } - private ClusterControllerContainerCluster addConfiguredClusterControllers(DeployState deployState, AbstractConfigProducer parent, Element admin) { + private ClusterControllerContainerCluster addConfiguredClusterControllers(DeployState deployState, + AbstractConfigProducer<?> parent, + Element admin) { Element controllersElements = XML.getChild(admin, "cluster-controllers"); if (controllersElements == null) return null; @@ -105,40 +108,41 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { return cluster; } - // Extra stupid because configservers tag is optional - private List<Configserver> getConfigServers(DeployState deployState, AbstractConfigProducer parent, Element adminE) { - SimpleConfigProducer configServers = new SimpleConfigProducer(parent, "configservers"); - List<Configserver> cfgs = new ArrayList<>(); + private List<Configserver> getConfigServers(DeployState deployState, AbstractConfigProducer<?> parent, Element adminE) { + SimpleConfigProducer<?> configServers = new SimpleConfigProducer<>(parent, "configservers"); Element configserversE = XML.getChild(adminE, "configservers"); if (configserversE == null) { Element configserverE = XML.getChild(adminE, "configserver"); - if (configserverE == null) { + if (configserverE == null) configserverE = XML.getChild(adminE, "adminserver"); - } else { - deployState.getDeployLogger().logApplicationPackage(Level.INFO, "Specifying configserver without parent element configservers in services.xml is deprecated"); - } - Configserver cfgs0 = new ConfigserverBuilder(0, configServerSpecs).build(deployState, configServers, configserverE); - cfgs0.setProp("index", 0); - cfgs.add(cfgs0); - return cfgs; + else + deployState.getDeployLogger().logApplicationPackage(Level.INFO, + "Specifying configserver without parent element configservers in services.xml is deprecated"); + return List.of(new ConfigserverBuilder(0, configServerSpecs).build(deployState, configServers, configserverE)); } - // configservers tag in use - int i = 0; - for (Element configserverE : XML.getChildren(configserversE, "configserver")) { - Configserver cfgsrv = new ConfigserverBuilder(i, configServerSpecs).build(deployState, configServers, configserverE); - cfgsrv.setProp("index", i); - cfgs.add(cfgsrv); - i++; + else { + List<Configserver> configservers = new ArrayList<>(); + int i = 0; + for (Element configserverE : XML.getChildren(configserversE, "configserver")) + configservers.add(new ConfigserverBuilder(i++, configServerSpecs).build(deployState, configServers, configserverE)); + return configservers; } - return cfgs; + } + + /** Fallback when no config server is specified */ + private List<Configserver> createSingleConfigServer(DeployState deployState, AbstractConfigProducer<?> parent) { + SimpleConfigProducer<?> configServers = new SimpleConfigProducer<>(parent, "configservers"); + Configserver configServer = new Configserver(configServers, "configserver", Configserver.defaultRpcPort); + configServer.setHostResource(parent.hostSystem().getHost(Container.SINGLENODE_CONTAINER_SERVICESPEC)); + configServer.initService(deployState.getDeployLogger()); + return List.of(configServer); } private List<Slobrok> getSlobroks(DeployState deployState, AbstractConfigProducer<?> parent, Element slobroksE) { - List<Slobrok> slobs = new ArrayList<>(); - if (slobroksE != null) { - slobs = getExplicitSlobrokSetup(deployState, parent, slobroksE); - } - return slobs; + List<Slobrok> slobroks = new ArrayList<>(); + if (slobroksE != null) + slobroks = getExplicitSlobrokSetup(deployState, parent, slobroksE); + return slobroks; } private List<Slobrok> getExplicitSlobrokSetup(DeployState deployState, AbstractConfigProducer<?> parent, Element slobroksE) { @@ -174,7 +178,9 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { @Override protected Configserver doBuild(DeployState deployState, AbstractConfigProducer parent, Element spec) { - return new Configserver(parent, "configserver." + i, rpcPort); + var configServer = new Configserver(parent, "configserver." + i, rpcPort); + configServer.setProp("index", i); + return configServer; } } @@ -207,4 +213,5 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { return new ClusterControllerContainer(parent, i, runStandaloneZooKeeper, deployState, false); } } + } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java index f70ab5a711d..12a7b72f5fd 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java @@ -287,7 +287,7 @@ public class ContentCluster extends AbstractConfigProducer<AbstractConfigProduce } else if (admin.multitenant()) { // system tests: Put on logserver if (admin.getClusterControllers() == null) { - // TODO: logserver== null only obtains in unit tests, disallow it + // TODO: logserver == null only obtains in unit tests, disallow it List<HostResource> host = admin.getLogserver() == null ? List.of() : List.of(admin.getLogserver().getHostResource()); admin.setClusterControllers(createClusterControllers(new ClusterControllerCluster(admin, "standalone", deployState), host, |