summaryrefslogtreecommitdiffstats
path: root/application-model
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@verizonmedia.com>2020-09-18 17:00:02 +0200
committerHåkon Hallingstad <hakon@verizonmedia.com>2020-09-18 17:00:02 +0200
commit8ef29392f487ec917c597635a27b82f9a7d88342 (patch)
tree80c5cbbf073bd7f2776dba43cdbde617bc0196e9 /application-model
parent0327c08270ee4d538eaba6f0b5a94cf3edd72eca (diff)
30s down-moratorium before allowing suspension
Diffstat (limited to 'application-model')
-rw-r--r--application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceId.java4
-rw-r--r--application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceReference.java7
-rw-r--r--application-model/src/main/java/com/yahoo/vespa/applicationmodel/ClusterId.java3
-rw-r--r--application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceCluster.java60
-rw-r--r--application-model/src/main/java/com/yahoo/vespa/applicationmodel/ServiceInstance.java21
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;