aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2021-02-23 20:31:27 +0100
committerJon Marius Venstad <venstad@gmail.com>2021-02-23 20:31:27 +0100
commitfb3f11c9d17e6039edc3d82f465e153865d30eb1 (patch)
tree9c42f8aac78e2906b06881ca180ddacc1100279e /config-model/src/main/java
parent8d30b5628589f5506c15b69dcea695eb8f6c044b (diff)
Compute whether cluster-controller ZK members are joining
Diffstat (limited to 'config-model/src/main/java')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerCluster.java19
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java13
3 files changed, 26 insertions, 8 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerCluster.java
index 495a70cdf14..feac7e5a92d 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/admin/clustercontroller/ClusterControllerCluster.java
@@ -4,13 +4,22 @@ package com.yahoo.vespa.model.admin.clustercontroller;
import com.google.common.base.Joiner;
import com.yahoo.cloud.config.ZookeeperServerConfig;
import com.yahoo.cloud.config.ZookeepersConfig;
+import com.yahoo.config.model.api.Model;
+import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.producer.AbstractConfigProducer;
+import com.yahoo.config.provision.AllocatedHosts;
+import com.yahoo.config.provision.HostSpec;
+import com.yahoo.net.HostName;
import com.yahoo.vespa.model.Service;
import com.yahoo.vespa.model.admin.Configserver;
import com.yahoo.vespa.model.container.Container;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import static java.util.stream.Collectors.toUnmodifiableSet;
/**
* Used if clustercontroller is run standalone (not as part of the config server ZooKeeper cluster)
@@ -24,9 +33,16 @@ public class ClusterControllerCluster extends AbstractConfigProducer<ClusterCont
private static final int ZK_CLIENT_PORT = 2181; // Must match the default in CuratorConfig
private ClusterControllerContainerCluster containerCluster = null;
+ private final Set<String> previousHosts;
- public ClusterControllerCluster(AbstractConfigProducer<?> parent, String subId) {
+ public ClusterControllerCluster(AbstractConfigProducer<?> parent, String subId, DeployState deployState) {
super(parent, subId);
+ this.previousHosts = deployState.getPreviousModel().stream()
+ .map(Model::allocatedHosts)
+ .map(AllocatedHosts::getHosts)
+ .flatMap(Collection::stream)
+ .map(HostSpec::hostname)
+ .collect(toUnmodifiableSet());
}
@Override
@@ -37,6 +53,7 @@ public class ClusterControllerCluster extends AbstractConfigProducer<ClusterCont
ZookeeperServerConfig.Server.Builder serverBuilder = new ZookeeperServerConfig.Server.Builder();
serverBuilder.hostname(container.getHostName());
serverBuilder.id(container.index());
+ serverBuilder.joining( ! previousHosts.isEmpty() && ! previousHosts.contains(container.getHostName()));
builder.server(serverBuilder);
}
}
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 e37f558c2ce..abd2711c631 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
@@ -88,7 +88,7 @@ public class DomAdminV2Builder extends DomAdminBuilderBase {
boolean standaloneZooKeeper = "true".equals(controllersElements.getAttribute(ATTRIBUTE_CLUSTER_CONTROLLER_STANDALONE_ZK)) || multitenant;
if (standaloneZooKeeper) {
- parent = new ClusterControllerCluster(parent, "standalone");
+ parent = new ClusterControllerCluster(parent, "standalone", deployState);
}
var cluster = new ClusterControllerContainerCluster(parent,
"cluster-controllers",
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 0fd7c55147f..b3b73378bc6 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
@@ -169,7 +169,7 @@ public class ContentCluster extends AbstractConfigProducer implements
if (context.getParentProducer().getRoot() == null) return c;
- addClusterControllers(context, c.rootGroup, contentElement, c.clusterId, c);
+ addClusterControllers(context, c.rootGroup, contentElement, c.clusterId, c, deployState);
return c;
}
@@ -286,7 +286,8 @@ public class ContentCluster extends AbstractConfigProducer implements
StorageGroup rootGroup,
ModelElement contentElement,
String contentClusterName,
- ContentCluster contentCluster) {
+ ContentCluster contentCluster,
+ DeployState deployState) {
if (admin == null) return; // only in tests
if (contentCluster.getPersistence() == null) return;
@@ -303,9 +304,9 @@ public class ContentCluster extends AbstractConfigProducer implements
else if (admin.multitenant()) {
String clusterName = contentClusterName + "-controllers";
if (context.properties().dedicatedClusterControllerCluster())
- clusterControllers = getDedicatedSharedControllers(contentElement, admin, context);
+ clusterControllers = getDedicatedSharedControllers(contentElement, admin, context, deployState);
else {
- clusterControllers = createClusterControllers(new ClusterControllerCluster(contentCluster, "standalone"),
+ clusterControllers = createClusterControllers(new ClusterControllerCluster(contentCluster, "standalone", deployState),
drawControllerHosts(3, rootGroup),
clusterName,
true,
@@ -351,7 +352,7 @@ public class ContentCluster extends AbstractConfigProducer implements
public static final NodeResources clusterControllerResources = new NodeResources(0.5, 2, 10, 0.3, NodeResources.DiskSpeed.any, NodeResources.StorageType.any);
private ClusterControllerContainerCluster getDedicatedSharedControllers(ModelElement contentElement, Admin admin,
- ConfigModelContext context) {
+ ConfigModelContext context, DeployState deployState) {
if (admin.getClusterControllers() == null) {
NodesSpecification spec = NodesSpecification.exclusiveAndRequiredFromSharedParents(3,
clusterControllerResources,
@@ -365,7 +366,7 @@ public class ContentCluster extends AbstractConfigProducer implements
true)
.keySet();
- admin.setClusterControllers(createClusterControllers(new ClusterControllerCluster(admin, "standalone"),
+ admin.setClusterControllers(createClusterControllers(new ClusterControllerCluster(admin, "standalone", deployState),
hosts,
"cluster-controllers",
true,