summaryrefslogtreecommitdiffstats
path: root/application-model
diff options
context:
space:
mode:
authorHåkon Hallingstad <hakon@yahooinc.com>2022-01-03 17:39:33 +0100
committerHåkon Hallingstad <hakon@yahooinc.com>2022-01-03 17:39:33 +0100
commit0646515bf772065e2992152aeb7a0a808f18df62 (patch)
treed81f892f9d4ac7cafc02a4c71ba57d7545728cc5 /application-model
parent4528efcd87b9c078f91ecfc4f53dfee8632881e1 (diff)
Add InfrastructureApplication in application-model
Diffstat (limited to 'application-model')
-rw-r--r--application-model/pom.xml6
-rw-r--r--application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceId.java19
-rw-r--r--application-model/src/main/java/com/yahoo/vespa/applicationmodel/ApplicationInstanceReference.java2
-rw-r--r--application-model/src/main/java/com/yahoo/vespa/applicationmodel/ClusterId.java14
-rw-r--r--application-model/src/main/java/com/yahoo/vespa/applicationmodel/InfrastructureApplication.java53
-rw-r--r--application-model/src/main/java/com/yahoo/vespa/applicationmodel/TenantId.java6
6 files changed, 81 insertions, 19 deletions
diff --git a/application-model/pom.xml b/application-model/pom.xml
index 4937bc54a34..19823a12e67 100644
--- a/application-model/pom.xml
+++ b/application-model/pom.xml
@@ -23,6 +23,12 @@
</dependency>
<dependency>
<groupId>com.yahoo.vespa</groupId>
+ <artifactId>config-provisioning</artifactId>
+ <version>${project.version}</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.yahoo.vespa</groupId>
<artifactId>annotations</artifactId>
<version>${project.version}</version>
</dependency>
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;