From dd70aed6d773d02a1ac19c7c3af642feeef2212f Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Mon, 8 Oct 2018 22:32:10 +0200 Subject: Wire in deployLogger explicit instead of using a backdoor. --- .../com/yahoo/config/model/ConfigModelRepo.java | 2 +- .../model/producer/AbstractConfigProducer.java | 5 -- .../java/com/yahoo/config/model/test/MockRoot.java | 5 +- .../com/yahoo/vespa/model/AbstractService.java | 9 +-- .../src/main/java/com/yahoo/vespa/model/Host.java | 33 +++------ .../java/com/yahoo/vespa/model/HostResource.java | 13 ++-- .../java/com/yahoo/vespa/model/HostSystem.java | 29 +++++--- .../java/com/yahoo/vespa/model/VespaModel.java | 5 -- .../java/com/yahoo/vespa/model/admin/Admin.java | 37 +++++----- .../vespa/model/builder/VespaModelBuilder.java | 3 +- .../model/builder/xml/dom/DomAdminBuilderBase.java | 4 +- .../model/builder/xml/dom/DomAdminV4Builder.java | 25 +++---- .../model/builder/xml/dom/VespaDomBuilder.java | 12 ++-- .../com/yahoo/vespa/model/container/Container.java | 5 +- .../model/container/xml/ContainerModelBuilder.java | 12 ++-- .../com/yahoo/vespa/model/content/Content.java | 9 +-- .../vespa/model/content/ContentSearchCluster.java | 4 +- .../yahoo/vespa/model/content/StorageGroup.java | 4 +- .../model/content/cluster/ContentCluster.java | 2 +- .../vespa/model/search/DispatchGroupBuilder.java | 15 ++-- .../vespa/model/search/IndexedSearchCluster.java | 36 +++++----- .../com/yahoo/vespa/model/HostResourceTest.java | 41 ++++++----- .../model/container/ContainerClusterTest.java | 83 ++++++++++++---------- .../content/IndexedHierarchicDistributionTest.java | 3 +- .../vespa/model/search/MultilevelDispatchTest.java | 4 +- .../vespa/model/search/test/SearchNodeTest.java | 8 +-- .../vespa/model/test/ModelAmendingTestCase.java | 7 +- 27 files changed, 215 insertions(+), 200 deletions(-) (limited to 'config-model') diff --git a/config-model/src/main/java/com/yahoo/config/model/ConfigModelRepo.java b/config-model/src/main/java/com/yahoo/config/model/ConfigModelRepo.java index f14a1ea3c2c..0b638c14485 100644 --- a/config-model/src/main/java/com/yahoo/config/model/ConfigModelRepo.java +++ b/config-model/src/main/java/com/yahoo/config/model/ConfigModelRepo.java @@ -79,7 +79,7 @@ public class ConfigModelRepo implements ConfigModelRepoAdder, Serializable, Iter ConfigModelRegistry configModelRegistry) throws IOException, SAXException { Element userServicesElement = getServicesFromApp(deployState.getApplicationPackage()); readConfigModels(root, userServicesElement, deployState, vespaModel, configModelRegistry); - builder.postProc(root, this); + builder.postProc(deployState.getDeployLogger(), root, this); } private Element getServicesFromApp(ApplicationPackage applicationPackage) throws IOException, SAXException { 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 71ee5d148a8..6cb73429971 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 @@ -431,11 +431,6 @@ public abstract class AbstractConfigProducer * @param hostname hostname for this host. */ public Host(AbstractConfigProducer parent, String hostname) { - this(parent, hostname, false, parent.deployLogger()); + this(parent, hostname, false); } - private Host(AbstractConfigProducer parent, String hostname, boolean runsConfigServer, DeployLogger deployLogger) { + private Host(AbstractConfigProducer parent, String hostname, boolean runsConfigServer) { super(parent, hostname); Objects.requireNonNull(hostname, "The host name of a host cannot be null"); this.runsConfigServer = runsConfigServer; this.hostname = hostname; if (parent instanceof HostSystem) - checkName(hostname, deployLogger); - } - - private void checkName(String hostname, DeployLogger deployLogger) { - // Give a warning if the host does not exist - try { - Object address = java.net.InetAddress.getByName(hostname); - } catch (UnknownHostException e) { - deployLogger.log(Level.WARNING, "Unable to lookup IP address of host: " + hostname); - } - if (! hostname.contains(".")) { - deployLogger.log(Level.WARNING, "Host named '" + hostname + "' may not receive any config " + - "since it is not a canonical hostname"); - } + ((HostSystem)parent).checkName(hostname); } - public static Host createConfigServerHost(DeployLogger deployLogger, AbstractConfigProducer parent, String hostname) { - return new Host(parent, hostname, true, deployLogger); + public static Host createConfigServerHost(AbstractConfigProducer parent, String hostname) { + return new Host(parent, hostname, true); } - public static Host createHost(DeployLogger deployLogger, AbstractConfigProducer parent, String hostname) { - return new Host(parent, hostname, false, deployLogger); + public static Host createHost(AbstractConfigProducer parent, String hostname) { + return new Host(parent, hostname, false); } // For testing diff --git a/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java b/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java index 16335a435b9..75020b23607 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/HostResource.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.model; import com.yahoo.component.Version; +import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.api.HostInfo; import com.yahoo.config.provision.ClusterMembership; import com.yahoo.config.provision.Flavor; @@ -97,8 +98,8 @@ public class HostResource implements Comparable { * @param wantedPort the wanted port for this service * @return The allocated ports for the Service. */ - List allocateService(AbstractService service, int wantedPort) { - List ports = allocatePorts(service, wantedPort); + List allocateService(DeployLogger deployLogger, AbstractService service, int wantedPort) { + List ports = allocatePorts(deployLogger, service, wantedPort); assert (getService(service.getServiceName()) == null) : ("There is already a service with name '" + service.getServiceName() + "' registered on " + this + ". Most likely a programming error - all service classes must have unique names, even in different packages!"); @@ -107,7 +108,7 @@ public class HostResource implements Comparable { return ports; } - private List allocatePorts(AbstractService service, int wantedPort) { + private List allocatePorts(DeployLogger deployLogger, AbstractService service, int wantedPort) { List ports = new ArrayList<>(); if (service.getPortCount() < 1) return ports; @@ -118,7 +119,7 @@ public class HostResource implements Comparable { throw new RuntimeException(service + " wants baseport " + wantedPort + ", but it has not reserved any ports, so it cannot name a desired baseport."); } - if (service.requiresWantedPort() || canUseWantedPort(service, wantedPort, serviceBasePort)) + if (service.requiresWantedPort() || canUseWantedPort(deployLogger, service, wantedPort, serviceBasePort)) serviceBasePort = wantedPort; } @@ -136,12 +137,12 @@ public class HostResource implements Comparable { return ports; } - private boolean canUseWantedPort(AbstractService service, int wantedPort, int serviceBasePort) { + private boolean canUseWantedPort(DeployLogger deployLogger, AbstractService service, int wantedPort, int serviceBasePort) { for (int i = 0; i < service.getPortCount(); i++) { int port = wantedPort + i; if (portDB.containsKey(port)) { AbstractService s = (AbstractService)portDB.get(port); - s.getRoot().deployLogger().log(Level.WARNING, service.getServiceName() +" cannot reserve port " + port + " on " + + deployLogger.log(Level.WARNING, service.getServiceName() +" cannot reserve port " + port + " on " + this + ": Already reserved for " + s.getServiceName() + ". Using default port range from " + serviceBasePort); return false; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java b/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java index 8cac31bbaad..6f8064d0b5c 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/HostSystem.java @@ -38,10 +38,25 @@ public class HostSystem extends AbstractConfigProducer { private final Map hostname2host = new LinkedHashMap<>(); private final HostProvisioner provisioner; + private final DeployLogger deployLogger; - public HostSystem(AbstractConfigProducer parent, String name, HostProvisioner provisioner) { + public HostSystem(AbstractConfigProducer parent, String name, HostProvisioner provisioner, DeployLogger deployLogger) { super(parent, name); this.provisioner = provisioner; + this.deployLogger = deployLogger; + } + + void checkName(String hostname) { + // Give a warning if the host does not exist + try { + Object address = java.net.InetAddress.getByName(hostname); + } catch (UnknownHostException e) { + deployLogger.log(Level.WARNING, "Unable to lookup IP address of host: " + hostname); + } + if (! hostname.contains(".")) { + deployLogger.log(Level.WARNING, "Host named '" + hostname + "' may not receive any config " + + "since it is not a canonical hostname"); + } } /** @@ -99,10 +114,6 @@ public class HostSystem extends AbstractConfigProducer { } public HostResource getHost(String hostAlias) { - return getHost(hostAlias, deployLogger()); - } - - public HostResource getHost(String hostAlias, DeployLogger deployLogger) { HostSpec hostSpec = provisioner.allocateHost(hostAlias); for (HostResource resource : hostname2host.values()) { if (resource.getHostname().equals(hostSpec.hostname())) { @@ -110,11 +121,11 @@ public class HostSystem extends AbstractConfigProducer { return resource; } } - return addNewHost(hostSpec, deployLogger); + return addNewHost(hostSpec); } - private HostResource addNewHost(HostSpec hostSpec, DeployLogger deployLogger) { - Host host = Host.createHost(deployLogger, this, hostSpec.hostname()); + private HostResource addNewHost(HostSpec hostSpec) { + Host host = Host.createHost(this, hostSpec.hostname()); HostResource hostResource = new HostResource(host, hostSpec.version()); hostResource.setFlavor(hostSpec.flavor()); hostSpec.membership().ifPresent(hostResource::addClusterMembership); @@ -136,7 +147,7 @@ public class HostSystem extends AbstractConfigProducer { Map retAllocatedHosts = new LinkedHashMap<>(); for (HostSpec spec : allocatedHosts) { // This is needed for single node host provisioner to work in unit tests for hosted vespa applications. - HostResource host = getExistingHost(spec).orElseGet(() -> addNewHost(spec, logger)); + HostResource host = getExistingHost(spec).orElseGet(() -> addNewHost(spec)); retAllocatedHosts.put(host, spec.membership().orElse(null)); if (! host.getFlavor().isPresent()) { host.setFlavor(spec.flavor()); 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 e243778d56e..50db0f48bc7 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 @@ -599,10 +599,5 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri public ConfigModelRepo configModelRepo() { return configModelRepo; } - - @Override - public DeployLogger deployLogger() { - return deployLogger; - } } 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 863ddef8187..9e12886143d 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 @@ -4,6 +4,7 @@ package com.yahoo.vespa.model.admin; 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.api.ConfigServerSpec; import com.yahoo.config.model.deploy.DeployState; @@ -191,7 +192,7 @@ public class Admin extends AbstractConfigProducer implements Serializable { */ public void addPerHostServices(List hosts, DeployState deployState) { if (slobroks.isEmpty()) // TODO: Move to caller - slobroks.addAll(createDefaultSlobrokSetup()); + slobroks.addAll(createDefaultSlobrokSetup(deployState.getDeployLogger())); for (HostResource host : hosts) { if (!host.getHost().runsConfigServer()) { addCommonServices(host, deployState); @@ -199,36 +200,36 @@ public class Admin extends AbstractConfigProducer implements Serializable { } } private void addCommonServices(HostResource host, DeployState deployState) { - addConfigSentinel(host, deployState.getProperties().applicationId(), deployState.zone()); - addLogd(host); - addConfigProxy(host); + addConfigSentinel(deployState.getDeployLogger(), host, deployState.getProperties().applicationId(), deployState.zone()); + addLogd(deployState.getDeployLogger(), host); + addConfigProxy(deployState.getDeployLogger(), host); addFileDistribution(host); if (logForwarderConfig != null) { - addLogForwarder(host); + addLogForwarder(deployState.getDeployLogger(), host); } } - private void addConfigSentinel(HostResource host, ApplicationId applicationId, Zone zone) { + private void addConfigSentinel(DeployLogger deployLogger, HostResource host, ApplicationId applicationId, Zone zone) { ConfigSentinel configSentinel = new ConfigSentinel(host.getHost(), applicationId, zone); - addAndInitializeService(host, configSentinel); + addAndInitializeService(deployLogger, host, configSentinel); host.getHost().setConfigSentinel(configSentinel); } - private void addLogForwarder(HostResource host) { - addAndInitializeService(host, new LogForwarder(host.getHost(), logForwarderConfig)); + private void addLogForwarder(DeployLogger deployLogger, HostResource host) { + addAndInitializeService(deployLogger, host, new LogForwarder(host.getHost(), logForwarderConfig)); } - private void addLogd(HostResource host) { - addAndInitializeService(host, new Logd(host.getHost())); + private void addLogd(DeployLogger deployLogger, HostResource host) { + addAndInitializeService(deployLogger, host, new Logd(host.getHost())); } - private void addConfigProxy(HostResource host) { - addAndInitializeService(host, new ConfigProxy(host.getHost())); + private void addConfigProxy(DeployLogger deployLogger, HostResource host) { + addAndInitializeService(deployLogger, host, new ConfigProxy(host.getHost())); } - public void addAndInitializeService(HostResource host, AbstractService service) { + public void addAndInitializeService(DeployLogger deployLogger, HostResource host, AbstractService service) { service.setHostResource(host); - service.initService(); + service.initService(deployLogger); } private void addFileDistribution(HostResource host) { @@ -252,12 +253,12 @@ public class Admin extends AbstractConfigProducer implements Serializable { } // If not configured by user: Use default setup: max 3 slobroks, 1 on the default configserver host - private List createDefaultSlobrokSetup() { + private List createDefaultSlobrokSetup(DeployLogger deployLogger) { List hosts = getHostSystem().getHosts(); List slobs = new ArrayList<>(); if (logserver != null) { Slobrok slobrok = new Slobrok(this, 0); - addAndInitializeService(logserver.getHostResource(), slobrok); + addAndInitializeService(deployLogger, logserver.getHostResource(), slobrok); slobs.add(slobrok); } @@ -266,7 +267,7 @@ public class Admin extends AbstractConfigProducer implements Serializable { HostResource host = hosts.get(n); if ((logserver== null || host != logserver.getHostResource()) && ! host.getHost().runsConfigServer()) { Slobrok newSlobrok = new Slobrok(this, slobs.size()); - addAndInitializeService(host, newSlobrok); + addAndInitializeService(deployLogger, host, newSlobrok); slobs.add(newSlobrok); } n++; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/VespaModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/VespaModelBuilder.java index 4f175b2ec42..1c2ea4ecd41 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/VespaModelBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/VespaModelBuilder.java @@ -1,6 +1,7 @@ // 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.builder; +import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.ConfigModelRepo; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducer; @@ -25,6 +26,6 @@ public abstract class VespaModelBuilder { * @param producerRoot The root producer. * @param configModelRepo a {@link com.yahoo.config.model.ConfigModelRepo instance} */ - public abstract void postProc(AbstractConfigProducer producerRoot, ConfigModelRepo configModelRepo); + public abstract void postProc(DeployLogger deployLogger, AbstractConfigProducer producerRoot, ConfigModelRepo configModelRepo); } 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 a11a5c706c7..fa28802b3ac 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 @@ -59,12 +59,12 @@ public abstract class DomAdminBuilderBase extends VespaDomBuilder.DomConfigProdu List configservers = new ArrayList<>(); for (ConfigServerSpec spec : configServerSpecs) { HostSystem hostSystem = parent.getHostSystem(); - HostResource host = new HostResource(Host.createConfigServerHost(deployLogger, hostSystem, spec.getHostName())); + HostResource host = new HostResource(Host.createConfigServerHost(hostSystem, spec.getHostName())); hostSystem.addBoundHost(host); Configserver configserver = new Configserver(parent, spec.getHostName(), spec.getConfigServerPort()); configserver.setHostResource(host); configserver.setBasePort(configserver.getWantedPort()); - configserver.initService(); + configserver.initService(deployLogger); configservers.add(configserver); } return configservers; 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 331656c1eff..5698485b004 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,6 +1,7 @@ // 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.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; @@ -59,18 +60,18 @@ public class DomAdminV4Builder extends DomAdminBuilderBase { Optional requestedLogservers = NodesSpecification.optionalDedicatedFromParent(adminElement.getChild("logservers"), context); - assignSlobroks(requestedSlobroks.orElse(NodesSpecification.nonDedicated(3, context)), admin); + assignSlobroks(deployState.getDeployLogger(), requestedSlobroks.orElse(NodesSpecification.nonDedicated(3, context)), admin); assignLogserver(deployState, requestedLogservers.orElse(createNodesSpecificationForLogserver()), admin); addLogForwarders(adminElement.getChild("logforwarding"), admin); } - private void assignSlobroks(NodesSpecification nodesSpecification, Admin admin) { + private void assignSlobroks(DeployLogger deployLogger, NodesSpecification nodesSpecification, Admin admin) { if (nodesSpecification.isDedicated()) { - createSlobroks(admin, allocateHosts(admin.getHostSystem(), "slobroks", nodesSpecification)); + createSlobroks(deployLogger, admin, allocateHosts(admin.getHostSystem(), "slobroks", nodesSpecification)); } else { - createSlobroks(admin, pickContainerHostsForSlobrok(nodesSpecification.count(), 2)); + createSlobroks(deployLogger, admin, pickContainerHostsForSlobrok(nodesSpecification.count(), 2)); } } @@ -81,13 +82,13 @@ public class DomAdminV4Builder extends DomAdminBuilderBase { Collection hosts = allocateHosts(admin.getHostSystem(), "logserver", nodesSpecification); if (hosts.isEmpty()) return; // No log server can be created (and none is needed) - Logserver logserver = createLogserver(admin, hosts); + Logserver logserver = createLogserver(deployState.getDeployLogger(), admin, hosts); createAdditionalContainerOnLogserverHost(deployState, admin, logserver.getHostResource()); } else if (containerModels.iterator().hasNext()) { List hosts = sortedContainerHostsFrom(containerModels.iterator().next(), nodesSpecification.count(), false); if (hosts.isEmpty()) return; // No log server can be created (and none is needed) - createLogserver(admin, hosts); + createLogserver(deployState.getDeployLogger(), admin, hosts); } else { context.getDeployLogger().log(LogLevel.INFO, "No container host available to use for running logserver"); } @@ -124,9 +125,9 @@ public class DomAdminV4Builder extends DomAdminBuilderBase { Container container = new Container(logServerCluster, "" + 0, 0, deployState.isHosted()); container.setHostResource(hostResource); - container.initService(); + container.initService(deployState.getDeployLogger()); logServerCluster.addContainer(container); - admin.addAndInitializeService(hostResource, container); + admin.addAndInitializeService(deployState.getDeployLogger(), hostResource, container); admin.setLogserverContainerCluster(logServerCluster); } @@ -203,15 +204,15 @@ public class DomAdminV4Builder extends DomAdminBuilderBase { return HostResource.pickHosts(hosts, count, 1); } - private Logserver createLogserver(Admin admin, Collection hosts) { + private Logserver createLogserver(DeployLogger deployLogger, Admin admin, Collection hosts) { Logserver logserver = new Logserver(admin); logserver.setHostResource(hosts.iterator().next()); admin.setLogserver(logserver); - logserver.initService(); + logserver.initService(deployLogger); return logserver; } - private void createSlobroks(Admin admin, Collection hosts) { + private void createSlobroks(DeployLogger deployLogger, Admin admin, Collection hosts) { if (hosts.isEmpty()) return; // No slobroks can be created (and none are needed) List slobroks = new ArrayList<>(); int index = 0; @@ -219,7 +220,7 @@ public class DomAdminV4Builder extends DomAdminBuilderBase { Slobrok slobrok = new Slobrok(admin, index++); slobrok.setHostResource(host); slobroks.add(slobrok); - slobrok.initService(); + slobrok.initService(deployLogger); } 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 dd9d802cdc8..9fafe89ea54 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 @@ -178,7 +178,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(); + t.initService(deployState.getDeployLogger()); } } @@ -233,7 +233,7 @@ public class VespaDomBuilder extends VespaModelBuilder { deployState.getDocumentModel(), deployState.getProperties().vespaVersion(), deployState.getProperties().applicationId()); - root.setHostSystem(new HostSystem(root, "hosts", deployState.getProvisioner())); + root.setHostSystem(new HostSystem(root, "hosts", deployState.getProvisioner(), deployState.getDeployLogger())); new Client(root); return root; } @@ -277,8 +277,8 @@ public class VespaDomBuilder extends VespaModelBuilder { * @param root root config producer * @param configModelRepo a {@link ConfigModelRepo} */ - public void postProc(AbstractConfigProducer root, ConfigModelRepo configModelRepo) { - createTlds(configModelRepo); + public void postProc(DeployLogger deployLogger, AbstractConfigProducer root, ConfigModelRepo configModelRepo) { + createTlds(deployLogger, configModelRepo); setContentSearchClusterIndexes(configModelRepo); createDocprocMBusServersAndClients(configModelRepo); } @@ -294,10 +294,10 @@ public class VespaDomBuilder extends VespaModelBuilder { docproc.getChains().addServersAndClientsForChains(); } - private void createTlds(ConfigModelRepo pc) { + private void createTlds(DeployLogger deployLogger, ConfigModelRepo pc) { for (ConfigModel p : pc.asMap().values()) { if (p instanceof Content) { - ((Content)p).createTlds(pc); + ((Content)p).createTlds(deployLogger, pc); } } } 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 8317f46d4ee..ee3d382e93c 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 @@ -3,6 +3,7 @@ package com.yahoo.vespa.model.container; import com.yahoo.component.ComponentId; import com.yahoo.component.ComponentSpecification; +import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.container.ComponentsConfig; import com.yahoo.container.QrConfig; @@ -151,11 +152,11 @@ public class Container extends AbstractService implements public void addBuiltinHandlers() { } @Override - public void initService() { + public void initService(DeployLogger deployLogger) { if (isInitialized()) return; // XXX: Must be called first, to set the baseport - super.initService(); + super.initService(deployLogger); 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 6bd672701c3..80026d0182e 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 @@ -455,7 +455,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder { Container node = new Container(cluster, "container.0", 0, cluster.isHostedVespa()); HostResource host = allocateSingleNodeHost(cluster, log, containerElement, context); node.setHostResource(host); - node.initService(); + node.initService(context.getDeployLogger()); cluster.addContainers(Collections.singleton(node)); } else { @@ -544,7 +544,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder { ClusterSpec.Type.container, ClusterSpec.Id.from(cluster.getName()), log); - return createNodesFromHosts(hosts, cluster); + return createNodesFromHosts(context.getDeployLogger(), hosts, cluster); } private List createNodesFromNodeType(ContainerCluster cluster, Element nodesElement, ConfigModelContext context) { @@ -556,7 +556,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder { Map hosts = cluster.getRoot().getHostSystem().allocateHosts(clusterSpec, Capacity.fromRequiredNodeType(type), 1, log); - return createNodesFromHosts(hosts, cluster); + return createNodesFromHosts(context.getDeployLogger(), hosts, cluster); } private List createNodesFromContentServiceReference(ContainerCluster cluster, Element nodesElement, ConfigModelContext context) { @@ -579,7 +579,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder { referenceId, cluster.getRoot().getHostSystem(), context.getDeployLogger()); - return createNodesFromHosts(hosts, cluster); + return createNodesFromHosts(context.getDeployLogger(), hosts, cluster); } /** @@ -619,13 +619,13 @@ public class ContainerModelBuilder extends ConfigModelBuilder { return servicesRootOf(parentElement); } - private List createNodesFromHosts(Map hosts, ContainerCluster cluster) { + private List createNodesFromHosts(DeployLogger deployLogger, Map hosts, ContainerCluster cluster) { List nodes = new ArrayList<>(); for (Map.Entry entry : hosts.entrySet()) { String id = "container." + entry.getValue().index(); Container container = new Container(cluster, id, entry.getValue().retired(), entry.getValue().index(), cluster.isHostedVespa()); container.setHostResource(entry.getKey()); - container.initService(); + container.initService(deployLogger); 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 31e240b3ae3..8d0824f89e5 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 @@ -5,6 +5,7 @@ import com.yahoo.component.ComponentId; import com.yahoo.component.ComponentSpecification; import com.yahoo.component.chain.model.ChainSpecification; import com.yahoo.component.provider.ComponentRegistry; +import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.ApplicationConfigProducerRoot; import com.yahoo.config.model.ConfigModel; import com.yahoo.config.model.ConfigModelContext; @@ -79,7 +80,7 @@ public class Content extends ConfigModel { */ public Optional ownedIndexingCluster() { return ownedIndexingCluster; } - public void createTlds(ConfigModelRepo modelRepo) { + public void createTlds(DeployLogger deployLogger, ConfigModelRepo modelRepo) { IndexedSearchCluster indexedCluster = cluster.getSearch().getIndexed(); if (indexedCluster == null) return; @@ -91,9 +92,9 @@ public class Content extends ConfigModel { if (containerCluster.getSearch() == null) continue; // this is not a qrs cluster log.log(LogLevel.DEBUG, "Adding tlds for indexed cluster " + indexedCluster.getClusterName() + ", container cluster " + containerCluster.getName()); - indexedCluster.addTldsWithSameIdsAsContainers(tldParent, containerCluster); + indexedCluster.addTldsWithSameIdsAsContainers(deployLogger, tldParent, containerCluster); } - indexedCluster.setupDispatchGroups(); + indexedCluster.setupDispatchGroups(deployLogger); } private static boolean containsIndexingChain(ComponentRegistry allChains, ChainSpecification chainSpec) { @@ -329,7 +330,7 @@ public class Content extends ConfigModel { index++; docprocService.setBasePort(host.nextAvailableBaseport(docprocService.getPortCount())); docprocService.setHostResource(host); - docprocService.initService(); + docprocService.initService(modelContext.getDeployLogger()); 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 ec9cfb8ae76..f4754b4f958 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 @@ -235,11 +235,11 @@ public class ContentSearchCluster extends AbstractConfigProducer implements Prot snode = SearchNode.create(parent, "" + node.getDistributionKey(), node.getDistributionKey(), spec, clusterName, node, flushOnShutdown, tuning, parentGroup.getOwner().isHostedVespa()); snode.setHostResource(node.getHostResource()); - snode.initService(); + snode.initService(deployState.getDeployLogger()); tls = new TransactionLogServer(snode, clusterName); tls.setHostResource(snode.getHostResource()); - tls.initService(); + tls.initService(deployState.getDeployLogger()); } else { snode = new SearchNode.Builder(""+node.getDistributionKey(), spec, clusterName, node, flushOnShutdown, tuning).build(deployState, parent, element.getXml()); tls = new TransactionLogServer.Builder(clusterName).build(deployState, snode, element.getXml()); 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 c035793f916..17ff15d3a77 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 @@ -470,13 +470,13 @@ public class StorageGroup { private static StorageNode createStorageNode(DeployState deployState, ContentCluster parent, HostResource hostResource, StorageGroup parentGroup, ClusterMembership clusterMembership) { StorageNode sNode = new StorageNode(parent.getStorageNodes(), null, clusterMembership.index(), clusterMembership.retired()); sNode.setHostResource(hostResource); - sNode.initService(); + sNode.initService(deployState.getDeployLogger()); // TODO: Supplying null as XML is not very nice PersistenceEngine provider = parent.getPersistence().create(deployState, sNode, parentGroup, null); Distributor d = new Distributor(parent.getDistributorNodes(), clusterMembership.index(), null, provider); d.setHostResource(sNode.getHostResource()); - d.initService(); + d.initService(deployState.getDeployLogger()); 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 9aee78fabc1..7bb6e3dabd4 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 @@ -468,7 +468,7 @@ public class ContentCluster extends AbstractConfigProducer implements for (HostResource host : hosts) { ClusterControllerContainer clusterControllerContainer = new ClusterControllerContainer(clusterControllers, index, multitenant, deployState.isHosted()); clusterControllerContainer.setHostResource(host); - clusterControllerContainer.initService(); + clusterControllerContainer.initService(deployState.getDeployLogger()); clusterControllerContainer.setProp("clustertype", "admin") .setProp("clustername", clusterControllers.getName()) .setProp("index", String.valueOf(index)); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/DispatchGroupBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/search/DispatchGroupBuilder.java index e38f6613843..4ff5fcab347 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/search/DispatchGroupBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/search/DispatchGroupBuilder.java @@ -1,6 +1,7 @@ // 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.search; +import com.yahoo.config.application.api.DeployLogger; import com.yahoo.vespa.model.HostResource; import com.yahoo.vespa.model.SimpleConfigProducer; import com.yahoo.vespa.model.content.DispatchSpec; @@ -29,24 +30,24 @@ public class DispatchGroupBuilder { this.searchCluster = searchCluster; } - public void build(List groupsSpec, - List searchNodes) { + public void build(DeployLogger deployLogger, List groupsSpec, List searchNodes) { Map searchNodeMap = buildSearchNodeMap(searchNodes); for (int partId = 0; partId < groupsSpec.size(); ++partId) { DispatchSpec.Group groupSpec = groupsSpec.get(partId); DispatchGroup group = new DispatchGroup(searchCluster); - populateDispatchGroup(group, groupSpec.getNodes(), searchNodeMap, partId); + populateDispatchGroup(deployLogger, group, groupSpec.getNodes(), searchNodeMap, partId); } } - private void populateDispatchGroup(DispatchGroup group, + private void populateDispatchGroup(DeployLogger deployLogger, + DispatchGroup group, List nodeList, Map searchNodesMap, int partId) { for (int rowId = 0; rowId < nodeList.size(); ++rowId) { int distributionKey = nodeList.get(rowId).getDistributionKey(); SearchNode searchNode = searchNodesMap.get(distributionKey); - Dispatch dispatch = buildDispatch(group, new NodeSpec(rowId, partId), distributionKey, searchNode.getHostResource()); + Dispatch dispatch = buildDispatch(deployLogger, group, new NodeSpec(rowId, partId), distributionKey, searchNode.getHostResource()); group.addDispatcher(dispatch); rootDispatch.addSearcher(dispatch); @@ -65,10 +66,10 @@ public class DispatchGroupBuilder { * The dispatch group that will contain this mid-level dispatcher is no longer part of the config producer tree, * but only contains information about the dispatchers and searchers in this group. */ - private Dispatch buildDispatch(DispatchGroup group, NodeSpec nodeSpec, int distributionKey, HostResource hostResource) { + private Dispatch buildDispatch(DeployLogger deployLogger, DispatchGroup group, NodeSpec nodeSpec, int distributionKey, HostResource hostResource) { Dispatch dispatch = Dispatch.createDispatchWithStableConfigId(group, dispatchParent, nodeSpec, distributionKey, 1); dispatch.setHostResource(hostResource); - dispatch.initService(); + dispatch.initService(deployLogger); return dispatch; } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java index dbc07c85dd5..985b6e1e4b0 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java @@ -1,6 +1,7 @@ // 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.search; +import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.log.LogLevel; import com.yahoo.vespa.config.search.AttributesConfig; @@ -74,7 +75,7 @@ public class IndexedSearchCluster extends SearchCluster } } - public UnionConfiguration(AbstractConfigProducer parent, List docDbs) { + private UnionConfiguration(AbstractConfigProducer parent, List docDbs) { super(parent, "union"); this.docDbs = docDbs; } @@ -92,7 +93,6 @@ public class IndexedSearchCluster extends SearchCluster // This is the document selector string as derived from the subscription tag. private String routingSelector = null; - private DocumentSelectionConverter selectionConverter = null; private List documentDbs = new LinkedList<>(); private final UnionConfiguration unionCfg; private int maxNodesDownPerFixedRow = 0; @@ -177,11 +177,11 @@ public class IndexedSearchCluster extends SearchCluster return this; } - public Dispatch addTld(AbstractConfigProducer tldParent, HostResource hostResource) { + public Dispatch addTld(DeployLogger deployLogger, AbstractConfigProducer tldParent, HostResource hostResource) { int index = rootDispatch.getDispatchers().size(); Dispatch tld = Dispatch.createTld(rootDispatch, tldParent, index); tld.setHostResource(hostResource); - tld.initService(); + tld.initService(deployLogger); rootDispatch.addDispatcher(tld); return tld; } @@ -193,7 +193,7 @@ public class IndexedSearchCluster extends SearchCluster * @param tldParent the indexed search cluster the tlds to add should be connected to * @param containerCluster the container cluster that should use the tlds created for searching the indexed search cluster above */ - public void addTldsWithSameIdsAsContainers(AbstractConfigProducer tldParent, ContainerCluster containerCluster) { + public void addTldsWithSameIdsAsContainers(DeployLogger deployLogger, AbstractConfigProducer tldParent, ContainerCluster containerCluster) { for (Container container : containerCluster.getContainers()) { String containerSubId = container.getSubId(); if ( ! containerSubId.contains(".")) { @@ -204,14 +204,14 @@ public class IndexedSearchCluster extends SearchCluster log.log(LogLevel.DEBUG, "Adding tld with index " + containerIndex + " for content cluster " + this.getClusterName() + ", container cluster " + containerClusterName + " (container id " + containerSubId + ") on host " + container.getHostResource().getHostname()); - rootDispatch.addDispatcher(createTld(tldParent, container.getHostResource(), containerClusterName, containerIndex)); + rootDispatch.addDispatcher(createTld(deployLogger, tldParent, container.getHostResource(), containerClusterName, containerIndex)); } } - public Dispatch createTld(AbstractConfigProducer tldParent, HostResource hostResource, String containerClusterName, int containerIndex) { + private Dispatch createTld(DeployLogger deployLogger, AbstractConfigProducer tldParent, HostResource hostResource, String containerClusterName, int containerIndex) { Dispatch tld = Dispatch.createTldWithContainerIdInName(rootDispatch, tldParent, containerClusterName, containerIndex); tld.setHostResource(hostResource); - tld.initService(); + tld.initService(deployLogger); return tld; } @@ -241,7 +241,7 @@ public class IndexedSearchCluster extends SearchCluster } } - protected void fillDocumentDBConfig(DocumentDatabase sdoc, ProtonConfig.Documentdb.Builder ddbB) { + private void fillDocumentDBConfig(DocumentDatabase sdoc, ProtonConfig.Documentdb.Builder ddbB) { ddbB.inputdoctypename(sdoc.getInputDocType()) .configid(sdoc.getConfigId()) .visibilitydelay(getVisibilityDelay()); @@ -264,7 +264,7 @@ public class IndexedSearchCluster extends SearchCluster this.routingSelector=sel; if (this.routingSelector != null) { try { - this.selectionConverter = new DocumentSelectionConverter(this.routingSelector); + new DocumentSelectionConverter(this.routingSelector); } catch (Exception e) { throw new IllegalArgumentException("Invalid routing selector: " + e.getMessage()); } @@ -278,9 +278,11 @@ public class IndexedSearchCluster extends SearchCluster if ((routingSelector == null) && !getDocumentNames().isEmpty()) { Iterator it = getDocumentNames().iterator(); routingSelector = it.next(); + StringBuilder sb = new StringBuilder(routingSelector); while (it.hasNext()) { - routingSelector += " or " + it.next(); + sb.append(" or ").append(it.next()); } + routingSelector = sb.toString(); } } @Override @@ -308,7 +310,7 @@ public class IndexedSearchCluster extends SearchCluster this.searchCoverage = searchCoverage; } - public SearchCoverage getSearchCoverage() { + SearchCoverage getSearchCoverage() { return searchCoverage; } @@ -336,9 +338,9 @@ public class IndexedSearchCluster extends SearchCluster } @Override - protected void exportSdFiles(File toDir) throws IOException { } + protected void exportSdFiles(File toDir) { } - public int getMinNodesPerColumn() { return 0; } + int getMinNodesPerColumn() { return 0; } boolean useFixedRowInDispatch() { for (SearchNode node : getSearchNodes()) { @@ -356,7 +358,7 @@ public class IndexedSearchCluster extends SearchCluster public void setMaxNodesDownPerFixedRow(int value) { maxNodesDownPerFixedRow = value; } - public int getSearchableCopies() { + int getSearchableCopies() { return searchableCopies; } @@ -381,12 +383,12 @@ public class IndexedSearchCluster extends SearchCluster return dispatchSpec != null && dispatchSpec.getGroups() != null && !dispatchSpec.getGroups().isEmpty(); } - public void setupDispatchGroups() { + public void setupDispatchGroups(DeployLogger deployLogger) { if (!useMultilevelDispatchSetup()) { return; } rootDispatch.clearSearchers(); - new DispatchGroupBuilder(dispatchParent, rootDispatch, this).build(dispatchSpec.getGroups(), getSearchNodes()); + new DispatchGroupBuilder(dispatchParent, rootDispatch, this).build(deployLogger, dispatchSpec.getGroups(), getSearchNodes()); } @Override diff --git a/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java b/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java index 57bec93e6f4..17d56011ce3 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/HostResourceTest.java @@ -28,20 +28,23 @@ public class HostResourceTest { @Test public void next_available_baseport_is_BASE_PORT_when_no_ports_have_been_reserved() { - HostResource host = mockHostResource(); + MockRoot root = new MockRoot(); + HostResource host = mockHostResource(root); assertThat(host.nextAvailableBaseport(1), is(HostResource.BASE_PORT)); } @Test public void next_available_baseport_is_BASE_PORT_plus_one_when_one_port_has_been_reserved() { - HostResource host = mockHostResource(); + MockRoot root = new MockRoot(); + HostResource host = mockHostResource(root); host.reservePort(new TestService(1), HostResource.BASE_PORT); assertThat(host.nextAvailableBaseport(1), is(HostResource.BASE_PORT + 1)); } @Test public void no_available_baseport_when_service_requires_more_consecutive_ports_than_available() { - HostResource host = mockHostResource(); + MockRoot root = new MockRoot(); + HostResource host = mockHostResource(root); for (int p = HostResource.BASE_PORT; p < HostResource.BASE_PORT + HostResource.MAX_PORTS; p += 2) { host.reservePort(new TestService(1), p); @@ -58,8 +61,10 @@ public class HostResourceTest { @Test public void require_exception_when_no_matching_hostalias() { TestService service = new TestService(1); + MockRoot root = new MockRoot(); + try { - service.initService(); + service.initService(root.deployLogger()); } catch (RuntimeException e) { assertThat(e.getMessage(), endsWith("No host found for service 'hostresourcetest$testservice0'. " + "The hostalias is probably missing from hosts.xml.")); @@ -68,28 +73,32 @@ public class HostResourceTest { @Test public void port_above_vespas_port_range_can_be_reserved() { - HostResource host = mockHostResource(); - host.allocateService(new TestService(1), HostResource.BASE_PORT + HostResource.MAX_PORTS + 1); + MockRoot root = new MockRoot(); + HostResource host = mockHostResource(root); + + host.allocateService(root.deployLogger(), new TestService(1), HostResource.BASE_PORT + HostResource.MAX_PORTS + 1); } @Test(expected = RuntimeException.class) public void allocating_same_port_throws_exception() { - HostResource host = mockHostResource(); + MockRoot root = new MockRoot(); + HostResource host = mockHostResource(root); TestService service1 = new TestService(1); TestService service2 = new TestService(1); - host.allocateService(service1, HostResource.BASE_PORT); - host.allocateService(service2, HostResource.BASE_PORT); + host.allocateService(root.deployLogger(), service1, HostResource.BASE_PORT); + host.allocateService(root.deployLogger(), service2, HostResource.BASE_PORT); } @Test(expected = RuntimeException.class) public void allocating_overlapping_ports_throws_exception() { - HostResource host = mockHostResource(); + MockRoot root = new MockRoot(); + HostResource host = mockHostResource(root); TestService service2 = new TestService(2); TestService service1 = new TestService(1); - host.allocateService(service2, HostResource.BASE_PORT); - host.allocateService(service1, HostResource.BASE_PORT + 1); + host.allocateService(root.deployLogger(), service2, HostResource.BASE_PORT); + host.allocateService(root.deployLogger(), service1, HostResource.BASE_PORT + 1); } @Test @@ -147,14 +156,12 @@ public class HostResourceTest { return ClusterSpec.from(type, ClusterSpec.Id.from(id), ClusterSpec.Group.from(0), Version.fromString("6.42"), false); } - private HostResource mockHostResource() { - MockRoot mockRoot = new MockRoot(); - return new HostResource(new Host(mockRoot)); + private HostResource mockHostResource(MockRoot root) { + return new HostResource(new Host(root)); } private static HostResource hostResourceWithMemberships(ClusterMembership... memberships) { - MockRoot root = new MockRoot(); - HostResource host = new HostResource(Host.createHost(root.deployLogger(),null, "hostname")); + HostResource host = new HostResource(Host.createHost(null, "hostname")); Arrays.asList(memberships).forEach(host::addClusterMembership); return host; } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java index 1918b8afb8f..6067494dec9 100755 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java @@ -4,6 +4,7 @@ package com.yahoo.vespa.model.container; import com.yahoo.cloud.config.ClusterInfoConfig; import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.cloud.config.RoutingProviderConfig; +import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.deploy.DeployProperties; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.test.MockRoot; @@ -87,30 +88,32 @@ public class ContainerClusterTest { assertEquals("cd", config.system()); } - private ContainerCluster createContainerCluster(boolean isHosted, boolean isCombinedCluster) { - return createContainerCluster(isHosted, isCombinedCluster, Optional.empty(), Optional.empty()); + private ContainerCluster createContainerCluster(MockRoot root, boolean isCombinedCluster) { + return createContainerCluster(root, isCombinedCluster, Optional.empty(), Optional.empty()); } - private ContainerCluster createClusterControllerCluster() { - return createContainerCluster(false, false, new ClusterControllerClusterVerifier()); + private ContainerCluster createClusterControllerCluster(MockRoot root) { + return createContainerCluster(root, false, new ClusterControllerClusterVerifier()); } - private ContainerCluster createContainerCluster(boolean isHosted, boolean isCombinedCluster, ContainerClusterVerifier extraComponents) { - return createContainerCluster(isHosted, isCombinedCluster, Optional.empty(), Optional.of(extraComponents)); + private ContainerCluster createContainerCluster(MockRoot root, boolean isCombinedCluster, ContainerClusterVerifier extraComponents) { + return createContainerCluster(root, isCombinedCluster, Optional.empty(), Optional.of(extraComponents)); } - private ContainerCluster createContainerCluster(boolean isHosted, boolean isCombinedCluster, + private ContainerCluster createContainerCluster(MockRoot root, boolean isCombinedCluster, Optional memoryPercentage) { - return createContainerCluster(isHosted, isCombinedCluster, memoryPercentage, Optional.empty()); + return createContainerCluster(root, isCombinedCluster, memoryPercentage, Optional.empty()); } - private ContainerCluster createContainerCluster(boolean isHosted, boolean isCombinedCluster, - Optional memoryPercentage, Optional extraComponents) { + private MockRoot createRoot(boolean isHosted) { DeployState state = new DeployState.Builder().properties(new DeployProperties.Builder().hostedVespa(isHosted).build()).build(); - MockRoot root = new MockRoot("foo", state); + return new MockRoot("foo", state); + } + private ContainerCluster createContainerCluster(MockRoot root, boolean isCombinedCluster, + Optional memoryPercentage, Optional extraComponents) { ContainerCluster cluster = extraComponents.isPresent() - ? new ContainerCluster(root, "container0", "container1", extraComponents.get(), state) - : new ContainerCluster(root, "container0", "container1", state); + ? new ContainerCluster(root, "container0", "container1", extraComponents.get(), root.getDeployState()) + : new ContainerCluster(root, "container0", "container1", root.getDeployState()); if (isCombinedCluster) cluster.setHostClusterId("test-content-cluster"); cluster.setMemoryPercentage(memoryPercentage); @@ -120,7 +123,7 @@ public class ContainerClusterTest { private void verifyHeapSizeAsPercentageOfPhysicalMemory(boolean isHosted, boolean isCombinedCluster, Optional explicitMemoryPercentage, int expectedMemoryPercentage) { - ContainerCluster cluster = createContainerCluster(isHosted, isCombinedCluster, explicitMemoryPercentage); + ContainerCluster cluster = createContainerCluster(createRoot(isHosted), isCombinedCluster, explicitMemoryPercentage); QrStartConfig.Builder qsB = new QrStartConfig.Builder(); cluster.getSearch().getConfig(qsB); QrStartConfig qsC= new QrStartConfig(qsB); @@ -153,11 +156,12 @@ public class ContainerClusterTest { } } private void verifyJvmArgs(boolean isHosted, boolean hasDocProc) { - ContainerCluster cluster = createContainerCluster(isHosted, false); + MockRoot root = createRoot(isHosted); + ContainerCluster cluster = createContainerCluster(root, false); if (hasDocProc) { cluster.setDocproc(new ContainerDocproc(cluster, null)); } - addContainer(cluster, "c1", "host-c1"); + addContainer(root.deployLogger(), cluster, "c1", "host-c1"); assertEquals(1, cluster.getContainers().size()); Container container = cluster.getContainers().get(0); verifyJvmArgs(isHosted, hasDocProc, "", container.getJvmArgs()); @@ -173,8 +177,9 @@ public class ContainerClusterTest { @Test public void testContainerClusterMaxThreads() { - ContainerCluster cluster = createContainerCluster(false, false); - addContainer(cluster, "c1","host-c1"); + MockRoot root = createRoot(false); + ContainerCluster cluster = createContainerCluster(root, false); + addContainer(root.deployLogger(), cluster, "c1","host-c1"); ThreadpoolConfig.Builder tpBuilder = new ThreadpoolConfig.Builder(); cluster.getConfig(tpBuilder); @@ -184,8 +189,9 @@ public class ContainerClusterTest { @Test public void testClusterControllerResourceUsage() { - ContainerCluster cluster = createClusterControllerCluster(); - addClusterController(cluster, "host-c1"); + MockRoot root = createRoot(false); + ContainerCluster cluster = createClusterControllerCluster(root); + addClusterController(root.deployLogger(), cluster, "host-c1"); assertEquals(1, cluster.getContainers().size()); ClusterControllerContainer container = (ClusterControllerContainer) cluster.getContainers().get(0); QrStartConfig.Builder qrBuilder = new QrStartConfig.Builder(); @@ -201,10 +207,11 @@ public class ContainerClusterTest { @Test public void testThatYouCanNotAddNonClusterControllerContainerToClusterControllerCluster() { - ContainerCluster cluster = createClusterControllerCluster(); - addClusterController(cluster, "host-c1"); + MockRoot root = createRoot(false); + ContainerCluster cluster = createClusterControllerCluster(root); + addClusterController(root.deployLogger(), cluster, "host-c1"); try { - addContainer(cluster, "c2", "host-c2"); + addContainer(root.deployLogger(), cluster, "c2", "host-c2"); assertTrue(false); } catch (IllegalArgumentException e) { assertEquals("Cluster container1 does not accept container qrserver on host 'host-c2'", e.getMessage()); @@ -213,15 +220,17 @@ public class ContainerClusterTest { @Test public void testThatLinguisticsIsExcludedForClusterControllerCluster() { - ContainerCluster cluster = createClusterControllerCluster(); - addClusterController(cluster, "host-c1"); + MockRoot root = createRoot(false); + ContainerCluster cluster = createClusterControllerCluster(root); + addClusterController(root.deployLogger(), cluster, "host-c1"); assertFalse(contains("com.yahoo.language.provider.SimpleLinguisticsProvider", cluster.getAllComponents())); } @Test public void testThatLinguisticsIsIncludedForNonClusterControllerClusters() { - ContainerCluster cluster = createContainerCluster(false, false); - addClusterController(cluster, "host-c1"); + MockRoot root = createRoot(false); + ContainerCluster cluster = createContainerCluster(root, false); + addClusterController(root.deployLogger(), cluster, "host-c1"); assertTrue(contains("com.yahoo.language.provider.SimpleLinguisticsProvider", cluster.getAllComponents())); } @@ -242,8 +251,9 @@ public class ContainerClusterTest { @Test public void requireThatWeCanhandleNull() { - ContainerCluster cluster = createContainerCluster(false, false); - addContainer(cluster, "c1", "host-c1"); + MockRoot root = createRoot(false); + ContainerCluster cluster = createContainerCluster(root, false); + addContainer(root.deployLogger(), cluster, "c1", "host-c1"); Container container = cluster.getContainers().get(0); container.setJvmArgs(""); String empty = container.getJvmArgs(); @@ -264,24 +274,25 @@ public class ContainerClusterTest { } - private static void addContainer(ContainerCluster cluster, String name, String hostName) { + private static void addContainer(DeployLogger deployLogger, ContainerCluster cluster, String name, String hostName) { Container container = new Container(cluster, name, 0, cluster.isHostedVespa()); container.setHostResource(new HostResource(new Host(null, hostName))); - container.initService(); + container.initService(deployLogger); cluster.addContainer(container); } - private static void addClusterController(ContainerCluster cluster, String hostName) { + private static void addClusterController(DeployLogger deployLogger, ContainerCluster cluster, String hostName) { Container container = new ClusterControllerContainer(cluster, 1, false, cluster.isHostedVespa()); container.setHostResource(new HostResource(new Host(null, hostName))); - container.initService(); + container.initService(deployLogger); cluster.addContainer(container); } private static ContainerCluster newContainerCluster() { - ContainerCluster cluster = new ContainerCluster(null, "subId", "name", DeployState.createTestState()); - addContainer(cluster, "c1", "host-c1"); - addContainer(cluster, "c2", "host-c2"); + DeployState deployState = DeployState.createTestState(); + ContainerCluster cluster = new ContainerCluster(null, "subId", "name", deployState); + addContainer(deployState.getDeployLogger(), cluster, "c1", "host-c1"); + addContainer(deployState.getDeployLogger(), cluster, "c2", "host-c2"); return cluster; } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/IndexedHierarchicDistributionTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/IndexedHierarchicDistributionTest.java index fd25ae2ae48..4749ef314b4 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/content/IndexedHierarchicDistributionTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/content/IndexedHierarchicDistributionTest.java @@ -36,7 +36,8 @@ import static org.junit.Assert.assertTrue; public class IndexedHierarchicDistributionTest { private ContentCluster addDispatcher(ContentCluster c) { - c.getSearch().getIndexed().addTld(new SimpleConfigProducer(new MockRoot(""), ""), new HostResource(new Host(new MockRoot(""), "mockhost"))); + MockRoot root = new MockRoot(""); + c.getSearch().getIndexed().addTld(root.deployLogger(), new SimpleConfigProducer(root, ""), new HostResource(new Host(root, "mockhost"))); return c; } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/search/MultilevelDispatchTest.java b/config-model/src/test/java/com/yahoo/vespa/model/search/MultilevelDispatchTest.java index 84f414a3bae..7ccf5937490 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/search/MultilevelDispatchTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/search/MultilevelDispatchTest.java @@ -92,8 +92,8 @@ public class MultilevelDispatchTest { AbstractConfigProducer dispatchParent = new SimpleConfigProducer<>(root, "tlds"); HostResource hostResource = new HostResource(new Host(root, "mockhost")); IndexedSearchCluster index = cluster.getSearch().getIndexed(); - index.addTld(dispatchParent, hostResource); - index.setupDispatchGroups(); + index.addTld(root.deployLogger(), dispatchParent, hostResource); + index.setupDispatchGroups(root.deployLogger()); root.freezeModelTopology(); cluster.validate(); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java b/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java index 715676f712c..3b2eb97c0cc 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java @@ -39,11 +39,11 @@ public class SearchNodeTest { TransactionLogServer tls = new TransactionLogServer(root, "mycluster"); tls.setHostResource(new HostResource(host)); tls.setBasePort(100); - tls.initService(); + tls.initService(root.deployLogger()); node.setTls(tls); node.setHostResource(new HostResource(host)); node.setBasePort(200); - node.initService(); + node.initService(root.deployLogger()); root.freezeModelTopology(); } @@ -65,7 +65,7 @@ public class SearchNodeTest { MockRoot root = new MockRoot(""); SearchNode node = createSearchNode(root, "mynode", 3, new NodeSpec(7, 5), false, root.getDeployState().isHosted()); node.setHostResource(new HostResource(new Host(node, "mynbode"))); - node.initService(); + node.initService(root.deployLogger()); assertFalse(node.getPreShutdownCommand().isPresent()); } @@ -74,7 +74,7 @@ public class SearchNodeTest { MockRoot root = new MockRoot(""); SearchNode node = createSearchNode(root, "mynode2", 4, new NodeSpec(7, 5), true, root.getDeployState().isHosted()); node.setHostResource(new HostResource(new Host(node, "mynbode2"))); - node.initService(); + node.initService(root.deployLogger()); assertTrue(node.getPreShutdownCommand().isPresent()); Assert.assertThat(node.getPreShutdownCommand().get(), CoreMatchers.containsString("vespa-proton-cmd " + node.getRpcPort() + " prepareRestart")); diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/ModelAmendingTestCase.java b/config-model/src/test/java/com/yahoo/vespa/model/test/ModelAmendingTestCase.java index ca1f0454a94..57b0606457d 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/test/ModelAmendingTestCase.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/test/ModelAmendingTestCase.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.model.test; import com.yahoo.component.ComponentId; +import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.ConfigModel; import com.yahoo.config.model.ConfigModelContext; import com.yahoo.config.model.ConfigModelRegistry; @@ -104,13 +105,13 @@ public class ModelAmendingTestCase { @Override public void doBuild(AdminModelAmender model, Element spec, ConfigModelContext modelContext) { for (AdminModel adminModel : model.adminModels) - amend(adminModel); + amend(modelContext.getDeployLogger(), adminModel); } - private void amend(AdminModel adminModel) { + private void amend(DeployLogger deployLogger, AdminModel adminModel) { for (HostResource host : adminModel.getAdmin().getHostSystem().getHosts()) { if ( ! host.getHost().getChildrenByTypeRecursive(AmendedService.class).isEmpty()) continue; // already amended - adminModel.getAdmin().addAndInitializeService(host, new AmendedService(host.getHost())); + adminModel.getAdmin().addAndInitializeService(deployLogger, host, new AmendedService(host.getHost())); } } -- cgit v1.2.3