diff options
author | Harald Musum <musum@oath.com> | 2018-07-17 09:47:02 +0200 |
---|---|---|
committer | Harald Musum <musum@oath.com> | 2018-07-17 09:47:02 +0200 |
commit | dd5359df956a5214efe05aa62988e1dd982bab53 (patch) | |
tree | e9455ae392a9d269cc2c739cdd052b83b2b4edfd /config-model | |
parent | 980885223d1953260f0f2ea6f608fa5b77413d0f (diff) |
Use config server spec for config server rpc port
Use config server spec instead of calling external program
Diffstat (limited to 'config-model')
3 files changed, 23 insertions, 32 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/Configserver.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/Configserver.java index e8f1f59310b..2a32549b6bf 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/admin/Configserver.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/Configserver.java @@ -1,16 +1,8 @@ // 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.admin; -import java.io.BufferedReader; -import java.io.InputStream; -import java.io.InputStreamReader; - -import java.util.logging.Logger; - import com.yahoo.config.model.api.ConfigServerSpec; -import com.yahoo.log.LogLevel; import com.yahoo.config.model.producer.AbstractConfigProducer; -import static com.yahoo.vespa.defaults.Defaults.getDefaults; import com.yahoo.vespa.model.AbstractService; /** @@ -26,11 +18,13 @@ import com.yahoo.vespa.model.AbstractService; */ public class Configserver extends AbstractService { private static final long serialVersionUID = 1L; - private static final int defaultPort = 19070; - private static final Logger log = Logger.getLogger(Configserver.class.getName()); + public static final int defaultRpcPort = 19070; - public Configserver(AbstractConfigProducer parent, String name) { + private final int rpcPort; + + public Configserver(AbstractConfigProducer parent, String name, int rpcPort) { super(parent, name); + this.rpcPort = rpcPort; portsMeta.on(0).tag("rpc").tag("config"); portsMeta.on(1).tag("http").tag("config").tag("state"); setProp("clustertype", "admin"); @@ -41,16 +35,7 @@ public class Configserver extends AbstractService { * Returns the desired base port for this service. */ public int getWantedPort() { - try { - // TODO: Provide configserver port as argument when creating this service instead - Process process = new ProcessBuilder(getDefaults().underVespaHome("bin/vespa-print-default"), "configserver_rpc_port").start(); - InputStream in = process.getInputStream(); - BufferedReader reader = new BufferedReader(new InputStreamReader(in)); - return Integer.parseInt(reader.readLine().trim()); - } catch (Exception exception) { - log.log(LogLevel.DEBUG, "Error reading port from script, using " + defaultPort); - return defaultPort; - } + return rpcPort; } /** @@ -84,7 +69,7 @@ public class Configserver extends AbstractService { return getRelativePort(1); } - public ConfigServerSpec getConfigServerSpec() { + ConfigServerSpec getConfigServerSpec() { return new Spec(getHostName(), getConfigServerRpcPort(), getConfigServerHttpPort(), ZooKeepersConfigProvider.zkPort); } 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 96e120cae92..297c4a6e9b9 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 @@ -34,7 +34,7 @@ public abstract class DomAdminBuilderBase extends VespaDomBuilder.DomConfigProdu private static final String DEFAULT_CLUSTER_NAME = "vespa"; private final ApplicationType applicationType; - private final List<ConfigServerSpec> configServerSpecs; + protected final List<ConfigServerSpec> configServerSpecs; private final FileRegistry fileRegistry; protected final boolean multitenant; @@ -52,7 +52,7 @@ public abstract class DomAdminBuilderBase extends VespaDomBuilder.DomConfigProdu HostSystem hostSystem = parent.getHostSystem(); HostResource host = new HostResource(Host.createConfigServerHost(hostSystem, spec.getHostName())); hostSystem.addBoundHost(host); - Configserver configserver = new Configserver(parent, spec.getHostName()); + Configserver configserver = new Configserver(parent, spec.getHostName(), spec.getConfigServerPort()); configserver.setHostResource(host); configserver.setBasePort(configserver.getWantedPort()); configserver.initService(); 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 da8c73c0958..2313a2ffcd8 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 @@ -23,6 +23,7 @@ import org.w3c.dom.Element; import java.util.List; import java.util.ArrayList; +import java.util.Objects; import java.util.logging.Level; /** @@ -102,7 +103,7 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { return cluster; } - // Extra stupid because configservers tag is voluntary + // Extra stupid because configservers tag is optional private List<Configserver> getConfigServers(AbstractConfigProducer parent, Element adminE) { SimpleConfigProducer configServers = new SimpleConfigProducer(parent, "configservers"); List<Configserver> cfgs = new ArrayList<>(); @@ -114,7 +115,7 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { } else { parent.deployLogger().log(LogLevel.INFO, "Specifying configserver without parent element configservers in services.xml is deprecated"); } - Configserver cfgs0 = new ConfigserverBuilder(0).build(configServers, configserverE); + Configserver cfgs0 = new ConfigserverBuilder(0, configServerSpecs).build(configServers, configserverE); cfgs0.setProp("index", 0); cfgs.add(cfgs0); return cfgs; @@ -122,7 +123,7 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { // configservers tag in use int i = 0; for (Element configserverE : XML.getChildren(configserversE, "configserver")) { - Configserver cfgsrv = new ConfigserverBuilder(i).build(configServers, configserverE); + Configserver cfgsrv = new ConfigserverBuilder(i, configServerSpecs).build(configServers, configserverE); cfgsrv.setProp("index", i); cfgs.add(cfgsrv); i++; @@ -161,16 +162,21 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { } private static class ConfigserverBuilder extends DomConfigProducerBuilder<Configserver> { - int i; + private final int i; + private final int rpcPort; - public ConfigserverBuilder(int i) { + public ConfigserverBuilder(int i, List<ConfigServerSpec> configServerSpec) { this.i = i; + Objects.requireNonNull(configServerSpec); + if (configServerSpec.size() > 1) + this.rpcPort = configServerSpec.get(0).getConfigServerPort(); + else + this.rpcPort = Configserver.defaultRpcPort; } @Override - protected Configserver doBuild(AbstractConfigProducer parent, - Element spec) { - return new Configserver(parent, "configserver." + i); + protected Configserver doBuild(AbstractConfigProducer parent, Element spec) { + return new Configserver(parent, "configserver." + i, rpcPort); } } |