diff options
author | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-09-18 17:00:02 +0200 |
---|---|---|
committer | Håkon Hallingstad <hakon@verizonmedia.com> | 2020-09-18 17:00:02 +0200 |
commit | 8ef29392f487ec917c597635a27b82f9a7d88342 (patch) | |
tree | 80c5cbbf073bd7f2776dba43cdbde617bc0196e9 /application-model/src/main | |
parent | 0327c08270ee4d538eaba6f0b5a94cf3edd72eca (diff) |
30s down-moratorium before allowing suspension
Diffstat (limited to 'application-model/src/main')
5 files changed, 79 insertions, 16 deletions
diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceId.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceId.java index 6bdc7a949e7..801213dcf40 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceId.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceId.java @@ -12,6 +12,10 @@ import java.util.Objects; public class ApplicationInstanceId { public static final ApplicationInstanceId CONFIG_SERVER = new ApplicationInstanceId("zone-config-servers"); public static final ApplicationInstanceId CONTROLLER = new ApplicationInstanceId("controller"); + // Unfortunately, for config server host the ApplicationInstanceId is: configserver-host:prod:cd-us-central-1:default + public boolean isConfigServerHost() { return id.startsWith("configserver-host:"); } + public static final ApplicationInstanceId CONTROLLER_HOST = new ApplicationInstanceId("controller-host:prod:default:default"); + public boolean isTenantHost() { return id.startsWith("tenant-host:"); } private final String id; diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceReference.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceReference.java index e761e14caa4..f0b2c46d460 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceReference.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceReference.java @@ -10,7 +10,7 @@ import java.util.Objects; * @author bjorncs */ // TODO: Remove this and use ApplicationId instead (if you need it for the JSON stuff move it to that layer and don't let it leak) -public class ApplicationInstanceReference { +public class ApplicationInstanceReference implements Comparable<ApplicationInstanceReference> { private final TenantId tenantId; private final ApplicationInstanceId applicationInstanceId; @@ -43,6 +43,11 @@ public class ApplicationInstanceReference { } @Override + public int compareTo(ApplicationInstanceReference o) { + return this.asString().compareTo(o.asString()); + } + + @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ClusterId.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ClusterId.java index 96be7090114..8af47a796f6 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ClusterId.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ClusterId.java @@ -12,6 +12,9 @@ public class ClusterId { public static final ClusterId CONFIG_SERVER = new ClusterId("zone-config-servers"); public static final ClusterId CONTROLLER = new ClusterId("controller"); + public static final ClusterId CONFIG_SERVER_HOST = new ClusterId("configserver-host"); + public static final ClusterId CONTROLLER_HOST = new ClusterId("configserver-host"); + public static final ClusterId TENANT_HOST = new ClusterId("tenant-host"); private final String id; 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 1faefcb7c61..43f161cfec9 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 @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonProperty; import java.util.Objects; import java.util.Optional; import java.util.Set; +import java.util.function.Predicate; /** * Represents a collection of service instances that together make up a service with a single cluster id. @@ -51,24 +52,53 @@ public class ServiceCluster { return applicationInstance.get(); } - public boolean isConfigServerClusterLike() { - // config server - if (Objects.equals(applicationInstance.map(ApplicationInstance::tenantId), Optional.of(TenantId.HOSTED_VESPA)) && - Objects.equals(applicationInstance.map(ApplicationInstance::applicationInstanceId), Optional.of(ApplicationInstanceId.CONFIG_SERVER)) && - Objects.equals(clusterId, ClusterId.CONFIG_SERVER) && - Objects.equals(serviceType, ServiceType.CONFIG_SERVER)) { - return true; - } + public boolean isConfigServerLike() { + return isConfigServer() || isController(); + } - // controller - if (Objects.equals(applicationInstance.map(ApplicationInstance::tenantId), Optional.of(TenantId.HOSTED_VESPA)) && - Objects.equals(applicationInstance.map(ApplicationInstance::applicationInstanceId), Optional.of(ApplicationInstanceId.CONTROLLER)) && + public boolean isController() { + return isHostedVespaApplicationWithId(ApplicationInstanceId.CONTROLLER) && Objects.equals(clusterId, ClusterId.CONTROLLER) && - Objects.equals(serviceType, ServiceType.CONTROLLER)) { - return true; - } + Objects.equals(serviceType, ServiceType.CONTROLLER); + } + + /** Is a config server (and not controller!) */ + public boolean isConfigServer() { + return isHostedVespaApplicationWithId(ApplicationInstanceId.CONFIG_SERVER) && + Objects.equals(clusterId, ClusterId.CONFIG_SERVER) && + Objects.equals(serviceType, ServiceType.CONFIG_SERVER); + } + + public boolean isConfigServerHost() { + return isHostedVespaApplicationWithPredicate(ApplicationInstanceId::isConfigServerHost) && + Objects.equals(clusterId, ClusterId.CONFIG_SERVER_HOST) && + Objects.equals(serviceType, ServiceType.HOST_ADMIN); + } + + public boolean isControllerHost() { + return isHostedVespaApplicationWithId(ApplicationInstanceId.CONTROLLER_HOST) && + Objects.equals(clusterId, ClusterId.CONTROLLER_HOST) && + Objects.equals(serviceType, ServiceType.HOST_ADMIN); + } + + public boolean isTenantHost() { + return isHostedVespaApplicationWithPredicate(ApplicationInstanceId::isTenantHost) && + Objects.equals(clusterId, ClusterId.TENANT_HOST) && + Objects.equals(serviceType, ServiceType.HOST_ADMIN); + } + + private boolean isHostedVespaApplicationWithId(ApplicationInstanceId id) { + return isHostedVespaTenant() && + applicationInstance.map(app -> Objects.equals(app.applicationInstanceId(), id)).orElse(false); + } + + private boolean isHostedVespaApplicationWithPredicate(Predicate<ApplicationInstanceId> predicate) { + return isHostedVespaTenant() && + applicationInstance.map(app -> predicate.test(app.applicationInstanceId())).orElse(false); + } - return false; + private boolean isHostedVespaTenant() { + return applicationInstance.map(a -> Objects.equals(a.tenantId(), TenantId.HOSTED_VESPA)).orElse(false); } @Override diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceInstance.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceInstance.java index b4fce878b0d..d75d3abd5da 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceInstance.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceInstance.java @@ -66,6 +66,27 @@ public class ServiceInstance { '}'; } + /** + * Get a name that can be used in e.g. config server logs that makes it easy to understand which + * service instance this is. + */ + public String descriptiveName() { + if (getServiceCluster().isController() || getServiceCluster().isConfigServer()) { + return getHostnamePrefix(); + } else if (getServiceCluster().isControllerHost() || getServiceCluster().isConfigServerHost()) { + return "host-admin on " + getHostnamePrefix(); + } else if (getServiceCluster().isTenantHost()) { + return "host-admin on " + hostName.s(); + } else { + return configId.s(); + } + } + + private String getHostnamePrefix() { + int dotIndex = hostName.s().indexOf('.'); + return dotIndex == -1 ? hostName().s() : hostName.s().substring(0, dotIndex); + } + @Override public boolean equals(Object o) { if (this == o) return true; |