diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-02-07 12:09:52 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-02-07 12:09:52 +0100 |
commit | 2c4ea0a81062c3effa25ec42d44d0fc86adb1980 (patch) | |
tree | 0c9584645b17b637e602573792345e06de6ae4dc /config-model/src/main/java/com | |
parent | db2e29ca7f14e0e95f457402bd62203ff077923f (diff) |
- Adde featureflag for controlling environment variables.
- Use general environment mechanism for existing ad-hoc environment variables.
Diffstat (limited to 'config-model/src/main/java/com')
14 files changed, 112 insertions, 135 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java index 62e78db0e6f..f76cb6e43cc 100644 --- a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java +++ b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java @@ -1,7 +1,6 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.config.model.deploy; -import com.google.common.collect.ImmutableList; import com.yahoo.config.model.api.ConfigServerSpec; import com.yahoo.config.model.api.ContainerEndpoint; import com.yahoo.config.model.api.EndpointCertificateSecrets; @@ -75,6 +74,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea private double persistenceThrottlingWsDecrementFactor = 1.2; private double persistenceThrottlingWsBackoff = 0.95; private boolean useV8GeoPositions = false; + private List<String> environmentVariables = List.of(); @Override public ModelContext.FeatureFlags featureFlags() { return this; } @Override public boolean multitenant() { return multitenant; } @@ -129,6 +129,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea @Override public double persistenceThrottlingWsDecrementFactor() { return persistenceThrottlingWsDecrementFactor; } @Override public double persistenceThrottlingWsBackoff() { return persistenceThrottlingWsBackoff; } @Override public boolean useV8GeoPositions() { return useV8GeoPositions; } + @Override public List<String> environmentVariables() { return environmentVariables; } public TestProperties maxUnCommittedMemory(int maxUnCommittedMemory) { this.maxUnCommittedMemory = maxUnCommittedMemory; @@ -222,7 +223,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea } public TestProperties setConfigServerSpecs(List<Spec> configServerSpecs) { - this.configServerSpecs = ImmutableList.copyOf(configServerSpecs); + this.configServerSpecs = List.copyOf(configServerSpecs); return this; } @@ -341,6 +342,11 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea return this; } + public TestProperties setEnvironmentVariables(List<String> value) { + this.environmentVariables = value; + return this; + } + public static class Spec implements ConfigServerSpec { private final String hostName; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java b/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java index 78cbb722bc7..6777e2fb741 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/AbstractService.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.model; import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.api.PortInfo; import com.yahoo.config.model.api.ServiceInfo; +import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.vespa.defaults.Defaults; @@ -16,6 +17,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.TreeMap; +import java.util.stream.Collectors; import static com.yahoo.text.Lowercase.toLowerCase; @@ -54,19 +57,7 @@ public abstract class AbstractService extends AbstractConfigProducer<AbstractCon // Please keep non-null, as passed to command line in service startup private String preload = null; - // If larger or equal to 0 it mean that explicit mmaps shall not be included in coredump. - private long mmapNoCoreLimit = -1L; - - // If this is true it will dump core when OOM - private boolean coreOnOOM = false; - - // If greater than 0, controls the number of threads used by open mp - private int ompNumThreads = 0; - - private String noVespaMalloc = ""; - private String vespaMalloc = ""; - private String vespaMallocDebug = ""; - private String vespaMallocDebugStackTrace = ""; + private final Map<String, Object> environmentVariables = new TreeMap<>(); /** The ports metainfo object */ protected PortsMeta portsMeta = new PortsMeta(); @@ -97,6 +88,8 @@ public abstract class AbstractService extends AbstractConfigProducer<AbstractCon */ public AbstractService(AbstractConfigProducer<?> parent, String name) { super(parent, name); + environmentVariables.put("OMP_NUM_THREADS", 1); + environmentVariables.put("VESPA_SILENCE_CORE_ON_OOM", true); } /** @@ -105,7 +98,7 @@ public abstract class AbstractService extends AbstractConfigProducer<AbstractCon * @param name the name of this service. */ public AbstractService(String name) { - super(name); + this(null, name); } @Override @@ -139,7 +132,7 @@ public abstract class AbstractService extends AbstractConfigProducer<AbstractCon * @param hostResource The physical host on which this service should run. * @param userPort The wanted port given by the user. */ - private void initService(DeployLogger deployLogger, HostResource hostResource, int userPort) { + private void initService(DeployState deployState, HostResource hostResource, int userPort) { if (initialized) { throw new IllegalStateException("Service '" + getConfigId() + "' already initialized."); } @@ -148,16 +141,19 @@ public abstract class AbstractService extends AbstractConfigProducer<AbstractCon "The hostalias is probably missing from hosts.xml."); } id = getIndex(hostResource); - ports = hostResource.allocateService(deployLogger, this, getInstanceWantedPort(userPort)); + ports = hostResource.allocateService(deployState.getDeployLogger(), this, getInstanceWantedPort(userPort)); initialized = true; + for(String envVar : deployState.getProperties().environmentVariables()) { + addEnvironmentVariable(envVar); + } } /** * Called by builder class which has not given the host or port in a constructor, hence * initService is not yet run for this. */ - public void initService(DeployLogger deployLogger) { - initService(deployLogger, this.hostResource, this.basePort); + public void initService(DeployState deployState) { + initService(deployState, this.hostResource, this.basePort); } /** @@ -381,60 +377,44 @@ public abstract class AbstractService extends AbstractConfigProducer<AbstractCon public void setPreLoad(String preload) { this.preload = preload; } - public long getMMapNoCoreLimit() { return mmapNoCoreLimit; } - public void setMMapNoCoreLimit(long noCoreLimit) { this.mmapNoCoreLimit = noCoreLimit; } - public boolean getCoreOnOOM() { return coreOnOOM; } - public void setCoreOnOOM(boolean coreOnOOM) { this.coreOnOOM = coreOnOOM; } - public int getOmpNumThreads() { return ompNumThreads; } - public void setOmpNumThreads(int value) { ompNumThreads = value; } - - public String getNoVespaMalloc() { return noVespaMalloc; } - public String getVespaMalloc() { return vespaMalloc; } - public String getVespaMallocDebug() { return vespaMallocDebug; } - public String getVespaMallocDebugStackTrace() { return vespaMallocDebugStackTrace; } - public void setNoVespaMalloc(String s) { noVespaMalloc = s; } - public void setVespaMalloc(String s) { vespaMalloc = s; } - public void setVespaMallocDebug(String s) { vespaMallocDebug = s; } - public void setVespaMallocDebugStackTrace(String s) { vespaMallocDebugStackTrace = s; } - - public String getMMapNoCoreEnvVariable() { - return (getMMapNoCoreLimit() >= 0L) - ? "VESPA_MMAP_NOCORE_LIMIT=" + getMMapNoCoreLimit() + " " - : ""; - } - - public String getCoreOnOOMEnvVariable() { - return getCoreOnOOM() ? "" : "VESPA_SILENCE_CORE_ON_OOM=true "; - } - public String getOmpNumThreadsEnvVariable() { - return (getOmpNumThreads() == 0) - ? "" - : "OMP_NUM_THREADS=" + getOmpNumThreads() + " "; - } - public String getNoVespaMallocEnvVariable() { - return "".equals(getNoVespaMalloc()) - ? "" - : "VESPA_USE_NO_VESPAMALLOC=\"" + getNoVespaMalloc() + "\" "; - } - public String getVespaMallocEnvVariable() { - return "".equals(getVespaMalloc()) - ? "" - : "VESPA_USE_VESPAMALLOC=\"" + getVespaMalloc() + "\" "; - } - public String getVespaMallocDebugEnvVariable() { - return "".equals(getVespaMallocDebug()) - ? "" - : "VESPA_USE_VESPAMALLOC_D=\"" + getVespaMallocDebug() + "\" "; - } - public String getVespaMallocDebugStackTraceEnvVariable() { - return "".equals(getVespaMallocDebugStackTrace()) - ? "" - : "VESPA_USE_VESPAMALLOC_DST=\"" + getVespaMallocDebugStackTrace() + "\" "; - } - - public String getEnvVariables() { - return getCoreOnOOMEnvVariable() + getOmpNumThreadsEnvVariable() + getMMapNoCoreEnvVariable() + getNoVespaMallocEnvVariable() + - getVespaMallocEnvVariable() + getVespaMallocDebugEnvVariable() + getVespaMallocDebugStackTraceEnvVariable(); + /** If larger or equal to 0 it mean that explicit mmaps shall not be included in coredump.*/ + public void setMMapNoCoreLimit(long noCoreLimit) { + if (noCoreLimit >= 0) { + environmentVariables.put("VESPA_MMAP_NOCORE_LIMIT", noCoreLimit); + } else { + environmentVariables.remove("VESPA_MMAP_NOCORE_LIMIT"); + } + } + public void setCoreOnOOM(boolean coreOnOOM) { + if ( ! coreOnOOM) { + environmentVariables.put("VESPA_SILENCE_CORE_ON_OOM", true); + } else { + environmentVariables.remove("VESPA_SILENCE_CORE_ON_OOM"); + } + } + + public void setNoVespaMalloc(String s) { environmentVariables.put("VESPA_USE_NO_VESPAMALLOC", s); } + public void setVespaMalloc(String s) { environmentVariables.put("VESPA_USE_VESPAMALLOC", s); } + public void setVespaMallocDebug(String s) { environmentVariables.put("VESPA_USE_VESPAMALLOC_D", s); } + public void setVespaMallocDebugStackTrace(String s) { environmentVariables.put("VESPA_USE_VESPAMALLOC_DST", s); } + + private static String toEnvValue(Object o) { + if (o instanceof Number || o instanceof Boolean) { + return o.toString(); + } + return '"' + o.toString() + '"'; + } + + public void addEnvironmentVariable(String nameAndValue) { + int pos = nameAndValue.indexOf('='); + environmentVariables.put(nameAndValue.substring(0, pos), nameAndValue.substring(pos+1)); + } + public void addEnvironmentVariable(String name, Object value) { + environmentVariables.put(name, value); + } + + public String getEnv() { + return environmentVariables.entrySet().stream().map(e -> e.getKey() + '=' + toEnvValue(e.getValue())).collect(Collectors.joining(" ")); } /** 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 2692d676d2b..e299689d1c7 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 @@ -5,7 +5,6 @@ import com.yahoo.config.model.api.ModelContext; import com.yahoo.cloud.config.SlobroksConfig; import com.yahoo.cloud.config.ZookeepersConfig; import com.yahoo.cloud.config.log.LogdConfig; -import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.ConfigModelContext.ApplicationType; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducer; @@ -168,7 +167,7 @@ public class Admin extends AbstractConfigProducer<Admin> implements Serializable Slobrok slobrok = new Slobrok(this, clusterController.index(), deployState.featureFlags()); slobrok.setHostResource(clusterController.getHostResource()); slobroks.add(slobrok); - slobrok.initService(deployState.getDeployLogger()); + slobrok.initService(deployState); } return slobroks; } @@ -237,16 +236,16 @@ public class Admin extends AbstractConfigProducer<Admin> implements Serializable // Send hostname to be used in configId (instead of index), as the sorting of hosts seems to be unstable // between config changes, even when the set of hosts is unchanged. var container = new MetricsProxyContainer(metricsProxyCluster, host, index, deployState); - addAndInitializeService(deployState.getDeployLogger(), host, container); + addAndInitializeService(deployState, host, container); metricsProxyCluster.addContainer(container); } } private void addCommonServices(HostResource host, DeployState deployState) { - addConfigSentinel(deployState.getDeployLogger(), host, deployState.getProperties().applicationId(), deployState.zone(), + addConfigSentinel(deployState, host, deployState.getProperties().applicationId(), deployState.zone(), deployState.featureFlags()); - addLogd(deployState.getDeployLogger(), host); - addConfigProxy(deployState.getDeployLogger(), host); + addLogd(deployState, host); + addConfigProxy(deployState, host); addFileDistribution(host); if (logForwarderConfig != null) { boolean actuallyAdd = true; @@ -259,34 +258,34 @@ public class Admin extends AbstractConfigProducer<Admin> implements Serializable } } if (actuallyAdd) { - addLogForwarder(deployState.getDeployLogger(), host); + addLogForwarder(deployState, host); } } } - private void addConfigSentinel(DeployLogger deployLogger, HostResource host, + private void addConfigSentinel(DeployState deployState, HostResource host, ApplicationId applicationId, Zone zone, ModelContext.FeatureFlags featureFlags) { ConfigSentinel configSentinel = new ConfigSentinel(host.getHost(), applicationId, zone, featureFlags); - addAndInitializeService(deployLogger, host, configSentinel); + addAndInitializeService(deployState, host, configSentinel); host.getHost().setConfigSentinel(configSentinel); } - private void addLogForwarder(DeployLogger deployLogger, HostResource host) { - addAndInitializeService(deployLogger, host, new LogForwarder(host.getHost(), logForwarderConfig)); + private void addLogForwarder(DeployState deployState, HostResource host) { + addAndInitializeService(deployState, host, new LogForwarder(host.getHost(), logForwarderConfig)); } - private void addLogd(DeployLogger deployLogger, HostResource host) { - addAndInitializeService(deployLogger, host, new Logd(host.getHost())); + private void addLogd(DeployState deployState, HostResource host) { + addAndInitializeService(deployState, host, new Logd(host.getHost())); } - private void addConfigProxy(DeployLogger deployLogger, HostResource host) { - addAndInitializeService(deployLogger, host, new ConfigProxy(host.getHost())); + private void addConfigProxy(DeployState deployState, HostResource host) { + addAndInitializeService(deployState, host, new ConfigProxy(host.getHost())); } - public void addAndInitializeService(DeployLogger deployLogger, HostResource host, AbstractService service) { + public void addAndInitializeService(DeployState deployState, HostResource host, AbstractService service) { service.setHostResource(host); - service.initService(deployLogger); + service.initService(deployState); } private void addFileDistribution(HostResource host) { @@ -300,7 +299,7 @@ public class Admin extends AbstractConfigProducer<Admin> implements Serializable List<Slobrok> slobs = new ArrayList<>(); if (logserver != null) { Slobrok slobrok = new Slobrok(this, 0, deployState.featureFlags()); - addAndInitializeService(deployState.getDeployLogger(), logserver.getHostResource(), slobrok); + addAndInitializeService(deployState, logserver.getHostResource(), slobrok); slobs.add(slobrok); } @@ -309,7 +308,7 @@ public class Admin extends AbstractConfigProducer<Admin> implements Serializable HostResource host = hosts.get(n); if ((logserver== null || host != logserver.getHostResource()) && ! host.getHost().runsConfigServer()) { Slobrok newSlobrok = new Slobrok(this, slobs.size(), deployState.featureFlags()); - addAndInitializeService(deployState.getDeployLogger(), host, newSlobrok); + addAndInitializeService(deployState, host, newSlobrok); slobs.add(newSlobrok); } n++; 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 56f462805bd..4c74282c061 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 @@ -45,7 +45,7 @@ public abstract class DomAdminBuilderBase extends VespaDomBuilder.DomConfigProdu this.configServerSpecs = configServerSpecs; } - List<Configserver> getConfigServersFromSpec(DeployLogger deployLogger, AbstractConfigProducer<?> parent) { + List<Configserver> getConfigServersFromSpec(DeployState deployState, AbstractConfigProducer<?> parent) { List<Configserver> configservers = new ArrayList<>(); for (ConfigServerSpec spec : configServerSpecs) { HostSystem hostSystem = parent.hostSystem(); @@ -54,7 +54,7 @@ public abstract class DomAdminBuilderBase extends VespaDomBuilder.DomConfigProdu Configserver configserver = new Configserver(parent, spec.getHostName(), spec.getConfigServerPort()); configserver.setHostResource(host); configserver.setBasePort(configserver.getWantedPort()); - configserver.initService(deployLogger); + configserver.initService(deployState); configservers.add(configserver); } return configservers; 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 5aaba9550d2..8e7c543b67b 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 @@ -53,7 +53,7 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { private List<Configserver> parseConfigservers(DeployState deployState, Admin admin, Element adminE) { List<Configserver> configservers; if (multitenant) - configservers = getConfigServersFromSpec(deployState.getDeployLogger(), admin); + configservers = getConfigServersFromSpec(deployState, admin); else configservers = getConfigServers(deployState, admin, adminE); if (configservers.isEmpty() && ! multitenant) @@ -129,7 +129,7 @@ public class DomAdminV2Builder extends DomAdminBuilderBase { 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()); + configServer.initService(deployState); return List.of(configServer); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java index 41baf2db3aa..a91a7949ad8 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java @@ -1,7 +1,6 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.builder.xml.dom; -import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.ConfigModelContext; import com.yahoo.config.model.api.ConfigServerSpec; import com.yahoo.config.model.deploy.DeployState; @@ -44,7 +43,7 @@ public class DomAdminV4Builder extends DomAdminBuilderBase { @Override protected void doBuildAdmin(DeployState deployState, Admin admin, Element w3cAdminElement) { ModelElement adminElement = new ModelElement(w3cAdminElement); - admin.addConfigservers(getConfigServersFromSpec(deployState.getDeployLogger(), admin)); + admin.addConfigservers(getConfigServersFromSpec(deployState, admin)); // Note: These two elements only exists in admin version 4.0 // This build handles admin version 3.0 by ignoring its content (as the content is not useful) @@ -79,13 +78,13 @@ public class DomAdminV4Builder extends DomAdminBuilderBase { Collection<HostResource> hosts = allocateHosts(admin.hostSystem(), "logserver", nodesSpecification); if (hosts.isEmpty()) return; // No log server can be created (and none is needed) - Logserver logserver = createLogserver(deployState.getDeployLogger(), admin, hosts); + Logserver logserver = createLogserver(deployState, admin, hosts); createContainerOnLogserverHost(deployState, admin, logserver.getHostResource()); } else if (containerModels.iterator().hasNext()) { List<HostResource> hosts = sortedContainerHostsFrom(containerModels.iterator().next(), nodesSpecification.minResources().nodes(), false); if (hosts.isEmpty()) return; // No log server can be created (and none is needed) - createLogserver(deployState.getDeployLogger(), admin, hosts); + createLogserver(deployState, admin, hosts); } else { context.getDeployLogger().logApplicationPackage(Level.INFO, "No container host available to use for running logserver"); } @@ -110,9 +109,9 @@ public class DomAdminV4Builder extends DomAdminBuilderBase { LogserverContainer container = new LogserverContainer(logServerCluster, deployState); container.setHostResource(hostResource); - container.initService(deployState.getDeployLogger()); + container.initService(deployState); logServerCluster.addContainer(container); - admin.addAndInitializeService(deployState.getDeployLogger(), hostResource, container); + admin.addAndInitializeService(deployState, hostResource, container); admin.setLogserverContainerCluster(logServerCluster); context.getConfigModelRepoAdder().add(logserverClusterModel); } @@ -169,11 +168,11 @@ public class DomAdminV4Builder extends DomAdminBuilderBase { return hosts.subList(0, Math.min(count, hosts.size())); } - private Logserver createLogserver(DeployLogger deployLogger, Admin admin, Collection<HostResource> hosts) { + private Logserver createLogserver(DeployState deployState, Admin admin, Collection<HostResource> hosts) { Logserver logserver = new Logserver(admin); logserver.setHostResource(hosts.iterator().next()); admin.setLogserver(logserver); - logserver.initService(deployLogger); + logserver.initService(deployState); return logserver; } @@ -185,7 +184,7 @@ public class DomAdminV4Builder extends DomAdminBuilderBase { Slobrok slobrok = new Slobrok(admin, index++, deployState.featureFlags()); slobrok.setHostResource(host); slobroks.add(slobrok); - slobrok.initService(deployState.getDeployLogger()); + slobrok.initService(deployState); } admin.addSlobroks(slobroks); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java index cb19df16fd8..0be3ac01f71 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java @@ -183,7 +183,7 @@ public class VespaDomBuilder extends VespaModelBuilder { // This depends on which constructor in AbstractService is used, but the best way // is to let this method do initialize. if (!t.isInitialized()) { - t.initService(deployState.getDeployLogger()); + t.initService(deployState); } } 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 2e5126dcc44..4b1c03a170c 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 @@ -168,11 +168,11 @@ public abstract class Container extends AbstractService implements public void addBuiltinHandlers() { } @Override - public void initService(DeployLogger deployLogger) { + public void initService(DeployState deployState) { if (isInitialized()) return; // XXX: Must be called first, to set the baseport - super.initService(deployLogger); + super.initService(deployState); if (getHttp() == null) { initDefaultJettyConnector(); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java index b89c48931b2..8e856e5e962 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java @@ -814,7 +814,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { false, !deployState.getProperties().isBootstrap()); var hosts = hostSystem.allocateHosts(clusterSpec, capacity, log); - return createNodesFromHosts(log, hosts, cluster, context.getDeployState()); + return createNodesFromHosts(hosts, cluster, context.getDeployState()); } else { return singleHostContainerCluster(cluster, hostSystem.getHost(Container.SINGLENODE_CONTAINER_SERVICESPEC), context); @@ -824,7 +824,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { private List<ApplicationContainer> singleHostContainerCluster(ApplicationContainerCluster cluster, HostResource host, ConfigModelContext context) { ApplicationContainer node = new ApplicationContainer(cluster, "container.0", 0, context.getDeployState()); node.setHostResource(host); - node.initService(context.getDeployLogger()); + node.initService(context.getDeployState()); return List.of(node); } @@ -835,7 +835,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { ClusterSpec.Id.from(cluster.getName()), log, hasZooKeeper(containerElement)); - return createNodesFromHosts(context.getDeployLogger(), hosts, cluster, context.getDeployState()); + return createNodesFromHosts(hosts, cluster, context.getDeployState()); } private List<ApplicationContainer> createNodesFromNodeType(ApplicationContainerCluster cluster, Element nodesElement, ConfigModelContext context) { @@ -847,7 +847,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { Map<HostResource, ClusterMembership> hosts = cluster.getRoot().hostSystem().allocateHosts(clusterSpec, Capacity.fromRequiredNodeType(type), log); - return createNodesFromHosts(context.getDeployLogger(), hosts, cluster, context.getDeployState()); + return createNodesFromHosts(hosts, cluster, context.getDeployState()); } private List<ApplicationContainer> createNodesFromContentServiceReference(ApplicationContainerCluster cluster, Element nodesElement, ConfigModelContext context) { @@ -865,11 +865,10 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { referenceId, cluster.getRoot().hostSystem(), context.getDeployLogger()); - return createNodesFromHosts(context.getDeployLogger(), hosts, cluster, context.getDeployState()); + return createNodesFromHosts(hosts, cluster, context.getDeployState()); } - private List<ApplicationContainer> createNodesFromHosts(DeployLogger deployLogger, - Map<HostResource, ClusterMembership> hosts, + private List<ApplicationContainer> createNodesFromHosts(Map<HostResource, ClusterMembership> hosts, ApplicationContainerCluster cluster, DeployState deployState) { List<ApplicationContainer> nodes = new ArrayList<>(); @@ -877,7 +876,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { String id = "container." + entry.getValue().index(); ApplicationContainer container = new ApplicationContainer(cluster, id, entry.getValue().retired(), entry.getValue().index(), deployState); container.setHostResource(entry.getKey()); - container.initService(deployLogger); + container.initService(deployState); nodes.add(container); } return nodes; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/Content.java b/config-model/src/main/java/com/yahoo/vespa/model/content/Content.java index e69dd9abf47..dcf0be48f7b 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/Content.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/Content.java @@ -312,7 +312,7 @@ public class Content extends ConfigModel { index++; docprocService.useDynamicPorts(); docprocService.setHostResource(host); - docprocService.initService(modelContext.getDeployLogger()); + docprocService.initService(modelContext.getDeployState()); nodes.add(docprocService); processedHosts.add(host); } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java index 6d21e0ad10e..22b752777e9 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java @@ -300,11 +300,11 @@ public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster> clusterName, node, flushOnShutdown, tuning, resourceLimits, parentGroup.isHosted(), fractionOfMemoryReserved); searchNode.setHostResource(node.getHostResource()); - searchNode.initService(deployState.getDeployLogger()); + searchNode.initService(deployState); tls = new TransactionLogServer(searchNode, clusterName, syncTransactionLog); tls.setHostResource(searchNode.getHostResource()); - tls.initService(deployState.getDeployLogger()); + tls.initService(deployState); } else { searchNode = new SearchNode.Builder(""+node.getDistributionKey(), spec, clusterName, node, flushOnShutdown, tuning, resourceLimits, fractionOfMemoryReserved) diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/StorageGroup.java b/config-model/src/main/java/com/yahoo/vespa/model/content/StorageGroup.java index de50ba6ea21..88739e92567 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/StorageGroup.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/StorageGroup.java @@ -280,15 +280,13 @@ public class StorageGroup { /** The nodes explicitly specified as a nodes tag in this group, or empty if none */ private final Optional<NodesSpecification> nodeRequirement; - private final DeployLogger deployLogger; private GroupBuilder(StorageGroup storageGroup, List<GroupBuilder> subGroups, List<XmlNodeBuilder> nodeBuilders, - Optional<NodesSpecification> nodeRequirement, DeployLogger deployLogger) { + Optional<NodesSpecification> nodeRequirement) { this.storageGroup = storageGroup; this.subGroups = subGroups; this.nodeBuilders = nodeBuilders; this.nodeRequirement = nodeRequirement; - this.deployLogger = deployLogger; } /** @@ -319,11 +317,11 @@ public class StorageGroup { StorageNode searchNode = new StorageNode(deployState.getProperties(), parent.getStorageCluster(), 1.0, distributionKey , false); searchNode.setHostResource(parent.hostSystem().getHost(Container.SINGLENODE_CONTAINER_SERVICESPEC)); PersistenceEngine provider = parent.getPersistence().create(deployState, searchNode, storageGroup, null); - searchNode.initService(deployLogger); + searchNode.initService(deployState); Distributor distributor = new Distributor(deployState.getProperties(), parent.getDistributorNodes(), distributionKey, null, provider); distributor.setHostResource(searchNode.getHostResource()); - distributor.initService(deployLogger); + distributor.initService(deployState); return searchNode; } @@ -339,7 +337,7 @@ public class StorageGroup { throw new IllegalArgumentException("Specifying individual groups is not supported on hosted applications"); Map<HostResource, ClusterMembership> hostMapping = nodeRequirement.isPresent() ? - provisionHosts(nodeRequirement.get(), owner.getStorageCluster().getClusterName(), owner.getRoot().hostSystem(), deployLogger) : + provisionHosts(nodeRequirement.get(), owner.getStorageCluster().getClusterName(), owner.getRoot().hostSystem(), deployState.getDeployLogger()) : Collections.emptyMap(); Map<Optional<ClusterSpec.Group>, Map<HostResource, ClusterMembership>> hostGroups = collectAllocatedSubgroups(hostMapping); @@ -450,7 +448,7 @@ public class StorageGroup { else // Nodes or groups explicitly listed - resolve in GroupBuilder nodeRequirement = Optional.empty(); - return new GroupBuilder(group, subGroups, explicitNodes, nodeRequirement, context.getDeployLogger()); + return new GroupBuilder(group, subGroups, explicitNodes, nodeRequirement); } private Optional<String> childAsString(Optional<ModelElement> element, String childTagName) { @@ -503,13 +501,13 @@ public class StorageGroup { private static StorageNode createStorageNode(DeployState deployState, ContentCluster parent, HostResource hostResource, StorageGroup parentGroup, ClusterMembership clusterMembership) { StorageNode sNode = new StorageNode(deployState.getProperties(), parent.getStorageCluster(), null, clusterMembership.index(), clusterMembership.retired()); sNode.setHostResource(hostResource); - sNode.initService(deployState.getDeployLogger()); + sNode.initService(deployState); // TODO: Supplying null as XML is not very nice PersistenceEngine provider = parent.getPersistence().create(deployState, sNode, parentGroup, null); Distributor d = new Distributor(deployState.getProperties(), parent.getDistributorNodes(), clusterMembership.index(), null, provider); d.setHostResource(sNode.getHostResource()); - d.initService(deployState.getDeployLogger()); + d.initService(deployState); return sNode; } } 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 4a88e02be45..eda70ffb2bc 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 @@ -367,7 +367,7 @@ public class ContentCluster extends AbstractConfigProducer<AbstractConfigProduce boolean retired = host.spec().membership().map(ClusterMembership::retired).orElse(false); var clusterControllerContainer = new ClusterControllerContainer(clusterControllers, ccIndex, runStandaloneZooKeeper, deployState, retired); clusterControllerContainer.setHostResource(host); - clusterControllerContainer.initService(deployState.getDeployLogger()); + clusterControllerContainer.initService(deployState); clusterControllerContainer.setProp("clustertype", "admin"); containers.add(clusterControllerContainer); ++index; 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 28d1fbe72ef..6e3f3e1ebf5 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 @@ -123,7 +123,6 @@ public class SearchNode extends AbstractService implements boolean flushOnShutdown, Optional<Tuning> tuning, Optional<ResourceLimits> resourceLimits, boolean isHostedVespa, double fractionOfMemoryReserved) { super(parent, name); - setOmpNumThreads(1); this.isHostedVespa = isHostedVespa; this.fractionOfMemoryReserved = fractionOfMemoryReserved; this.nodeSpec = nodeSpec; @@ -239,10 +238,7 @@ public class SearchNode extends AbstractService implements @Override public String getStartupCommand() { - if (getOmpNumThreads() != 1) { - throw new IllegalStateException("ompNumThreads must be 1"); - } - String startup = getEnvVariables() + "exec $ROOT/sbin/vespa-proton " + "--identity " + getConfigId(); + String startup = getEnv() + " exec $ROOT/sbin/vespa-proton " + "--identity " + getConfigId(); if (serviceLayerService != null) { startup = startup + " --serviceidentity " + serviceLayerService.getConfigId(); } |