diff options
author | Håkon Hallingstad <hakon@verizonmedia.com> | 2021-03-23 11:56:24 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@verizonmedia.com> | 2021-03-23 11:56:24 +0100 |
commit | 44f64849fdd2a0dc62e84eb701bae1216d0b2215 (patch) | |
tree | eb8700943c722c4e5bfc62714580025e01f49a5d /application-model | |
parent | 81871d3f99f2155b0d81b347b61ac685a7bbc13e (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.java | 14 |
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); |