diff options
author | Harald Musum <musum@oath.com> | 2018-09-17 09:58:17 +0200 |
---|---|---|
committer | olaaun <ola.aunroe@gmail.com> | 2018-09-17 09:58:17 +0200 |
commit | ad5d584fd2fd1e10877d1914129385fc29f3e86e (patch) | |
tree | d181e94b06485e42a37a37bb0bab10b6053c9b8c /config-model | |
parent | 75117bc46335bdd458b2468e28b0c2af9ea4a66b (diff) |
Call prepare() on logserver container cluster (#6970)
Diffstat (limited to 'config-model')
6 files changed, 97 insertions, 7 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/admin/AdminModel.java b/config-model/src/main/java/com/yahoo/config/model/admin/AdminModel.java index d2ffe10677b..8fff69e11a6 100644 --- a/config-model/src/main/java/com/yahoo/config/model/admin/AdminModel.java +++ b/config-model/src/main/java/com/yahoo/config/model/admin/AdminModel.java @@ -13,6 +13,7 @@ import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.vespa.model.admin.Admin; import com.yahoo.vespa.model.builder.xml.dom.DomAdminV2Builder; import com.yahoo.vespa.model.builder.xml.dom.DomAdminV4Builder; +import com.yahoo.vespa.model.container.ContainerCluster; import com.yahoo.vespa.model.container.ContainerModel; import org.w3c.dom.Element; @@ -48,6 +49,7 @@ public class AdminModel extends ConfigModel { if (admin == null) return; if (admin.getClusterControllers() != null) admin.getClusterControllers().prepare(); + admin.getLogServerContainerCluster().ifPresent(ContainerCluster::prepare); } private void verifyClusterControllersOnlyDefinedForContent(ConfigModelRepo configModelRepo) { diff --git a/config-model/src/main/java/com/yahoo/config/model/test/MockApplicationPackage.java b/config-model/src/main/java/com/yahoo/config/model/test/MockApplicationPackage.java index 757dab4cbf3..4442b42bb88 100644 --- a/config-model/src/main/java/com/yahoo/config/model/test/MockApplicationPackage.java +++ b/config-model/src/main/java/com/yahoo/config/model/test/MockApplicationPackage.java @@ -63,7 +63,7 @@ public class MockApplicationPackage implements ApplicationPackage { this.failOnValidateXml = failOnValidateXml; queryProfileRegistry = new QueryProfileXMLReader().read(asNamedReaderList(queryProfileType), asNamedReaderList(queryProfile)); - applicationMetaData = new ApplicationMetaData("user", "dir", 0L, false, "application", "checksum", 0L, 0L); + applicationMetaData = new ApplicationMetaData("user", "dir", 0L, false, "application", "checksum", 1L, 0L); } /** Returns the root of this application package relative to the current dir */ 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 3330910a797..16ef46353d9 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 @@ -28,6 +28,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Optional; /** * This is the admin pseudo-plugin of the Vespa model, responsible for @@ -62,6 +63,11 @@ public class Admin extends AbstractConfigProducer implements Serializable { */ private ContainerCluster clusterControllers; + /** + * Cluster for container that might be running on logserver hosts + */ + private Optional<ContainerCluster> logServerContainerCluster = Optional.empty(); + private ZooKeepersConfigProvider zooKeepersConfigProvider; private FileDistributionConfigProducer fileDistribution; private final boolean multitenant; @@ -136,6 +142,12 @@ public class Admin extends AbstractConfigProducer implements Serializable { this.clusterControllers = clusterControllers; } + public Optional<ContainerCluster> getLogServerContainerCluster() { return logServerContainerCluster; } + + public void setLogserverContainerCluster(ContainerCluster logServerContainerCluster) { + this.logServerContainerCluster = Optional.of(logServerContainerCluster); + } + public ZooKeepersConfigProvider getZooKeepersConfigProvider() { return zooKeepersConfigProvider; } 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 06450698a14..ea943f069cb 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 @@ -114,11 +114,12 @@ public class DomAdminV4Builder extends DomAdminBuilderBase { logserverClusterModel.setCluster(logServerCluster); - Container container = new Container(logServerCluster, "logserver-container", 0); + Container container = new Container(logServerCluster, "" + 0, 0); container.setHostResource(hostResource); container.initService(); logServerCluster.addContainer(container); admin.addAndInitializeService(hostResource, container); + admin.setLogserverContainerCluster(logServerCluster); } private void addLogHandler(ContainerCluster cluster) { diff --git a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java index 85c75309d23..121863f454f 100644 --- a/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java +++ b/config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java @@ -6,8 +6,13 @@ import com.yahoo.config.model.api.HostInfo; import com.yahoo.config.model.deploy.DeployProperties; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.provision.ClusterMembership; +import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.Flavor; +import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.SystemName; +import com.yahoo.config.provision.Zone; import com.yahoo.config.provisioning.FlavorsConfig; +import com.yahoo.container.core.ApplicationMetadataConfig; import com.yahoo.search.config.QrStartConfig; import com.yahoo.searchdefinition.parser.ParseException; import com.yahoo.vespa.config.search.core.ProtonConfig; @@ -16,6 +21,7 @@ import com.yahoo.vespa.model.HostResource; import com.yahoo.vespa.model.HostSystem; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.admin.Admin; +import com.yahoo.vespa.model.admin.Logserver; import com.yahoo.vespa.model.admin.Slobrok; import com.yahoo.vespa.model.container.Container; import com.yahoo.vespa.model.container.ContainerCluster; @@ -927,6 +933,36 @@ public class ModelProvisioningTest { } @Test + public void testLogserverContainerWhenDedicatedLogserver() { + String services = + "<?xml version='1.0' encoding='utf-8' ?>\n" + + "<services>" + + " <admin version='4.0'>" + + " <logservers>" + + " <nodes count='1' dedicated='true'/>" + + " </logservers>" + + " </admin>" + + " <container version='1.0' id='foo'>" + + " <nodes count='1'/>" + + " </container>" + + "</services>"; + testContainerOnLogserverHost(services); + } + + @Test + @Ignore // Ignore until we create container on logserver implicitly + public void testImplicitLogserverContainer() { + String services = + "<?xml version='1.0' encoding='utf-8' ?>\n" + + "<services>" + + " <container version='1.0' id='foo'>" + + " <nodes count='1'/>" + + " </container>" + + "</services>"; + testContainerOnLogserverHost(services); + } + + @Test public void testUsingNodesAndGroupCountAttributesAndGettingTooFewNodes() { String services = "<?xml version='1.0' encoding='utf-8' ?>" + @@ -1712,4 +1748,29 @@ public class ModelProvisioningTest { return new ProtonConfig(builder); } + // Tests that a container is allocated on logserver host and that + // it is able to get config + private void testContainerOnLogserverHost(String services) { + int numberOfHosts = 2; + VespaModelTester tester = new VespaModelTester(); + tester.addHosts(numberOfHosts); + Zone zone = new Zone(SystemName.cd, Environment.prod, RegionName.defaultName()); + + VespaModel model = tester.createModel(zone, services, true); + assertThat(model.getRoot().getHostSystem().getHosts().size(), is(numberOfHosts)); + + Admin admin = model.getAdmin(); + Logserver logserver = admin.getLogserver(); + HostResource hostResource = logserver.getHostResource(); + assertNotNull(hostResource.getService("logserver")); + assertNotNull(hostResource.getService("container")); + + // Test that the container gets config + String configId = admin.getLogserver().getHostResource().getService("container").getConfigId(); + ApplicationMetadataConfig.Builder builder = new ApplicationMetadataConfig.Builder(); + model.getConfig(builder, configId); + ApplicationMetadataConfig cfg = new ApplicationMetadataConfig(builder); + assertEquals(1, cfg.generation()); + } + } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java index 8cc5144c2a3..1023733a652 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java @@ -14,6 +14,7 @@ import com.yahoo.config.model.provision.InMemoryProvisioner; import com.yahoo.config.model.provision.SingleNodeProvisioner; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Flavor; +import com.yahoo.config.provision.Zone; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.test.utils.ApplicationPackageUtils; import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg; @@ -29,10 +30,10 @@ import java.util.Optional; * Helper class which sets up a system with multiple hosts. * Usage: * <code> - * VespaModelteser tester = new VespaModelTester(); + * VespaModelTester tester = new VespaModelTester(); * tester.addHosts(count, flavor); * ... add more nodes - * VesoaModel model = tester.createModel(servicesString); + * VespaModel model = tester.createModel(servicesString); * ... assert on model * </code> * @@ -93,12 +94,24 @@ public class VespaModelTester { /** Creates a model which uses 0 as start index and fails on out of capacity */ public VespaModel createModel(String services, String ... retiredHostNames) { - return createModel(services, true, retiredHostNames); + return createModel(Zone.defaultZone(), services, true, retiredHostNames); } + /** Creates a model which uses 0 as start index */ public VespaModel createModel(String services, boolean failOnOutOfCapacity, String ... retiredHostNames) { - return createModel(services, failOnOutOfCapacity, 0, retiredHostNames); + return createModel(Zone.defaultZone(), services, failOnOutOfCapacity, 0, retiredHostNames); + } + + /** Creates a model which uses 0 as start index */ + public VespaModel createModel(String services, boolean failOnOutOfCapacity, int startIndexForClusters, String ... retiredHostNames) { + return createModel(Zone.defaultZone(), services, failOnOutOfCapacity, startIndexForClusters, retiredHostNames); } + + /** Creates a model which uses 0 as start index */ + public VespaModel createModel(Zone zone, String services, boolean failOnOutOfCapacity, String ... retiredHostNames) { + return createModel(zone, services, failOnOutOfCapacity, 0, retiredHostNames); + } + /** * Creates a model using the hosts already added to this * @@ -107,7 +120,7 @@ public class VespaModelTester { * is available or if we should just silently receive a smaller allocation * @return the resulting model */ - public VespaModel createModel(String services, boolean failOnOutOfCapacity, int startIndexForClusters, String ... retiredHostNames) { + public VespaModel createModel(Zone zone, String services, boolean failOnOutOfCapacity, int startIndexForClusters, String ... retiredHostNames) { VespaModelCreatorWithMockPkg modelCreatorWithMockPkg = new VespaModelCreatorWithMockPkg(null, services, ApplicationPackageUtils.generateSearchDefinition("type1")); ApplicationPackage appPkg = modelCreatorWithMockPkg.appPkg; @@ -124,6 +137,7 @@ public class VespaModelTester { .applicationPackage(appPkg) .modelHostProvisioner(provisioner) .properties(properties) + .zone(zone) .build(); return modelCreatorWithMockPkg.create(false, deployState, configModelRegistry); } |