summaryrefslogtreecommitdiffstats
path: root/application-model
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@verizonmedia.com>2021-03-23 11:56:24 +0100
committerHåkon Hallingstad <hakon@verizonmedia.com>2021-03-23 11:56:24 +0100
commit44f64849fdd2a0dc62e84eb701bae1216d0b2215 (patch)
treeeb8700943c722c4e5bfc62714580025e01f49a5d /application-model
parent81871d3f99f2155b0d81b347b61ac685a7bbc13e (diff)
Require 3 config server (and controller) hosts
We already require 3 config server (and controller) nodes, but it is not sufficient to protect the hosts from being left with only 1 healthy host: Say the config server host application contains 2 nodes. An upgrade of host-admin on one of those nodes is allowed, since only the host is suspended and none of the 2 nodes are down. This is fixed by handling config server hosts similar to config servers: assume 3 nodes.
Diffstat (limited to 'application-model')
-rw-r--r--application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceCluster.java14
1 files changed, 14 insertions, 0 deletions
diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceCluster.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceCluster.java
index 43f161cfec9..417b5792586 100644
--- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceCluster.java
+++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceCluster.java
@@ -81,12 +81,26 @@ public class ServiceCluster {
Objects.equals(serviceType, ServiceType.HOST_ADMIN);
}
+ public boolean isConfigServerHostLike() {
+ return isConfigServerHost() || isControllerHost();
+ }
+
public boolean isTenantHost() {
return isHostedVespaApplicationWithPredicate(ApplicationInstanceId::isTenantHost) &&
Objects.equals(clusterId, ClusterId.TENANT_HOST) &&
Objects.equals(serviceType, ServiceType.HOST_ADMIN);
}
+ public String nodeDescription(boolean plural) {
+ String pluralSuffix = plural ? "s" : "";
+ return isConfigServer() ? "config server" + pluralSuffix :
+ isConfigServerHost() ? "config server host" + pluralSuffix :
+ isController() ? "controller" + pluralSuffix :
+ isControllerHost() ? "controller host" + pluralSuffix :
+ isTenantHost() ? "tenant host" + pluralSuffix :
+ "node" + pluralSuffix + " of {" + serviceType + "," + clusterId + "}";
+ }
+
private boolean isHostedVespaApplicationWithId(ApplicationInstanceId id) {
return isHostedVespaTenant() &&
applicationInstance.map(app -> Objects.equals(app.applicationInstanceId(), id)).orElse(false);