diff options
20 files changed, 131 insertions, 79 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; diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java index 69098ea0030..02ca4ce14c4 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/ApplicationRepository.java @@ -33,6 +33,7 @@ import com.yahoo.path.Path; import com.yahoo.slime.Slime; import com.yahoo.transaction.NestedTransaction; import com.yahoo.transaction.Transaction; +import com.yahoo.vespa.applicationmodel.InfrastructureApplication; import com.yahoo.vespa.config.server.application.Application; import com.yahoo.vespa.config.server.application.ApplicationCuratorDatabase; import com.yahoo.vespa.config.server.application.ApplicationReindexing; @@ -57,8 +58,8 @@ import com.yahoo.vespa.config.server.http.LogRetriever; import com.yahoo.vespa.config.server.http.SecretStoreValidator; import com.yahoo.vespa.config.server.http.SimpleHttpFetcher; import com.yahoo.vespa.config.server.http.TesterClient; -import com.yahoo.vespa.config.server.http.v2.response.DeploymentMetricsResponse; import com.yahoo.vespa.config.server.http.v2.PrepareResult; +import com.yahoo.vespa.config.server.http.v2.response.DeploymentMetricsResponse; import com.yahoo.vespa.config.server.http.v2.response.ProtonMetricsResponse; import com.yahoo.vespa.config.server.metrics.DeploymentMetricsRetriever; import com.yahoo.vespa.config.server.metrics.ProtonMetricsRetriever; @@ -1123,7 +1124,7 @@ public class ApplicationRepository implements com.yahoo.config.provision.Deploye // most applications under hosted-vespa are not known to the model and it's OK for a user to get // logs for any host if they are authorized for the hosted-vespa tenant. if (hostname.isPresent() && HOSTED_VESPA_TENANT.equals(applicationId.tenant())) { - int port = List.of("zone-config-servers", "controller").contains(applicationId.application().value()) ? 19071 : 8080; + int port = List.of(InfrastructureApplication.CONFIG_SERVER.id(), InfrastructureApplication.CONTROLLER.id()).contains(applicationId) ? 19071 : 8080; return "http://" + hostname.get() + ":" + port + "/logs"; } diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java index 614817bce84..885efed9241 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisionerTest.java @@ -12,6 +12,7 @@ import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.exception.LoadBalancerServiceException; import com.yahoo.transaction.NestedTransaction; +import com.yahoo.vespa.applicationmodel.InfrastructureApplication; import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.flags.PermanentFlags; import com.yahoo.vespa.hosted.provision.Node; @@ -234,14 +235,13 @@ public class LoadBalancerProvisionerTest { @Test public void provision_load_balancer_config_server_cluster() { - ApplicationId configServerApp = ApplicationId.from("hosted-vespa", "zone-config-servers", "default"); - Supplier<List<LoadBalancer>> lbs = () -> tester.nodeRepository().loadBalancers().list(configServerApp).asList(); + Supplier<List<LoadBalancer>> lbs = () -> tester.nodeRepository().loadBalancers().list(InfrastructureApplication.CONFIG_SERVER.id()).asList(); var cluster = ClusterSpec.Id.from("zone-config-servers"); - var nodes = prepare(configServerApp, Capacity.fromRequiredNodeType(NodeType.config), + var nodes = prepare(InfrastructureApplication.CONFIG_SERVER.id(), Capacity.fromRequiredNodeType(NodeType.config), clusterRequest(ClusterSpec.Type.admin, cluster)); assertEquals(1, lbs.get().size()); assertEquals("Prepare provisions load balancer with reserved nodes", 2, lbs.get().get(0).instance().get().reals().size()); - tester.activate(configServerApp, nodes); + tester.activate(InfrastructureApplication.CONFIG_SERVER.id(), nodes); assertSame(LoadBalancer.State.active, lbs.get().get(0).state()); assertEquals(cluster, lbs.get().get(0).id().cluster()); } diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/HostedVespaOrchestration.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/HostedVespaOrchestration.java index 0028a5a252c..eb2b863aefb 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/HostedVespaOrchestration.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/HostedVespaOrchestration.java @@ -1,8 +1,8 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.orchestrator.policy; -import com.yahoo.config.provision.ApplicationId; import com.yahoo.vespa.applicationmodel.ClusterId; +import com.yahoo.vespa.applicationmodel.InfrastructureApplication; import com.yahoo.vespa.applicationmodel.ServiceType; /** @@ -19,7 +19,7 @@ public class HostedVespaOrchestration { return new OrchestrationParams.Builder() // Controller host - .addApplicationParams(ApplicationId.fromSerializedForm("hosted-vespa:controller-host:default"), + .addApplicationParams(InfrastructureApplication.CONTROLLER_HOST, new ApplicationParams .Builder() .add(ClusterId.CONTROLLER, @@ -31,7 +31,7 @@ public class HostedVespaOrchestration { .build()) // Controller - .addApplicationParams(ApplicationId.fromSerializedForm("hosted-vespa:controller:default"), + .addApplicationParams(InfrastructureApplication.CONTROLLER, new ApplicationParams .Builder() .add(ClusterId.CONTROLLER, @@ -43,7 +43,7 @@ public class HostedVespaOrchestration { .build()) // Config server host - .addApplicationParams(ApplicationId.fromSerializedForm("hosted-vespa:configserver-host:default"), + .addApplicationParams(InfrastructureApplication.CONFIG_SERVER_HOST, new ApplicationParams .Builder() .add(ClusterId.CONFIG_SERVER_HOST, @@ -55,7 +55,7 @@ public class HostedVespaOrchestration { .build()) // Config server - .addApplicationParams(ApplicationId.fromSerializedForm("hosted-vespa:zone-config-servers:default"), + .addApplicationParams(InfrastructureApplication.CONFIG_SERVER, new ApplicationParams .Builder() .add(ClusterId.CONFIG_SERVER, @@ -67,7 +67,7 @@ public class HostedVespaOrchestration { .build()) // Proxy host - .addApplicationParams(ApplicationId.fromSerializedForm("hosted-vespa:proxy-host:default"), + .addApplicationParams(InfrastructureApplication.PROXY_HOST, new ApplicationParams .Builder() .add(ClusterId.PROXY_HOST, @@ -79,7 +79,7 @@ public class HostedVespaOrchestration { .build()) // Proxy - .addApplicationParams(ApplicationId.fromSerializedForm("hosted-vespa:routing:default"), + .addApplicationParams(InfrastructureApplication.PROXY, new ApplicationParams .Builder() .add(ClusterId.ROUTING, diff --git a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/OrchestrationParams.java b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/OrchestrationParams.java index 530f2dc8faf..43065831cbc 100644 --- a/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/OrchestrationParams.java +++ b/orchestrator/src/main/java/com/yahoo/vespa/orchestrator/policy/OrchestrationParams.java @@ -2,6 +2,7 @@ package com.yahoo.vespa.orchestrator.policy; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.vespa.applicationmodel.InfrastructureApplication; import java.util.HashMap; import java.util.Map; @@ -20,8 +21,8 @@ public class OrchestrationParams { public Builder() {} - public Builder addApplicationParams(ApplicationId applicationId, ApplicationParams params) { - this.applicationParams.put(applicationId, params); + public Builder addApplicationParams(InfrastructureApplication application, ApplicationParams params) { + this.applicationParams.put(application.id(), params); return this; } diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ConfigServerApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ConfigServerApplication.java index b57ddc6bc92..121b7e358e8 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ConfigServerApplication.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ConfigServerApplication.java @@ -2,9 +2,9 @@ package com.yahoo.vespa.service.duper; import com.yahoo.config.provision.ClusterSpec; -import com.yahoo.config.provision.NodeType; import com.yahoo.config.provision.Zone; import com.yahoo.vespa.applicationmodel.ApplicationInstanceId; +import com.yahoo.vespa.applicationmodel.InfrastructureApplication; import com.yahoo.vespa.applicationmodel.ServiceType; /** @@ -15,7 +15,7 @@ import com.yahoo.vespa.applicationmodel.ServiceType; public class ConfigServerApplication extends ConfigServerLikeApplication { public ConfigServerApplication() { - super("zone-config-servers", NodeType.config, ClusterSpec.Type.admin, ServiceType.CONFIG_SERVER); + super(InfrastructureApplication.CONFIG_SERVER, ClusterSpec.Type.admin, ServiceType.CONFIG_SERVER); } /** diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ConfigServerHostApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ConfigServerHostApplication.java index 909b86886b8..b970c3c6b77 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ConfigServerHostApplication.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ConfigServerHostApplication.java @@ -1,12 +1,12 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.service.duper; -import com.yahoo.config.provision.NodeType; +import com.yahoo.vespa.applicationmodel.InfrastructureApplication; public class ConfigServerHostApplication extends HostAdminApplication { public ConfigServerHostApplication() { - super("configserver-host", NodeType.confighost); + super(InfrastructureApplication.CONFIG_SERVER_HOST); } } diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ConfigServerLikeApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ConfigServerLikeApplication.java index 38808b66435..cc3aeddff01 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ConfigServerLikeApplication.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ConfigServerLikeApplication.java @@ -3,7 +3,7 @@ package com.yahoo.vespa.service.duper; import com.yahoo.component.Version; import com.yahoo.config.provision.ClusterSpec; -import com.yahoo.config.provision.NodeType; +import com.yahoo.vespa.applicationmodel.InfrastructureApplication; import com.yahoo.vespa.applicationmodel.ServiceType; /** @@ -12,8 +12,8 @@ import com.yahoo.vespa.applicationmodel.ServiceType; * @author hakonhall */ public abstract class ConfigServerLikeApplication extends InfraApplication { - protected ConfigServerLikeApplication(String applicationName, NodeType nodeType, ClusterSpec.Type clusterType, ServiceType serviceType) { - super(applicationName, nodeType, clusterType, ClusterSpec.Id.from(applicationName), serviceType, 19071); + protected ConfigServerLikeApplication(InfrastructureApplication application, ClusterSpec.Type clusterType, ServiceType serviceType) { + super(application, clusterType, ClusterSpec.Id.from(application.applicationName()), serviceType, 19071); } @Override diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ControllerApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ControllerApplication.java index 6c38149f662..c46b040d443 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ControllerApplication.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ControllerApplication.java @@ -2,7 +2,7 @@ package com.yahoo.vespa.service.duper; import com.yahoo.config.provision.ClusterSpec; -import com.yahoo.config.provision.NodeType; +import com.yahoo.vespa.applicationmodel.InfrastructureApplication; import com.yahoo.vespa.applicationmodel.ServiceType; /** @@ -13,7 +13,7 @@ import com.yahoo.vespa.applicationmodel.ServiceType; public class ControllerApplication extends ConfigServerLikeApplication { public ControllerApplication() { - super("controller", NodeType.controller, ClusterSpec.Type.container, ServiceType.CONTROLLER); + super(InfrastructureApplication.CONTROLLER, ClusterSpec.Type.container, ServiceType.CONTROLLER); } } diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ControllerHostApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ControllerHostApplication.java index eaf7537e45c..7e3c8c03cb7 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ControllerHostApplication.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ControllerHostApplication.java @@ -1,13 +1,13 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.service.duper; -import com.yahoo.config.provision.NodeType; +import com.yahoo.vespa.applicationmodel.InfrastructureApplication; /** * @author mpolden */ public class ControllerHostApplication extends HostAdminApplication { public ControllerHostApplication() { - super("controller-host", NodeType.controllerhost); + super(InfrastructureApplication.CONTROLLER_HOST); } } diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DevHostApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DevHostApplication.java index 65a679d2d33..e522b736290 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DevHostApplication.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DevHostApplication.java @@ -1,13 +1,13 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.service.duper; -import com.yahoo.config.provision.NodeType; +import com.yahoo.vespa.applicationmodel.InfrastructureApplication; /** * @author mortent */ public class DevHostApplication extends HostAdminApplication { public DevHostApplication() { - super("dev-host", NodeType.devhost); + super(InfrastructureApplication.DEV_HOST); } } diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/HostAdminApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/HostAdminApplication.java index 0b90350b7be..70a8e5e7443 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/HostAdminApplication.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/HostAdminApplication.java @@ -2,7 +2,7 @@ package com.yahoo.vespa.service.duper; import com.yahoo.config.provision.ClusterSpec; -import com.yahoo.config.provision.NodeType; +import com.yahoo.vespa.applicationmodel.InfrastructureApplication; import com.yahoo.vespa.applicationmodel.ServiceType; /** @@ -12,11 +12,10 @@ public abstract class HostAdminApplication extends InfraApplication { public static final int HOST_ADMIN_HEALT_PORT = 8080; - protected HostAdminApplication(String applicationName, NodeType nodeType) { - super(applicationName, - nodeType, + protected HostAdminApplication(InfrastructureApplication application) { + super(application, ClusterSpec.Type.container, - ClusterSpec.Id.from(applicationName), + ClusterSpec.Id.from(application.applicationName()), ServiceType.HOST_ADMIN, HOST_ADMIN_HEALT_PORT); } diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/InfraApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/InfraApplication.java index 8a62db87e7c..eccffa27930 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/InfraApplication.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/InfraApplication.java @@ -10,12 +10,11 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.HostName; -import com.yahoo.config.provision.NodeType; -import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.Zone; import com.yahoo.vespa.applicationmodel.ApplicationInstanceId; import com.yahoo.vespa.applicationmodel.ClusterId; import com.yahoo.vespa.applicationmodel.ConfigId; +import com.yahoo.vespa.applicationmodel.InfrastructureApplication; import com.yahoo.vespa.applicationmodel.ServiceType; import com.yahoo.vespa.applicationmodel.TenantId; import com.yahoo.vespa.service.health.StateV1HealthModel; @@ -35,30 +34,20 @@ import java.util.stream.Collectors; */ public abstract class InfraApplication implements InfraApplicationApi { - static final TenantName TENANT_NAME = TenantName.from("hosted-vespa"); - - private final ApplicationId applicationId; + private final InfrastructureApplication application; private final Capacity capacity; private final ClusterSpec.Type clusterSpecType; private final ClusterSpec.Id clusterSpecId; private final ServiceType serviceType; private final int healthPort; - public static ApplicationId createHostedVespaApplicationId(String applicationName) { - return new ApplicationId.Builder() - .tenant(TENANT_NAME) - .applicationName(applicationName) - .build(); - } - - protected InfraApplication(String applicationName, - NodeType nodeType, + protected InfraApplication(InfrastructureApplication application, ClusterSpec.Type clusterSpecType, ClusterSpec.Id clusterSpecId, ServiceType serviceType, int healthPort) { - this.applicationId = createHostedVespaApplicationId(applicationName); - this.capacity = Capacity.fromRequiredNodeType(nodeType); + this.application = application; + this.capacity = Capacity.fromRequiredNodeType(application.nodeType()); this.clusterSpecType = clusterSpecType; this.clusterSpecId = clusterSpecId; this.serviceType = serviceType; @@ -67,7 +56,7 @@ public abstract class InfraApplication implements InfraApplicationApi { @Override public ApplicationId getApplicationId() { - return applicationId; + return application.id(); } @Override @@ -97,16 +86,16 @@ public abstract class InfraApplication implements InfraApplicationApi { } public ApplicationInstanceId getApplicationInstanceId(Zone zone) { - return ApplicationInstanceGenerator.toApplicationInstanceId(applicationId, zone); + return ApplicationInstanceGenerator.toApplicationInstanceId(application.id(), zone); } public TenantId getTenantId() { - return new TenantId(applicationId.tenant().value()); + return new TenantId(application.id().tenant().value()); } public ApplicationInfo makeApplicationInfo(List<HostName> hostnames) { List<HostInfo> hostInfos = hostnames.stream().map(this::makeHostInfo).collect(Collectors.toList()); - return new ApplicationInfo(applicationId, 0, new HostsModel(hostInfos)); + return new ApplicationInfo(application.id(), 0, new HostsModel(hostInfos)); } private HostInfo makeHostInfo(HostName hostname) { @@ -147,7 +136,7 @@ public abstract class InfraApplication implements InfraApplicationApi { if (o == null || getClass() != o.getClass()) return false; InfraApplication that = (InfraApplication) o; return healthPort == that.healthPort && - Objects.equals(applicationId, that.applicationId) && + Objects.equals(application, that.application) && Objects.equals(capacity, that.capacity) && clusterSpecType == that.clusterSpecType && Objects.equals(clusterSpecId, that.clusterSpecId) && @@ -156,13 +145,13 @@ public abstract class InfraApplication implements InfraApplicationApi { @Override public int hashCode() { - return Objects.hash(applicationId, capacity, clusterSpecType, clusterSpecId, serviceType, healthPort); + return Objects.hash(application, capacity, clusterSpecType, clusterSpecId, serviceType, healthPort); } @Override public String toString() { return "InfraApplication{" + - "applicationId=" + applicationId + + "application=" + application + ", capacity=" + capacity + ", clusterSpecType=" + clusterSpecType + ", clusterSpecId=" + clusterSpecId + diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ProxyHostApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ProxyHostApplication.java index f65dfd5577c..1819548c6cc 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ProxyHostApplication.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/ProxyHostApplication.java @@ -1,10 +1,10 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.service.duper; -import com.yahoo.config.provision.NodeType; +import com.yahoo.vespa.applicationmodel.InfrastructureApplication; public class ProxyHostApplication extends HostAdminApplication { public ProxyHostApplication() { - super("proxy-host", NodeType.proxyhost); + super(InfrastructureApplication.PROXY_HOST); } } diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/TenantHostApplication.java b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/TenantHostApplication.java index 7e834a15672..312dd5b64a7 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/TenantHostApplication.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/TenantHostApplication.java @@ -1,10 +1,10 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.service.duper; -import com.yahoo.config.provision.NodeType; +import com.yahoo.vespa.applicationmodel.InfrastructureApplication; public class TenantHostApplication extends HostAdminApplication { public TenantHostApplication() { - super("tenant-host", NodeType.host); + super(InfrastructureApplication.TENANT_HOST); } } |