diff options
author | Håkon Hallingstad <hakon@yahooinc.com> | 2022-01-03 17:39:33 +0100 |
---|---|---|
committer | Håkon Hallingstad <hakon@yahooinc.com> | 2022-01-03 17:39:33 +0100 |
commit | 0646515bf772065e2992152aeb7a0a808f18df62 (patch) | |
tree | d81f892f9d4ac7cafc02a4c71ba57d7545728cc5 /application-model/src/main/java | |
parent | 4528efcd87b9c078f91ecfc4f53dfee8632881e1 (diff) |
Add InfrastructureApplication in application-model
Diffstat (limited to 'application-model/src/main/java')
5 files changed, 75 insertions, 19 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 76605a8d6b2..63810d1d109 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 @@ -10,15 +10,17 @@ import java.util.Objects; */ // TODO: Remove this and use ApplicationName/InstanceName instead (if you need it for the JSON stuff move it to that layer and don't let it leak) public class ApplicationInstanceId { - public static final ApplicationInstanceId CONFIG_SERVER = new ApplicationInstanceId("zone-config-servers"); - public static final ApplicationInstanceId CONTROLLER = new ApplicationInstanceId("controller"); + + public static final ApplicationInstanceId CONFIG_SERVER = new ApplicationInstanceId(InfrastructureApplication.CONFIG_SERVER.applicationName()); + public static final ApplicationInstanceId CONTROLLER = new ApplicationInstanceId(InfrastructureApplication.CONTROLLER.applicationName()); // 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:"); } - public boolean isProxyHost() { return id.startsWith("proxy-host:"); } + public boolean isConfigServerHost() { return id.startsWith(InfrastructureApplication.CONFIG_SERVER_HOST.applicationName() + ":"); } + public static final ApplicationInstanceId CONTROLLER_HOST = new ApplicationInstanceId(InfrastructureApplication.CONTROLLER_HOST.applicationName() + + ":prod:default:default"); + public boolean isTenantHost() { return id.startsWith(InfrastructureApplication.TENANT_HOST.applicationName() + ":"); } + public boolean isProxyHost() { return id.startsWith(InfrastructureApplication.PROXY_HOST.applicationName() + ":"); } // Routing application instance ID is of the form: routing:prod:eu-west-1:default - public boolean isProxy() { return id.startsWith("routing:"); } + public boolean isProxy() { return id.startsWith(InfrastructureApplication.PROXY.applicationName() + ":"); } private final String id; @@ -34,8 +36,7 @@ public class ApplicationInstanceId { return id; } - // For compatibility with original Scala case class - public String s() { + public String value() { return 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 f9bc0cec0b0..c11af132722 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 @@ -39,7 +39,7 @@ public class ApplicationInstanceReference implements Comparable<ApplicationInsta } public String asString() { - return tenantId.s() + ":" + applicationInstanceId.s(); + return tenantId.value() + ":" + applicationInstanceId.value(); } @Override 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 e193c32b16b..9ccd3e4d706 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 @@ -10,13 +10,13 @@ import java.util.Objects; */ 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("controller-host"); - public static final ClusterId PROXY_HOST = new ClusterId("proxy-host"); - public static final ClusterId ROUTING = new ClusterId("routing"); - public static final ClusterId TENANT_HOST = new ClusterId("tenant-host"); + public static final ClusterId CONFIG_SERVER = new ClusterId(InfrastructureApplication.CONFIG_SERVER.applicationName()); + public static final ClusterId CONTROLLER = new ClusterId(InfrastructureApplication.CONTROLLER.applicationName()); + public static final ClusterId CONFIG_SERVER_HOST = new ClusterId(InfrastructureApplication.CONFIG_SERVER_HOST.applicationName()); + public static final ClusterId CONTROLLER_HOST = new ClusterId(InfrastructureApplication.CONTROLLER_HOST.applicationName()); + public static final ClusterId PROXY_HOST = new ClusterId(InfrastructureApplication.PROXY_HOST.applicationName()); + public static final ClusterId ROUTING = new ClusterId(InfrastructureApplication.PROXY.applicationName()); + public static final ClusterId TENANT_HOST = new ClusterId(InfrastructureApplication.TENANT_HOST.applicationName()); private final String id; diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/InfrastructureApplication.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/InfrastructureApplication.java new file mode 100644 index 00000000000..f3b529d8c05 --- /dev/null +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/InfrastructureApplication.java @@ -0,0 +1,53 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.applicationmodel; + +import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.NodeType; + +import java.util.stream.Stream; + +/** + * Special infrastructure applications in hosted Vespa. + * + * @author hakonhall + */ +public enum InfrastructureApplication { + CONTROLLER_HOST("controller-host", NodeType.controllerhost), + CONTROLLER("controller", NodeType.controller), + CONFIG_SERVER_HOST("configserver-host", NodeType.confighost), + CONFIG_SERVER("zone-config-servers", NodeType.config), + PROXY_HOST("proxy-host", NodeType.proxyhost), + PROXY("routing", NodeType.proxy), + TENANT_HOST("tenant-host", NodeType.host), + DEV_HOST("dev-host", NodeType.devhost); + + private final ApplicationId id; + private final NodeType nodeType; + + public static InfrastructureApplication withNodeType(NodeType nodeType) { + return Stream.of(values()) + .filter(application -> nodeType == application.nodeType) + .findAny() + .orElseThrow(() -> new IllegalArgumentException("No application associated with " + nodeType)); + } + + InfrastructureApplication(String name, NodeType nodeType) { + this.id = ApplicationId.from(TenantId.HOSTED_VESPA.value(), name, "default"); + this.nodeType = nodeType; + } + + public ApplicationId id() { return id; } + /** Avoid using {@link #name()} which is the name of the enum constant. */ + public String applicationName() { return id.application().value(); } + public NodeType nodeType() { return nodeType; } + public boolean isConfigServerLike() { return this == CONFIG_SERVER || this == CONTROLLER; } + public boolean isConfigServerHostLike() { return this == CONFIG_SERVER_HOST || this == CONTROLLER_HOST; } + + @Override + public String toString() { + return "InfrastructureApplication{" + + "id=" + id + + ", nodeType=" + nodeType + + '}'; + } +} diff --git a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/TenantId.java b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/TenantId.java index 9789f1ac9f9..7d94a0418e4 100644 --- a/application-model/src/main/java/com/yahoo/vespa/applicationmodel/TenantId.java +++ b/application-model/src/main/java/com/yahoo/vespa/applicationmodel/TenantId.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.applicationmodel; import com.fasterxml.jackson.annotation.JsonValue; +import com.yahoo.config.provision.TenantName; import java.util.Objects; @@ -26,11 +27,12 @@ public class TenantId { return id; } - // For compatibility with original Scala case class - public String s() { + public String value() { return id; } + public TenantName toName() { return TenantName.from(id); } + @Override public boolean equals(Object o) { if (this == o) return true; |