summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@gmail.com>2021-04-28 18:28:10 +0200
committerJon Bratseth <bratseth@gmail.com>2021-04-28 18:28:10 +0200
commit942a0c395008f2a765eff19d5dea0139a9906576 (patch)
treea6a45b8ed363179f98882c74b3381c53369e5e60 /config-model
parent1121b538077fd8bd7957630c84565f2854b999f7 (diff)
Add Slobroks to admin cluster controllers
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/vespa/model/admin/Admin.java18
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java3
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java11
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java9
-rw-r--r--config-model/src/test/java/com/yahoo/config/model/provision/ModelProvisioningTest.java24
7 files changed, 54 insertions, 15 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 ec1038c67db..59aa7e48639 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
@@ -81,7 +81,7 @@ public class AdminModel extends ConfigModel {
new BuilderV4().doBuild(model, adminElement, modelContext);
return;
}
- AbstractConfigProducer parent = modelContext.getParentProducer();
+ AbstractConfigProducer<?> parent = modelContext.getParentProducer();
ModelContext.Properties properties = modelContext.getDeployState().getProperties();
DomAdminV2Builder domBuilder = new DomAdminV2Builder(modelContext.getApplicationType(),
modelContext.getDeployState().getFileRegistry(),
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 efae00096df..2b850d8f3eb 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
@@ -15,6 +15,7 @@ import com.yahoo.vespa.model.ConfigProxy;
import com.yahoo.vespa.model.ConfigSentinel;
import com.yahoo.vespa.model.HostResource;
import com.yahoo.vespa.model.Logd;
+import com.yahoo.vespa.model.admin.clustercontroller.ClusterControllerContainer;
import com.yahoo.vespa.model.admin.clustercontroller.ClusterControllerContainerCluster;
import com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainer;
import com.yahoo.vespa.model.admin.metricsproxy.MetricsProxyContainerCluster;
@@ -27,6 +28,7 @@ import com.yahoo.vespa.model.filedistribution.FileDistributor;
import java.io.Serializable;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
@@ -142,8 +144,22 @@ public class Admin extends AbstractConfigProducer<Admin> implements Serializable
public ClusterControllerContainerCluster getClusterControllers() { return clusterControllers; }
- public void setClusterControllers(ClusterControllerContainerCluster clusterControllers) {
+ public void setClusterControllers(ClusterControllerContainerCluster clusterControllers, DeployLogger deployLogger) {
this.clusterControllers = clusterControllers;
+ if (isHostedVespa)
+ addSlobroks(createSlobroksOn(clusterControllers, deployLogger));
+ }
+
+ private List<Slobrok> createSlobroksOn(ClusterControllerContainerCluster clusterControllers, DeployLogger deployLogger) {
+ List<Slobrok> slobroks = new ArrayList<>();
+ int index = this.slobroks.size();
+ for (ClusterControllerContainer clusterController : clusterControllers.getContainers()) {
+ Slobrok slobrok = new Slobrok(this, index++);
+ slobrok.setHostResource(clusterController.getHostResource());
+ slobroks.add(slobrok);
+ slobrok.initService(deployLogger);
+ }
+ return slobroks;
}
public Optional<LogserverContainerCluster> getLogServerContainerCluster() { return logServerContainerCluster; }
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java
index 43f02f8b6d4..eed886b707f 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/Slobrok.java
@@ -22,7 +22,7 @@ public class Slobrok extends AbstractService implements StateserverConfig.Produc
}
/**
- * @param parent The parent ConfigProducer.
+ * @param parent the parent ConfigProducer.
* @param index unique index for all slobroks
*/
public Slobrok(AbstractConfigProducer parent, int index) {
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 d6e419cf63f..a1329b2a5b4 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
@@ -46,7 +46,8 @@ public class DomAdminV2Builder extends DomAdminBuilderBase {
admin.addConfigservers(configservers);
admin.addSlobroks(getSlobroks(deployState, admin, XML.getChild(adminE, "slobroks")));
if ( ! admin.multitenant())
- admin.setClusterControllers(addConfiguredClusterControllers(deployState, admin, adminE));
+ admin.setClusterControllers(addConfiguredClusterControllers(deployState, admin, adminE),
+ deployState.getDeployLogger());
ModelElement adminElement = new ModelElement(adminE);
addLogForwarders(adminElement.child("logforwarding"), admin);
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 f7b838de911..a0673824907 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
@@ -13,6 +13,7 @@ import com.yahoo.vespa.model.admin.Logserver;
import com.yahoo.vespa.model.admin.LogserverContainer;
import com.yahoo.vespa.model.admin.LogserverContainerCluster;
import com.yahoo.vespa.model.admin.Slobrok;
+import com.yahoo.vespa.model.admin.clustercontroller.ClusterControllerContainer;
import com.yahoo.vespa.model.container.Container;
import com.yahoo.vespa.model.container.ContainerModel;
import org.w3c.dom.Element;
@@ -62,10 +63,14 @@ public class DomAdminV4Builder extends DomAdminBuilderBase {
private void assignSlobroks(DeployLogger deployLogger, NodesSpecification nodesSpecification, Admin admin) {
if (nodesSpecification.isDedicated()) {
- createSlobroks(deployLogger, admin, allocateHosts(admin.hostSystem(), "slobroks", nodesSpecification));
+ createSlobroks(deployLogger,
+ admin,
+ allocateHosts(admin.hostSystem(), "slobroks", nodesSpecification));
}
- else {
- createSlobroks(deployLogger, admin, pickContainerHostsForSlobrok(nodesSpecification.minResources().nodes(), 2));
+ else { // TODO: Remove
+ createSlobroks(deployLogger,
+ admin,
+ pickContainerHostsForSlobrok(nodesSpecification.minResources().nodes(), 2));
}
}
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 d9bd413f053..f6a45842bd9 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
@@ -302,7 +302,8 @@ public class ContentCluster extends AbstractConfigProducer implements
host,
"cluster-controllers",
true,
- deployState));
+ deployState),
+ deployState.getDeployLogger());
}
clusterControllers = admin.getClusterControllers();
}
@@ -318,7 +319,8 @@ public class ContentCluster extends AbstractConfigProducer implements
hosts,
"cluster-controllers",
false,
- deployState));
+ deployState),
+ deployState.getDeployLogger());
}
clusterControllers = admin.getClusterControllers();
}
@@ -351,7 +353,8 @@ public class ContentCluster extends AbstractConfigProducer implements
hosts,
"cluster-controllers",
true,
- context.getDeployState()));
+ context.getDeployState()),
+ deployState.getDeployLogger());
}
return admin.getClusterControllers();
}
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 86668fe3098..13c0b1e8256 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
@@ -39,6 +39,7 @@ import org.junit.Ignore;
import org.junit.Test;
import java.io.StringReader;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -491,9 +492,12 @@ public class ModelProvisioningTest {
// Check admin clusters
Admin admin = model.getAdmin();
+ Set<HostResource> clusterControllerHosts = admin.getClusterControllers().getContainers()
+ .stream().map(cc -> cc.getHostResource()).collect(Collectors.toSet());
Set<HostResource> slobrokHosts = admin.getSlobroks().stream().map(Slobrok::getHost).collect(Collectors.toSet());
- assertEquals(3, slobrokHosts.size());
- assertTrue("Slobroks are assigned from container nodes", containerHosts.containsAll(slobrokHosts));
+ assertEquals(6, slobrokHosts.size());
+ assertTrue("Slobroks are assigned from container and cluster controller nodes",
+ union(containerHosts, clusterControllerHosts).containsAll(slobrokHosts));
assertTrue("Logserver is assigned from container nodes", containerHosts.contains(admin.getLogserver().getHost()));
assertEquals("No in-cluster config servers in a hosted environment", 0, admin.getConfigservers().size());
assertEquals("Dedicated admin cluster controllers when hosted", 3, admin.getClusterControllers().getContainers().size());
@@ -596,9 +600,12 @@ public class ModelProvisioningTest {
// Check admin clusters
Admin admin = model.getAdmin();
+ Set<HostResource> clusterControllerHosts = admin.getClusterControllers().getContainers()
+ .stream().map(cc -> cc.getHostResource()).collect(Collectors.toSet());
Set<HostResource> slobrokHosts = admin.getSlobroks().stream().map(Slobrok::getHost).collect(Collectors.toSet());
- assertEquals(3, slobrokHosts.size());
- assertTrue("Slobroks are assigned from container nodes", containerHosts.containsAll(slobrokHosts));
+ assertEquals(6, slobrokHosts.size());
+ assertTrue("Slobroks are assigned from container and cluster controller nodes",
+ union(containerHosts, clusterControllerHosts).containsAll(slobrokHosts));
assertTrue("Logserver is assigned from container nodes", containerHosts.contains(admin.getLogserver().getHost()));
assertEquals("No in-cluster config servers in a hosted environment", 0, admin.getConfigservers().size());
assertEquals(3, admin.getClusterControllers().getContainers().size());
@@ -1503,7 +1510,7 @@ public class ModelProvisioningTest {
tester.addHosts(6);
VespaModel model = tester.createModel(services, true);
assertEquals(6, model.getRoot().hostSystem().getHosts().size());
- assertEquals(2, model.getAdmin().getSlobroks().size());
+ assertEquals(5, model.getAdmin().getSlobroks().size());
assertEquals(2, model.getContainerClusters().get("foo").getContainers().size());
assertEquals(1, model.getContentClusters().get("bar").getRootGroup().countNodes());
}
@@ -2028,4 +2035,11 @@ public class ModelProvisioningTest {
assertProvisioned(nodeCount, id, null, type, model);
}
+ private Set<HostResource> union(Set<HostResource> a, Set<HostResource> b) {
+ Set<HostResource> union = new HashSet<>();
+ union.addAll(a);
+ union.addAll(b);
+ return union;
+ }
+
}