summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorHarald Musum <musum@oath.com>2018-09-17 09:58:17 +0200
committerolaaun <ola.aunroe@gmail.com>2018-09-17 09:58:17 +0200
commitad5d584fd2fd1e10877d1914129385fc29f3e86e (patch)
treed181e94b06485e42a37a37bb0bab10b6053c9b8c /config-model
parent75117bc46335bdd458b2468e28b0c2af9ea4a66b (diff)
Call prepare() on logserver container cluster (#6970)
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/admin/AdminModel.java2
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/test/MockApplicationPackage.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/Admin.java12
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java3
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java61
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java24
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);
}