diff options
92 files changed, 331 insertions, 287 deletions
diff --git a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RpcServer.java b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RpcServer.java index 65c8a9df28e..4bd9b2fc9b8 100644 --- a/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RpcServer.java +++ b/clustercontroller-core/src/main/java/com/yahoo/vespa/clustercontroller/core/rpc/RpcServer.java @@ -16,7 +16,6 @@ import com.yahoo.jrt.slobrok.api.BackOffPolicy; import com.yahoo.jrt.slobrok.api.Register; import com.yahoo.jrt.slobrok.api.SlobrokList; import java.util.logging.Level; - import com.yahoo.net.HostName; import com.yahoo.vdslib.state.ClusterState; import com.yahoo.vdslib.state.Node; diff --git a/config-lib/src/main/java/com/yahoo/config/PathNode.java b/config-lib/src/main/java/com/yahoo/config/PathNode.java index ea4c657af8c..03e6fb51086 100644 --- a/config-lib/src/main/java/com/yahoo/config/PathNode.java +++ b/config-lib/src/main/java/com/yahoo/config/PathNode.java @@ -25,7 +25,7 @@ public class PathNode extends LeafNode<Path> { super(true); this.value = Path.of(fileReference.value()); if (value.normalize().toString().startsWith("..")) - throw new IllegalArgumentException("path may not start with '..', but got: " + value); + throw new IllegalArgumentException("path may not start with '..', but got :" + value); this.fileReference = fileReference; } diff --git a/config-lib/src/test/java/com/yahoo/config/FileNodeTest.java b/config-lib/src/test/java/com/yahoo/config/FileNodeTest.java index 42e4978091d..1ad9f722eca 100644 --- a/config-lib/src/test/java/com/yahoo/config/FileNodeTest.java +++ b/config-lib/src/test/java/com/yahoo/config/FileNodeTest.java @@ -23,8 +23,9 @@ public class FileNodeTest { assertEquals("foo.txt", n.value().value()); assertEquals("\"foo.txt\"", n.toString()); - assertEquals("path may not start with '..', but got: foo/../../boo", - assertThrows(IllegalArgumentException.class, () -> new FileNode("foo/../../boo")).getMessage()); + assertThrows("path may not start with '..', but got: foo/../../boo", + IllegalArgumentException.class, + () -> new FileNode("foo/../../boo")); } } diff --git a/config-lib/src/test/java/com/yahoo/config/PathNodeTest.java b/config-lib/src/test/java/com/yahoo/config/PathNodeTest.java index 016c53b42e3..2240f647726 100644 --- a/config-lib/src/test/java/com/yahoo/config/PathNodeTest.java +++ b/config-lib/src/test/java/com/yahoo/config/PathNodeTest.java @@ -22,8 +22,9 @@ public class PathNodeTest { n = new PathNode(new FileReference("foo.txt")); assertEquals(new File("foo.txt").toPath(), n.value()); - assertEquals("path may not start with '..', but got: foo/../../boo", - assertThrows(IllegalArgumentException.class, () -> new PathNode(new FileReference("foo/../../boo"))).getMessage()); + assertThrows("path may not start with '..', but got: foo/../../boo", + IllegalArgumentException.class, + () -> new PathNode(new FileReference("foo/../../boo"))); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java index 47519853ed0..17690c6ecab 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java @@ -1066,10 +1066,10 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { // TODO: Remove this method and use the loadbalancerName directly return Optional.ofNullable(loadbalancerName) .orElseGet( - () -> HostName.of(configServerSpecs.stream() - .findFirst() - .map(ConfigServerSpec::getHostName) - .orElse("unknown") // Currently unable to test this, hence the unknown + () -> HostName.from(configServerSpecs.stream() + .findFirst() + .map(ConfigServerSpec::getHostName) + .orElse("unknown") // Currently unable to test this, hence the unknown )); } diff --git a/config-model/src/test/java/com/yahoo/config/model/deploy/SystemModelTestCase.java b/config-model/src/test/java/com/yahoo/config/model/deploy/SystemModelTestCase.java index 70b9fc54882..66cbfbd537f 100644 --- a/config-model/src/test/java/com/yahoo/config/model/deploy/SystemModelTestCase.java +++ b/config-model/src/test/java/com/yahoo/config/model/deploy/SystemModelTestCase.java @@ -2,12 +2,12 @@ package com.yahoo.config.model.deploy; import com.yahoo.cloud.config.SentinelConfig; -import com.yahoo.net.HostName; import com.yahoo.test.StandardConfig; import com.yahoo.config.model.ConfigModel; import com.yahoo.config.model.ConfigModelRegistry; import com.yahoo.config.model.MapConfigModelRegistry; import com.yahoo.config.model.ApplicationConfigProducerRoot; +import com.yahoo.net.HostName; import com.yahoo.vespa.model.ConfigProducer; import com.yahoo.vespa.model.HostResource; import com.yahoo.vespa.model.HostSystem; diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/parser/IntermediateParserTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/parser/IntermediateParserTestCase.java index 1e0c554af81..c686a813c9f 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/parser/IntermediateParserTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/parser/IntermediateParserTestCase.java @@ -74,14 +74,13 @@ public class IntermediateParserTestCase { @Test public void backwards_path_is_disallowed() { - assertEquals("'..' is not allowed in path", - assertThrows(IllegalArgumentException.class, - () -> parseString("schema foo {\n" + - " constant my_constant_tensor {\n" + - " file: foo/../bar\n" + - " type: tensor<float>(x{},y{})\n" + - " }\n" + - "}\n")).getMessage()); + assertThrows("'..' is not allowed in path", IllegalArgumentException.class, + () -> parseString("schema foo {\n" + + " constant my_constant_tensor {\n" + + " file: foo/../bar\n" + + " type: tensor<float>(x{},y{})\n" + + " }\n" + + "}\n")); } void checkFileParses(String fileName) throws Exception { diff --git a/config-provisioning/src/main/java/com/yahoo/config/provision/HostName.java b/config-provisioning/src/main/java/com/yahoo/config/provision/HostName.java index e55737da18d..04b15af51f2 100644 --- a/config-provisioning/src/main/java/com/yahoo/config/provision/HostName.java +++ b/config-provisioning/src/main/java/com/yahoo/config/provision/HostName.java @@ -1,23 +1,47 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.config.provision; -import ai.vespa.http.DomainName; - -import static ai.vespa.validation.Validation.requireLength; +import java.util.Objects; /** - * Hostnames match {@link #domainNamePattern}, and are restricted to 64 characters in length. + * A host name * - * @author jonmv + * @author mortent */ -public class HostName extends DomainName { +public class HostName implements Comparable<HostName> { + + private final String name; + + private HostName(String name) { + this.name = name; + } + + public String value() { return name; } + + /** Create a {@link HostName} with a given name */ + public static HostName from(String name) { + return new HostName(name); + } + + @Override + public int hashCode() { + return name.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof HostName)) return false; + return Objects.equals(((HostName)obj).value(), value()); + } - private HostName(String value) { - super(requireLength(value, "hostname length", 1, 64)); + @Override + public String toString() { + return name; } - public static HostName of(String value) { - return new HostName(value); + @Override + public int compareTo(HostName that) { + return this.name.compareTo(that.name); } } diff --git a/config-provisioning/src/test/java/com/yahoo/config/provision/HostNameTest.java b/config-provisioning/src/test/java/com/yahoo/config/provision/HostNameTest.java deleted file mode 100644 index da01920cc57..00000000000 --- a/config-provisioning/src/test/java/com/yahoo/config/provision/HostNameTest.java +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.config.provision; - -import org.junit.Test; - -import static org.junit.Assert.assertThrows; - -/** - * @author jonmv - */ -public class HostNameTest { - - @Test - public void testNames() { - HostName.of("name-123.0.321-eman"); - HostName.of(("." + "a".repeat(32)).repeat(2).substring(1, 65)); - HostName.of("123"); - - assertThrows(IllegalArgumentException.class, () -> HostName.of("_")); - assertThrows(IllegalArgumentException.class, () -> HostName.of("-")); - assertThrows(IllegalArgumentException.class, () -> HostName.of(".")); - assertThrows(IllegalArgumentException.class, () -> HostName.of("-foo")); - assertThrows(IllegalArgumentException.class, () -> HostName.of("foo-")); - assertThrows(IllegalArgumentException.class, () -> HostName.of(".foo")); - assertThrows(IllegalArgumentException.class, () -> HostName.of("foo.")); - assertThrows(IllegalArgumentException.class, () -> HostName.of("foo..bar")); - assertThrows(IllegalArgumentException.class, () -> HostName.of("foo.-.bar")); - assertThrows(IllegalArgumentException.class, () -> HostName.of("foo/")); - assertThrows(IllegalArgumentException.class, () -> HostName.of("foo%")); - assertThrows(IllegalArgumentException.class, () -> HostName.of(("." + "a".repeat(32)).repeat(2).substring(1, 66))); - assertThrows(IllegalArgumentException.class, () -> HostName.of("a".repeat(64))); - } - -} - diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java index b59dbda3174..fe9ab82637f 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java @@ -21,10 +21,10 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.AthenzDomain; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.DockerImage; +import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.TenantName; import com.yahoo.config.provision.Zone; import com.yahoo.container.jdisc.secretstore.SecretStore; -import com.yahoo.config.provision.HostName; import com.yahoo.vespa.config.server.tenant.SecretStoreExternalIdRetriever; import com.yahoo.vespa.flags.FetchVector; import com.yahoo.vespa.flags.FlagSource; @@ -398,7 +398,7 @@ public class ModelContextImpl implements ModelContext { this.applicationId = applicationId; this.multitenant = configserverConfig.multitenant() || configserverConfig.hostedVespa() || Boolean.getBoolean("multitenant"); this.configServerSpecs = fromConfig(configserverConfig); - this.loadBalancerName = configserverConfig.loadBalancerAddress().isEmpty() ? null : HostName.of(configserverConfig.loadBalancerAddress()); + this.loadBalancerName = HostName.from(configserverConfig.loadBalancerAddress()); this.ztsUrl = configserverConfig.ztsUrl() != null ? URI.create(configserverConfig.ztsUrl()) : null; this.athenzDnsSuffix = configserverConfig.athenzDnsSuffix(); this.hostedVespa = configserverConfig.hostedVespa(); diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/GetConfigProcessor.java b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/GetConfigProcessor.java index 1946a9bf76c..55645d83b3c 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/GetConfigProcessor.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/rpc/GetConfigProcessor.java @@ -5,9 +5,9 @@ import com.yahoo.cloud.config.SentinelConfig; import com.yahoo.collections.Pair; import com.yahoo.component.Version; import com.yahoo.config.provision.TenantName; -import com.yahoo.net.HostName; import com.yahoo.vespa.config.PayloadChecksums; import com.yahoo.jrt.Request; +import com.yahoo.net.HostName; import com.yahoo.vespa.config.ConfigPayload; import com.yahoo.vespa.config.ErrorCode; import com.yahoo.vespa.config.UnknownConfigIdException; diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizerTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizerTest.java index 2650b23a38e..30d3dcffc30 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizerTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/rpc/security/MultiTenantRpcAuthorizerTest.java @@ -56,7 +56,7 @@ public class MultiTenantRpcAuthorizerTest { private static final List<X509Certificate> PEER_CERTIFICATE_CHAIN = List.of(createDummyCertificate()); private static final ApplicationId APPLICATION_ID = ApplicationId.from("mytenant", "myapplication", "default"); private static final ApplicationId EVIL_APP_ID = ApplicationId.from("malice", "malice-app", "default"); - private static final HostName HOSTNAME = HostName.of("myhostname"); + private static final HostName HOSTNAME = HostName.from("myhostname"); private static final FileReference FILE_REFERENCE = new FileReference("myfilereference"); @SuppressWarnings("deprecation") diff --git a/container-core/src/test/java/com/yahoo/restapi/PathTest.java b/container-core/src/test/java/com/yahoo/restapi/PathTest.java index b0392c16e2e..17b35a6343c 100644 --- a/container-core/src/test/java/com/yahoo/restapi/PathTest.java +++ b/container-core/src/test/java/com/yahoo/restapi/PathTest.java @@ -68,9 +68,9 @@ public class PathTest { public void testUrlEncodedPath() { assertTrue(new Path(URI.create("/a/%62/c")).matches("/a/b/c")); assertFalse(new Path(URI.create("/a/b%2fc"), __ -> { }).matches("/a/b/c")); - assertEquals("path segments cannot be \"\", \".\", or \"..\", but got: '..'", - assertThrows(IllegalArgumentException.class, - () -> new Path(URI.create("/foo")).matches("/foo/bar/%2e%2e")).getMessage()); + assertThrows("path segments cannot be \"\", \".\", or \"..\", but got: '..'", + IllegalArgumentException.class, + () -> new Path(URI.create("/foo")).matches("/foo/bar/%2e%2e")); Path path = new Path(URI.create("/%61/%2f/%63"), __ -> { }); assertTrue(path.matches("/a/{slash}/{c}")); diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/EnvironmentResource.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/EnvironmentResource.java index 389cda605af..77b8118784a 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/EnvironmentResource.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/application/v4/EnvironmentResource.java @@ -2,10 +2,10 @@ package com.yahoo.vespa.hosted.controller.api.application.v4; import com.fasterxml.jackson.databind.JsonNode; -import com.yahoo.config.provision.HostName; import com.yahoo.vespa.hosted.controller.api.application.v4.model.InstanceInformation; import com.yahoo.vespa.hosted.controller.api.identifiers.ApplicationId; import com.yahoo.vespa.hosted.controller.api.identifiers.EnvironmentId; +import com.yahoo.vespa.hosted.controller.api.identifiers.Hostname; import com.yahoo.vespa.hosted.controller.api.identifiers.InstanceId; import com.yahoo.vespa.hosted.controller.api.identifiers.RegionId; import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId; @@ -51,7 +51,7 @@ public interface EnvironmentResource { @PathParam("environmentId") EnvironmentId environmentId, @PathParam("regionId") RegionId regionId, @PathParam("instanceId") InstanceId instanceId, - @QueryParam("hostname") HostName hostname); + @QueryParam("hostname") Hostname hostname); @GET @Path("{environmentId}/region/{regionId}/instance/{instanceId}") diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/Hostname.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/Hostname.java new file mode 100644 index 00000000000..fc46c92189d --- /dev/null +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/Hostname.java @@ -0,0 +1,13 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.hosted.controller.api.identifiers; + +/** + * @author smorgrav + */ +public class Hostname extends Identifier { + + public Hostname(String hostname) { + super(hostname); + } + +} diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/MockResourceTagger.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/MockResourceTagger.java index 3ac289a06b1..ecd58bc292c 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/MockResourceTagger.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/MockResourceTagger.java @@ -8,6 +8,7 @@ import com.yahoo.config.provision.zone.ZoneId; import java.util.HashMap; import java.util.Map; +import java.util.Optional; /** * @author olaa diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/ResourceTagger.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/ResourceTagger.java index de40344c1c9..18be3a414a5 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/ResourceTagger.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/aws/ResourceTagger.java @@ -6,6 +6,7 @@ import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.ZoneApi; import java.util.Map; +import java.util.Optional; /** * @author olaa diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/LoadBalancer.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/LoadBalancer.java index 6199c8c28b9..015d7dce33b 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/LoadBalancer.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/LoadBalancer.java @@ -1,9 +1,9 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.api.integration.configserver; -import ai.vespa.http.DomainName; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ClusterSpec; +import com.yahoo.config.provision.HostName; import java.util.Objects; import java.util.Optional; @@ -18,11 +18,11 @@ public class LoadBalancer { private final String id; private final ApplicationId application; private final ClusterSpec.Id cluster; - private final Optional<DomainName> hostname; + private final Optional<HostName> hostname; private final State state; private final Optional<String> dnsZone; - public LoadBalancer(String id, ApplicationId application, ClusterSpec.Id cluster, Optional<DomainName> hostname, State state, + public LoadBalancer(String id, ApplicationId application, ClusterSpec.Id cluster, Optional<HostName> hostname, State state, Optional<String> dnsZone) { this.id = Objects.requireNonNull(id, "id must be non-null"); this.application = Objects.requireNonNull(application, "application must be non-null"); @@ -44,7 +44,7 @@ public class LoadBalancer { return cluster; } - public Optional<DomainName> hostname() { + public Optional<HostName> hostname() { return hostname; } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java index c5d3fd1374f..d82b9c97187 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/configserver/Node.java @@ -530,7 +530,7 @@ public class Node { } public Builder hostname(String hostname) { - return hostname(HostName.of(hostname)); + return hostname(HostName.from(hostname)); } public Builder hostname(HostName hostname) { @@ -539,7 +539,7 @@ public class Node { } public Builder parentHostname(String parentHostname) { - return parentHostname(HostName.of(parentHostname)); + return parentHostname(HostName.from(parentHostname)); } public Builder parentHostname(HostName parentHostname) { diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/TesterCloud.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/TesterCloud.java index 9d6fe07e91c..0f410ede864 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/TesterCloud.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/deployment/TesterCloud.java @@ -1,11 +1,10 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.api.integration.deployment; -import ai.vespa.http.DomainName; +import com.yahoo.config.provision.HostName; import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId; import com.yahoo.vespa.hosted.controller.api.integration.LogEntry; -import java.net.InetAddress; import java.net.URI; import java.util.List; import java.util.Optional; @@ -33,10 +32,10 @@ public interface TesterCloud { boolean testerReady(DeploymentId deploymentId); /** Returns the IP address of the given host name, if any. */ - Optional<InetAddress> resolveHostName(DomainName hostname); + Optional<String> resolveHostName(HostName hostname); /** Returns the host name of the given CNAME, if any. */ - Optional<DomainName> resolveCname(DomainName hostName); + Optional<HostName> resolveCname(HostName hostName); /** Returns the test report as JSON if available */ Optional<TestReport> getTestReport(DeploymentId deploymentId); diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/AliasTarget.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/AliasTarget.java index 04e264651a6..eeac395e8e1 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/AliasTarget.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/AliasTarget.java @@ -1,7 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.api.integration.dns; -import ai.vespa.http.DomainName; +import com.yahoo.config.provision.HostName; import java.util.Objects; @@ -12,11 +12,11 @@ import java.util.Objects; */ public abstract class AliasTarget { - private final DomainName name; + private final HostName name; private final String dnsZone; private final String id; - public AliasTarget(DomainName name, String dnsZone, String id) { + public AliasTarget(HostName name, String dnsZone, String id) { this.name = Objects.requireNonNull(name, "name must be non-null"); this.dnsZone = Objects.requireNonNull(dnsZone, "dnsZone must be non-null"); this.id = Objects.requireNonNull(id, "id must be non-null"); @@ -28,7 +28,7 @@ public abstract class AliasTarget { } /** DNS name this points to */ - public final DomainName name() { + public final HostName name() { return name; } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/LatencyAliasTarget.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/LatencyAliasTarget.java index b8cd1e89cdc..170cad8cd5b 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/LatencyAliasTarget.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/LatencyAliasTarget.java @@ -1,7 +1,6 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.api.integration.dns; -import ai.vespa.http.DomainName; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.ZoneId; @@ -16,7 +15,7 @@ public class LatencyAliasTarget extends AliasTarget { private final ZoneId zone; - public LatencyAliasTarget(DomainName name, String dnsZone, ZoneId zone) { + public LatencyAliasTarget(HostName name, String dnsZone, ZoneId zone) { super(name, dnsZone, zone.value()); this.zone = Objects.requireNonNull(zone); } @@ -60,7 +59,7 @@ public class LatencyAliasTarget extends AliasTarget { if (!"latency".equals(parts[0])) { throw new IllegalArgumentException("Unexpected type '" + parts[0] + "'"); } - return new LatencyAliasTarget(HostName.of(parts[1]), parts[2], ZoneId.from(parts[3])); + return new LatencyAliasTarget(HostName.from(parts[1]), parts[2], ZoneId.from(parts[3])); } } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/WeightedAliasTarget.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/WeightedAliasTarget.java index e7a46de75bc..963cf74b948 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/WeightedAliasTarget.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/dns/WeightedAliasTarget.java @@ -1,7 +1,6 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.api.integration.dns; -import ai.vespa.http.DomainName; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.ZoneId; @@ -19,7 +18,7 @@ public class WeightedAliasTarget extends AliasTarget { private final long weight; - public WeightedAliasTarget(DomainName name, String dnsZone, ZoneId zone, long weight) { + public WeightedAliasTarget(HostName name, String dnsZone, ZoneId zone, long weight) { super(name, dnsZone, zone.value()); this.weight = weight; if (weight < 0) throw new IllegalArgumentException("Weight cannot be negative"); @@ -64,7 +63,7 @@ public class WeightedAliasTarget extends AliasTarget { if (!"weighted".equals(parts[0])) { throw new IllegalArgumentException("Unexpected type '" + parts[0] + "'"); } - return new WeightedAliasTarget(HostName.of(parts[1]), parts[2], ZoneId.from(parts[3]), + return new WeightedAliasTarget(HostName.from(parts[1]), parts[2], ZoneId.from(parts[3]), Long.parseLong(parts[4])); } diff --git a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockTesterCloud.java b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockTesterCloud.java index 63c2388b461..cf6b592b7a5 100644 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockTesterCloud.java +++ b/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/integration/stubs/MockTesterCloud.java @@ -1,7 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.api.integration.stubs; -import ai.vespa.http.DomainName; +import com.yahoo.config.provision.HostName; import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId; import com.yahoo.vespa.hosted.controller.api.integration.LogEntry; import com.yahoo.vespa.hosted.controller.api.integration.deployment.TestReport; @@ -10,9 +10,7 @@ import com.yahoo.vespa.hosted.controller.api.integration.dns.NameService; import com.yahoo.vespa.hosted.controller.api.integration.dns.Record; import com.yahoo.vespa.hosted.controller.api.integration.dns.RecordName; -import java.net.InetAddress; import java.net.URI; -import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; import java.util.Optional; @@ -59,20 +57,15 @@ public class MockTesterCloud implements TesterCloud { } @Override - public Optional<InetAddress> resolveHostName(DomainName hostname) { - try { - return Optional.of(InetAddress.getByAddress(new byte[]{ 1, 2, 3, 4 })); - } - catch (UnknownHostException e) { - throw new IllegalStateException("should not happen"); - } + public Optional<String> resolveHostName(HostName hostname) { + return Optional.of("1.2.3.4"); } @Override - public Optional<DomainName> resolveCname(DomainName hostName) { + public Optional<HostName> resolveCname(HostName hostName) { return nameService.findRecords(Record.Type.CNAME, RecordName.from(hostName.value())).stream() .findFirst() - .map(record -> DomainName.of(record.data().asString().substring(0, record.data().asString().length() - 1))); + .map(record -> HostName.from(record.data().asString().substring(0, record.data().asString().length() - 1))); } @Override diff --git a/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/integration/dns/AliasTargetTest.java b/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/integration/dns/AliasTargetTest.java index 35d2ad1ffca..ff0fd9e460f 100644 --- a/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/integration/dns/AliasTargetTest.java +++ b/controller-api/src/test/java/com/yahoo/vespa/hosted/controller/api/integration/dns/AliasTargetTest.java @@ -18,8 +18,8 @@ public class AliasTargetTest { @Test public void packing() { List<AliasTarget> tests = List.of( - new LatencyAliasTarget(HostName.of("foo.example.com"), "dns-zone-1", ZoneId.from("prod.us-north-1")), - new WeightedAliasTarget(HostName.of("bar.example.com"), "dns-zone-2", ZoneId.from("prod.us-north-2"), 50) + new LatencyAliasTarget(HostName.from("foo.example.com"), "dns-zone-1", ZoneId.from("prod.us-north-1")), + new WeightedAliasTarget(HostName.from("bar.example.com"), "dns-zone-2", ZoneId.from("prod.us-north-2"), 50) ); for (var target : tests) { AliasTarget unpacked = AliasTarget.unpack(target.pack()); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java index d9664fd0475..c35e8c5a7ac 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/Controller.java @@ -283,7 +283,7 @@ public class Controller extends AbstractComponent { /** Returns the hostname of this controller */ public com.yahoo.config.provision.HostName hostname() { - return com.yahoo.config.provision.HostName.of(hostnameSupplier.get()); + return com.yahoo.config.provision.HostName.from(hostnameSupplier.get()); } public SystemName system() { diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java index ae61c98cffb..beef090d214 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/deployment/InternalStepRunner.java @@ -1,7 +1,6 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.deployment; -import ai.vespa.http.DomainName; import com.yahoo.component.Version; import com.yahoo.config.application.api.DeploymentInstanceSpec; import com.yahoo.config.application.api.DeploymentSpec; @@ -24,6 +23,7 @@ import com.yahoo.security.X509CertificateBuilder; import com.yahoo.security.X509CertificateUtils; import com.yahoo.text.Text; import com.yahoo.vespa.flags.FetchVector; +import com.yahoo.vespa.flags.FlagSource; import com.yahoo.vespa.flags.Flags; import com.yahoo.vespa.hosted.controller.Application; import com.yahoo.vespa.hosted.controller.Controller; @@ -512,7 +512,7 @@ public class InternalStepRunner implements StepRunner { return false; } for (var endpoint : endpoints.get(zone)) { - DomainName endpointName = DomainName.of(endpoint.dnsName()); + HostName endpointName = HostName.from(endpoint.dnsName()); var ipAddress = controller.jobController().cloud().resolveHostName(endpointName); if (ipAddress.isEmpty()) { logger.log(INFO, "DNS lookup yielded no IP address for '" + endpointName + "'."); @@ -533,7 +533,7 @@ public class InternalStepRunner implements StepRunner { var loadBalancerAddress = controller.jobController().cloud().resolveHostName(policy.canonicalName()); if ( ! loadBalancerAddress.equals(ipAddress)) { logger.log(INFO, "IP address of CNAME '" + endpointName + "' (" + ipAddress.get() + ") and load balancer '" + - policy.canonicalName() + "' (" + loadBalancerAddress.orElse(null) + ") are not equal"); + policy.canonicalName() + "' (" + loadBalancerAddress.orElse("empty") + ") are not equal"); return false; } } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NodeVersionSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NodeVersionSerializer.java index 0f1f531d589..10ec9dce5f7 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NodeVersionSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/NodeVersionSerializer.java @@ -46,7 +46,7 @@ public class NodeVersionSerializer { public List<NodeVersion> nodeVersionsFromSlime(Inspector array, Version version) { List<NodeVersion> nodeVersions = new ArrayList<>(); array.traverse((ArrayTraverser) (i, entry) -> { - var hostname = HostName.of(entry.field(hostnameField).asString()); + var hostname = HostName.from(entry.field(hostnameField).asString()); var zone = ZoneId.from(entry.field(zoneField).asString()); var wantedVersion = Version.fromString(entry.field(wantedVersionField).asString()); var suspendedAt = SlimeUtils.optionalInstant(entry.field(suspendedAtField)); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java index 72c16ae0110..17337f823c0 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializer.java @@ -1,9 +1,9 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.persistence; -import ai.vespa.http.DomainName; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ClusterSpec; +import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Cursor; @@ -83,7 +83,7 @@ public class RoutingPolicySerializer { ClusterSpec.Id.from(inspect.field(clusterField).asString()), ZoneId.from(inspect.field(zoneField).asString())); policies.add(new RoutingPolicy(id, - DomainName.of(inspect.field(canonicalNameField).asString()), + HostName.from(inspect.field(canonicalNameField).asString()), SlimeUtils.optionalString(inspect.field(dnsZoneField)), instanceEndpoints, applicationEndpoints, diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java index dcc916cc5a3..924f7c0b0a5 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiHandler.java @@ -53,6 +53,7 @@ import com.yahoo.vespa.hosted.controller.api.application.v4.model.configserverbi import com.yahoo.vespa.hosted.controller.api.application.v4.model.configserverbindings.RestartAction; import com.yahoo.vespa.hosted.controller.api.application.v4.model.configserverbindings.ServiceInfo; import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId; +import com.yahoo.vespa.hosted.controller.api.identifiers.Hostname; import com.yahoo.vespa.hosted.controller.api.identifiers.TenantId; import com.yahoo.vespa.hosted.controller.api.integration.aws.TenantRoles; import com.yahoo.vespa.hosted.controller.api.integration.billing.Quota; @@ -2052,7 +2053,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { DeploymentId deploymentId = new DeploymentId(ApplicationId.from(tenantName, applicationName, instanceName), requireZone(environment, region)); RestartFilter restartFilter = new RestartFilter() - .withHostName(Optional.ofNullable(request.getProperty("hostname")).map(HostName::of)) + .withHostName(Optional.ofNullable(request.getProperty("hostname")).map(HostName::from)) .withClusterType(Optional.ofNullable(request.getProperty("clusterType")).map(ClusterSpec.Type::from)) .withClusterId(Optional.ofNullable(request.getProperty("clusterId")).map(ClusterSpec.Id::from)); @@ -2294,7 +2295,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { try { node = nodeRepository.getNode(zone, hostname); } catch (IllegalArgumentException e) { - throw new NotExistsException(hostname); + throw new NotExistsException(new Hostname(hostname)); } ApplicationId app = ApplicationId.from(tenant, application, instance); ApplicationId owner = node.owner().orElseThrow(() -> new IllegalArgumentException("Node has no owner")); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandler.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandler.java index c72d8ceb089..e1fc68974cc 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandler.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/restapi/changemanagement/ChangeManagementApiHandler.java @@ -280,7 +280,7 @@ public class ChangeManagementApiHandler extends AuditLoggingRequestHandler { private Optional<ZoneId> affectedZone(List<String> hosts) { NodeFilter affectedHosts = NodeFilter.all().hostnames(hosts.stream() - .map(HostName::of) + .map(HostName::from) .collect(Collectors.toSet())); for (var zone : getProdZones()) { var affectedHostsInZone = controller.serviceRegistry().configServer().nodeRepository().list(zone, affectedHosts); diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicies.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicies.java index 850a8cab123..b98ef717dd3 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicies.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicies.java @@ -1,9 +1,9 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.routing; -import ai.vespa.http.DomainName; import com.yahoo.config.application.api.DeploymentSpec; import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.RoutingMethod; import com.yahoo.config.provision.zone.ZoneId; import com.yahoo.vespa.curator.Lock; @@ -215,7 +215,7 @@ public class RoutingPolicies { } var weightedTarget = new WeightedAliasTarget(policy.canonicalName(), policy.dnsZone().get(), policy.id().zone(), weight); - endpoints.computeIfAbsent(regionEndpoint, (k) -> new RegionEndpoint(new LatencyAliasTarget(DomainName.of(regionEndpoint.dnsName()), + endpoints.computeIfAbsent(regionEndpoint, (k) -> new RegionEndpoint(new LatencyAliasTarget(HostName.from(regionEndpoint.dnsName()), policy.dnsZone().get(), policy.id().zone()))) .zoneTargets() diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicy.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicy.java index 1ccb3205816..34736c16a6b 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicy.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/routing/RoutingPolicy.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.hosted.controller.routing; -import ai.vespa.http.DomainName; import com.google.common.collect.ImmutableSortedSet; +import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.zone.RoutingMethod; import com.yahoo.text.Text; @@ -27,14 +27,14 @@ import java.util.Set; public class RoutingPolicy { private final RoutingPolicyId id; - private final DomainName canonicalName; + private final HostName canonicalName; private final Optional<String> dnsZone; private final Set<EndpointId> instanceEndpoints; private final Set<EndpointId> applicationEndpoints; private final Status status; /** DO NOT USE. Public for serialization purposes */ - public RoutingPolicy(RoutingPolicyId id, DomainName canonicalName, Optional<String> dnsZone, + public RoutingPolicy(RoutingPolicyId id, HostName canonicalName, Optional<String> dnsZone, Set<EndpointId> instanceEndpoints, Set<EndpointId> applicationEndpoints, Status status) { this.id = Objects.requireNonNull(id, "id must be non-null"); this.canonicalName = Objects.requireNonNull(canonicalName, "canonicalName must be non-null"); @@ -50,7 +50,7 @@ public class RoutingPolicy { } /** The canonical name for the load balancer this applies to (rhs of a CNAME or ALIAS record) */ - public DomainName canonicalName() { + public HostName canonicalName() { return canonicalName; } diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java index a2f0948193c..3fa440e694e 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/versions/VersionStatus.java @@ -197,7 +197,7 @@ public class VersionStatus { .add(controller.hostname()); } else { for (String host : controller.curator().cluster()) { - HostName hostname = HostName.of(host); + HostName hostname = HostName.from(host); versions.computeIfAbsent(controller.curator().readControllerVersion(hostname), (k) -> new ArrayList<>()) .add(hostname); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java index 816a7370bcd..5ababdd8250 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTest.java @@ -940,19 +940,19 @@ public class ControllerTest { // The weighted record for zone 2's region new Record(Record.Type.ALIAS, RecordName.from("application.tenant.us-east-3-w.vespa.oath.cloud"), - new WeightedAliasTarget(HostName.of("lb-0--tenant.application.default--prod.us-east-3"), + new WeightedAliasTarget(HostName.from("lb-0--tenant:application:default--prod.us-east-3"), "dns-zone-1", ZoneId.from("prod.us-east-3"), 1).pack()), // The 'east' global endpoint, pointing to the weighted record for zone 2's region new Record(Record.Type.ALIAS, RecordName.from("east.application.tenant.global.vespa.oath.cloud"), - new LatencyAliasTarget(HostName.of("application.tenant.us-east-3-w.vespa.oath.cloud"), + new LatencyAliasTarget(HostName.from("application.tenant.us-east-3-w.vespa.oath.cloud"), "dns-zone-1", ZoneId.from("prod.us-east-3")).pack()), // The zone-scoped endpoint pointing to zone 2 with exclusive routing new Record(Record.Type.CNAME, RecordName.from("application.tenant.us-east-3.vespa.oath.cloud"), - RecordData.from("lb-0--tenant.application.default--prod.us-east-3."))); + RecordData.from("lb-0--tenant:application:default--prod.us-east-3."))); assertEquals(expectedRecords, List.copyOf(tester.controllerTester().nameService().records())); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java index b39e59d4420..75c33952754 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/ControllerTester.java @@ -239,7 +239,7 @@ public final class ControllerTester { /** Upgrade controller to given version */ public void upgradeController(Version version, String commitSha, Instant commitDate) { for (var hostname : controller().curator().cluster()) { - upgradeController(HostName.of(hostname), version, commitSha, commitDate); + upgradeController(HostName.from(hostname), version, commitSha, commitDate); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java index 896f5355129..86c21839c96 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/deployment/DeploymentContext.java @@ -247,7 +247,7 @@ public class DeploymentContext { var clusterId = "default-inactive"; var id = new RoutingPolicyId(instanceId, ClusterSpec.Id.from(clusterId), zone); var policies = new LinkedHashMap<>(tester.controller().routing().policies().read(instanceId).asMap()); - policies.put(id, new RoutingPolicy(id, HostName.of("lb-host"), + policies.put(id, new RoutingPolicy(id, HostName.from("lb-host"), Optional.empty(), Set.of(EndpointId.of("default")), Set.of(), diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueueTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueueTest.java index b5fd3d750ef..44bcbcfb4fa 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueueTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/dns/NameServiceQueueTest.java @@ -28,11 +28,11 @@ public class NameServiceQueueTest { var r1 = new Record(Record.Type.CNAME, RecordName.from("cname.vespa.oath.cloud"), RecordData.from("example.com")); var r2 = new Record(Record.Type.TXT, RecordName.from("txt.example.com"), RecordData.from("text")); var r3 = List.of(new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), - new LatencyAliasTarget(HostName.of("alias1"), + new LatencyAliasTarget(HostName.from("alias1"), "dns-zone-01", ZoneId.from("prod", "us-north-1")).pack()), new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), - new LatencyAliasTarget(HostName.of("alias2"), + new LatencyAliasTarget(HostName.from("alias2"), "dns-zone-02", ZoneId.from("prod", "us-north-2")).pack())); var req1 = new CreateRecord(r1); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java index fc87f3f8be6..e98ff71884d 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/ConfigServerMock.java @@ -159,7 +159,7 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer } public HostName hostFor(ApplicationId application, ZoneId zone) { - return HostName.of("host-" + application.toFullString() + "-" + zone.value()); + return HostName.from("host-" + application.serializedForm() + "-" + zone.value()); } public void bootstrap(List<ZoneId> zones, SystemApplication... applications) { @@ -176,8 +176,8 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer for (SystemApplication application : applications) { for (int i = 1; i <= 3; i++) { Node node = Node.builder() - .hostname(HostName.of("node-" + i + "-" + application.id().application() - .value() + "-" + zone.value())) + .hostname(HostName.from("node-" + i + "-" + application.id().application() + .value() + "-" + zone.value())) .state(Node.State.active) .type(application.nodeType()) .owner(application.id()) @@ -402,7 +402,7 @@ public class ConfigServerMock extends AbstractComponent implements ConfigServer putLoadBalancers(id.zoneId(), List.of(new LoadBalancer(UUID.randomUUID().toString(), id.applicationId(), cluster, - Optional.of(HostName.of("lb-0--" + id.applicationId().toFullString() + "--" + id.zoneId().toString())), + Optional.of(HostName.from("lb-0--" + id.applicationId().serializedForm() + "--" + id.zoneId().toString())), LoadBalancer.State.active, Optional.of("dns-zone-1")))); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java index 3f1ca3f9706..7b67db39350 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/integration/NodeRepositoryMock.java @@ -60,7 +60,7 @@ public class NodeRepositoryMock implements NodeRepository { @Override public void deleteNode(ZoneId zone, String hostname) { require(zone, hostname); - nodeRepository.get(zone).remove(HostName.of(hostname)); + nodeRepository.get(zone).remove(HostName.from(hostname)); } @Override @@ -246,8 +246,8 @@ public class NodeRepositoryMock implements NodeRepository { /** Add a fixed set of nodes to given zone */ public void addFixedNodes(ZoneId zone) { var nodeA = Node.builder() - .hostname(HostName.of("hostA")) - .parentHostname(HostName.of("parentHostA")) + .hostname(HostName.from("hostA")) + .parentHostname(HostName.from("parentHostA")) .state(Node.State.active) .type(NodeType.tenant) .owner(ApplicationId.from("tenant1", "app1", "default")) @@ -262,8 +262,8 @@ public class NodeRepositoryMock implements NodeRepository { .exclusiveTo(ApplicationId.from("t1", "a1", "i1")) .build(); var nodeB = Node.builder() - .hostname(HostName.of("hostB")) - .parentHostname(HostName.of("parentHostB")) + .hostname(HostName.from("hostB")) + .parentHostname(HostName.from("parentHostB")) .state(Node.State.active) .type(NodeType.tenant) .owner(ApplicationId.from("tenant2", "app2", "default")) @@ -319,7 +319,7 @@ public class NodeRepositoryMock implements NodeRepository { } private Node require(ZoneId zone, String hostname) { - return require(zone, HostName.of(hostname)); + return require(zone, HostName.from(hostname)); } private Node require(ZoneId zone, HostName hostname) { @@ -329,7 +329,7 @@ public class NodeRepositoryMock implements NodeRepository { } private void patchNodes(ZoneId zone, String hostname, UnaryOperator<Node> patcher) { - patchNodes(zone, Optional.of(HostName.of(hostname)), patcher); + patchNodes(zone, Optional.of(HostName.from(hostname)), patcher); } private void patchNodes(DeploymentId deployment, Optional<HostName> hostname, UnaryOperator<Node> patcher) { diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudEventTrackerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudEventTrackerTest.java index 6ccd307f0d9..8daedc05e96 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudEventTrackerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/CloudEventTrackerTest.java @@ -122,7 +122,7 @@ public class CloudEventTrackerTest { private Node createNode(String hostname, NodeType nodeType) { return Node.builder() - .hostname(HostName.of(hostname)) + .hostname(HostName.from(hostname)) .type(nodeType) .build(); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/HostInfoUpdaterTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/HostInfoUpdaterTest.java index 890f0b41098..a06e15de3c7 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/HostInfoUpdaterTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/HostInfoUpdaterTest.java @@ -84,10 +84,10 @@ public class HostInfoUpdaterTest { // Updates node registered under a different hostname ZoneId zone = tester.zoneRegistry().zones().controllerUpgraded().all().ids().get(0); String hostnameSuffix = ".prod." + zone.value(); - Node configNode = Node.builder().hostname(HostName.of("cfg3" + hostnameSuffix)) + Node configNode = Node.builder().hostname(HostName.from("cfg3" + hostnameSuffix)) .type(NodeType.config) .build(); - Node configHost = Node.builder().hostname(HostName.of("cfghost3" + hostnameSuffix)) + Node configHost = Node.builder().hostname(HostName.from("cfghost3" + hostnameSuffix)) .type(NodeType.confighost) .build(); tester.serviceRegistry().configServer().nodeRepository().putNodes(zone, List.of(configNode, configHost)); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java index 4d3f94eaa3d..6109890bae3 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceMeterMaintainerTest.java @@ -135,8 +135,8 @@ public class ResourceMeterMaintainerTest { Node.State.parked, Node.State.active) .map(state -> Node.builder() - .hostname(HostName.of("host" + state)) - .parentHostname(HostName.of("parenthost" + state)) + .hostname(HostName.from("host" + state)) + .parentHostname(HostName.from("parenthost" + state)) .state(state) .type(NodeType.tenant) .owner(ApplicationId.from("tenant1", "app1", "default")) diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainerTest.java index 1a6976034c5..f58911a6114 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/ResourceTagMaintainerTest.java @@ -36,8 +36,8 @@ public class ResourceTagMaintainerTest { resourceTagMaintainer.maintain(); assertEquals(2, mockResourceTagger.getValues().size()); Map<HostName, ApplicationId> applicationForHost = mockResourceTagger.getValues().get(ZoneId.from("prod.region-2")); - assertEquals(ApplicationId.from("t1", "a1", "i1"), applicationForHost.get(HostName.of("parentHostA.prod.region-2"))); - assertEquals(SHARED_HOST_APPLICATION, applicationForHost.get(HostName.of("parentHostB.prod.region-2"))); + assertEquals(ApplicationId.from("t1", "a1", "i1"), applicationForHost.get(HostName.from("parentHostA.prod.region-2"))); + assertEquals(SHARED_HOST_APPLICATION, applicationForHost.get(HostName.from("parentHostB.prod.region-2"))); } private void setUpZones() { @@ -51,19 +51,19 @@ public class ResourceTagMaintainerTest { public void setNodes(ZoneId zone) { var hostA = Node.builder() - .hostname(HostName.of("parentHostA." + zone.value())) + .hostname(HostName.from("parentHostA." + zone.value())) .type(NodeType.host) .owner(ApplicationId.from(SystemApplication.TENANT.value(), "tenant-host", "default")) .exclusiveTo(ApplicationId.from("t1", "a1", "i1")) .build(); var nodeA = Node.builder() - .hostname(HostName.of("hostA." + zone.value())) + .hostname(HostName.from("hostA." + zone.value())) .type(NodeType.tenant) - .parentHostname(HostName.of("parentHostA." + zone.value())) + .parentHostname(HostName.from("parentHostA." + zone.value())) .owner(ApplicationId.from("tenant1", "app1", "default")) .build(); var hostB = Node.builder() - .hostname(HostName.of("parentHostB." + zone.value())) + .hostname(HostName.from("parentHostB." + zone.value())) .type(NodeType.host) .owner(ApplicationId.from(SystemApplication.TENANT.value(), "tenant-host", "default")) .build(); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemRoutingPolicyMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemRoutingPolicyMaintainerTest.java index 8b2bfe8ee95..0dbe31d921b 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemRoutingPolicyMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/SystemRoutingPolicyMaintainerTest.java @@ -35,7 +35,7 @@ public class SystemRoutingPolicyMaintainerTest { tester.configServer().putLoadBalancers(zone, List.of(new LoadBalancer("lb1", SystemApplication.configServer.id(), ClusterSpec.Id.from("config"), - Optional.of(HostName.of("lb1.example.com")), + Optional.of(HostName.from("lb1.example.com")), LoadBalancer.State.active, Optional.of("dns-zone-1")))); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/VcmrMaintainerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/VcmrMaintainerTest.java index e7a6c3ea3c3..7f369d21d3a 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/VcmrMaintainerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/VcmrMaintainerTest.java @@ -37,9 +37,9 @@ public class VcmrMaintainerTest { private NodeRepositoryMock nodeRepo; private final ZoneId zoneId = ZoneId.from("prod.us-east-3"); private final ZoneId zone2 = ZoneId.from("prod.us-west-1"); - private final HostName host1 = HostName.of("host1"); - private final HostName host2 = HostName.of("host2"); - private final HostName host3 = HostName.of("host3"); + private final HostName host1 = HostName.from("host1"); + private final HostName host2 = HostName.from("host2"); + private final HostName host3 = HostName.from("host3"); private final String changeRequestId = "id123"; @Before diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializerTest.java index 5ecc22ffc5e..4ef09bbfce0 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/NameServiceQueueSerializerTest.java @@ -32,11 +32,11 @@ public class NameServiceQueueSerializerTest { new CreateRecord(record1), new CreateRecords(List.of(record2)), new CreateRecords(List.of(new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), - new LatencyAliasTarget(HostName.of("alias1"), + new LatencyAliasTarget(HostName.from("alias1"), "dns-zone-01", ZoneId.from("prod", "us-north-1")).pack()), new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), - new LatencyAliasTarget(HostName.of("alias2"), + new LatencyAliasTarget(HostName.from("alias2"), "dns-zone-02", ZoneId.from("prod", "us-north-2")).pack())) ), diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializerTest.java index d50c071d98e..482303a0e49 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/OsVersionStatusSerializerTest.java @@ -30,12 +30,12 @@ public class OsVersionStatusSerializerTest { Map<OsVersion, List<NodeVersion>> versions = new LinkedHashMap<>(); versions.put(new OsVersion(version1, CloudName.defaultName()), List.of( - new NodeVersion(HostName.of("node1"), ZoneId.from("prod", "us-west"), version1, version2, Optional.of(Instant.ofEpochMilli(11))), - new NodeVersion(HostName.of("node2"), ZoneId.from("prod", "us-east"), version1, version2, Optional.of(Instant.ofEpochMilli(22))) + new NodeVersion(HostName.from("node1"), ZoneId.from("prod", "us-west"), version1, version2, Optional.of(Instant.ofEpochMilli(11))), + new NodeVersion(HostName.from("node2"), ZoneId.from("prod", "us-east"), version1, version2, Optional.of(Instant.ofEpochMilli(22))) )); versions.put(new OsVersion(version2, CloudName.defaultName()), List.of( - new NodeVersion(HostName.of("node3"), ZoneId.from("prod", "us-west"), version2, version2, Optional.of(Instant.ofEpochMilli(33))), - new NodeVersion(HostName.of("node4"), ZoneId.from("prod", "us-east"), version2, version2, Optional.of(Instant.ofEpochMilli(44))) + new NodeVersion(HostName.from("node3"), ZoneId.from("prod", "us-west"), version2, version2, Optional.of(Instant.ofEpochMilli(33))), + new NodeVersion(HostName.from("node4"), ZoneId.from("prod", "us-east"), version2, version2, Optional.of(Instant.ofEpochMilli(44))) )); OsVersionStatusSerializer serializer = new OsVersionStatusSerializer(new OsVersionSerializer(), new NodeVersionSerializer()); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java index 2e8ba84d4ff..422188420bd 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/RoutingPolicySerializerTest.java @@ -38,13 +38,13 @@ public class RoutingPolicySerializerTest { ClusterSpec.Id.from("my-cluster2"), ZoneId.from("prod", "us-north-2")); var policies = List.of(new RoutingPolicy(id1, - HostName.of("long-and-ugly-name"), + HostName.from("long-and-ugly-name"), Optional.of("zone1"), instanceEndpoints, applicationEndpoints, new RoutingPolicy.Status(true, RoutingStatus.DEFAULT)), new RoutingPolicy(id2, - HostName.of("long-and-ugly-name-2"), + HostName.from("long-and-ugly-name-2"), Optional.empty(), instanceEndpoints, Set.of(), diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java index 73cfc6ad2f3..e202d4a687d 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/persistence/VersionStatusSerializerTest.java @@ -55,7 +55,7 @@ public class VersionStatusSerializerTest { private static List<NodeVersion> nodeVersions(Version version, Version wantedVersion, String... hostnames) { var nodeVersions = new ArrayList<NodeVersion>(); for (var hostname : hostnames) { - nodeVersions.add(new NodeVersion(HostName.of(hostname), ZoneId.from("prod", "us-north-1"), version, wantedVersion, Optional.empty())); + nodeVersions.add(new NodeVersion(HostName.from(hostname), ZoneId.from("prod", "us-north-1"), version, wantedVersion, Optional.empty())); } return nodeVersions; } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ProxyRequestTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ProxyRequestTest.java index 6b07fea0187..5827ef676d7 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ProxyRequestTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/proxy/ProxyRequestTest.java @@ -19,9 +19,9 @@ public class ProxyRequestTest { @Test public void testBadUri() { - assertEquals("Request path '/path' does not end with proxy path '/zone/v2/'", - assertThrows(IllegalArgumentException.class, - () -> testRequest("http://domain.tld/path", "/zone/v2/")).getMessage()); + assertThrows("Request path '/path' does not end with proxy path '/zone/v2/'", + IllegalArgumentException.class, + () -> testRequest("http://domain.tld/path", "/zone/v2/")); } @Test diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java index 52da2fadf0c..67b201bdc9d 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/ApplicationApiTest.java @@ -634,13 +634,13 @@ public class ApplicationApiTest extends ControllerContainerTest { "{\"enabled\":true,\"clusters\":[{\"name\":\"cluster\",\"pending\":[{\"type\":\"type\",\"requiredGeneration\":100}],\"ready\":[{\"type\":\"type\",\"readyAtMillis\":345,\"startedAtMillis\":456,\"endedAtMillis\":567,\"state\":\"failed\",\"message\":\"(#`д´)ノ\",\"progress\":0.1,\"speed\":1.0}]}]}"); // POST to request a service dump - tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/node/host-tenant1.application1.instance1-prod.us-central-1/service-dump", POST) + tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/node/host-tenant1:application1:instance1-prod.us-central-1/service-dump", POST) .userIdentity(HOSTED_VESPA_OPERATOR) .data("{\"configId\":\"default/container.1\",\"artifacts\":[\"jvm-dump\"],\"dumpOptions\":{\"duration\":30}}"), "{\"message\":\"Request created\"}"); // GET to get status of service dump - tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/node/host-tenant1.application1.instance1-prod.us-central-1/service-dump", GET) + tester.assertResponse(request("/application/v4/tenant/tenant1/application/application1/instance/instance1/environment/prod/region/us-central-1/node/host-tenant1:application1:instance1-prod.us-central-1/service-dump", GET) .userIdentity(HOSTED_VESPA_OPERATOR), "{\"createdMillis\":" + tester.controller().clock().millis() + ",\"configId\":\"default/container.1\"" + ",\"artifacts\":[\"jvm-dump\"],\"dumpOptions\":{\"duration\":30}}"); diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-nodes.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-nodes.json index 88a92bf7810..422c8c122fa 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-nodes.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/application-nodes.json @@ -1,7 +1,7 @@ { "nodes": [ { - "hostname": "host-tenant1.application1.instance1-prod.us-central-1", + "hostname": "host-tenant1:application1:instance1-prod.us-central-1", "state": "active", "orchestration": "unorchestrated", "version": "6.1", diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-us-east-1-log-first-part.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-us-east-1-log-first-part.json index bfaa4d5c813..3ef993c6589 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-us-east-1-log-first-part.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/dev-us-east-1-log-first-part.json @@ -28,7 +28,7 @@ { "at": 0, "type": "info", - "message": "host-tenant.application.default-dev.us-east-1: unorchestrated" + "message": "host-tenant:application:default-dev.us-east-1: unorchestrated" }, { "at": 0, diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-test-log.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-test-log.json index 7c1f7223e9e..6b1d48f4a08 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-test-log.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/staging-test-log.json @@ -18,7 +18,7 @@ { "at": 14503000, "type": "info", - "message": "host-tenant.application.default-t-staging.us-east-3: unorchestrated" + "message": "host-tenant:application:default-t-staging.us-east-3: unorchestrated" }, { "at": 14503000, @@ -33,7 +33,7 @@ { "at": 14503000, "type": "info", - "message": "host-tenant.application.default-t-staging.us-east-3: unorchestrated" + "message": "host-tenant:application:default-t-staging.us-east-3: unorchestrated" }, { "at": 14503000, @@ -48,7 +48,7 @@ { "at": 14503000, "type": "info", - "message": "host-tenant.application.default-t-staging.us-east-3: unorchestrated" + "message": "host-tenant:application:default-t-staging.us-east-3: unorchestrated" }, { "at": 14503000, @@ -63,7 +63,7 @@ { "at": 14503000, "type": "info", - "message": "host-tenant.application.default-t-staging.us-east-3: unorchestrated" + "message": "host-tenant:application:default-t-staging.us-east-3: unorchestrated" }, { "at": 14503000, @@ -102,7 +102,7 @@ { "at": 14503000, "type": "info", - "message": "host-tenant.application.default-staging.us-east-3: unorchestrated" + "message": "host-tenant:application:default-staging.us-east-3: unorchestrated" }, { "at": 14503000, @@ -127,7 +127,7 @@ { "at": 14503000, "type": "debug", - "message": "host-tenant.application.default-staging.us-east-3: unorchestrated" + "message": "host-tenant:application:default-staging.us-east-3: unorchestrated" }, { "at": 14503000, diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-details.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-details.json index e830f96bbba..377b8c6ed69 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-details.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-details.json @@ -23,7 +23,7 @@ { "at": "(ignore)", "type": "info", - "message": "host-tenant1.application1.instance1-t-test.us-east-1: unorchestrated" + "message": "host-tenant1:application1:instance1-t-test.us-east-1: unorchestrated" }, { "at": "(ignore)", @@ -38,7 +38,7 @@ { "at": "(ignore)", "type": "info", - "message": "host-tenant1.application1.instance1-t-test.us-east-1: unorchestrated" + "message": "host-tenant1:application1:instance1-t-test.us-east-1: unorchestrated" }, { "at": "(ignore)", @@ -53,7 +53,7 @@ { "at": "(ignore)", "type": "info", - "message": "host-tenant1.application1.instance1-t-test.us-east-1: unorchestrated" + "message": "host-tenant1:application1:instance1-t-test.us-east-1: unorchestrated" }, { "at": "(ignore)", @@ -68,7 +68,7 @@ { "at": "(ignore)", "type": "info", - "message": "host-tenant1.application1.instance1-t-test.us-east-1: unorchestrated" + "message": "host-tenant1:application1:instance1-t-test.us-east-1: unorchestrated" }, { "at": "(ignore)", @@ -83,7 +83,7 @@ { "at": "(ignore)", "type": "info", - "message": "host-tenant1.application1.instance1-t-test.us-east-1: unorchestrated" + "message": "host-tenant1:application1:instance1-t-test.us-east-1: unorchestrated" }, { "at": "(ignore)", @@ -122,7 +122,7 @@ { "at": "(ignore)", "type": "info", - "message": "host-tenant1.application1.instance1-test.us-east-1: unorchestrated" + "message": "host-tenant1:application1:instance1-test.us-east-1: unorchestrated" }, { "at": "(ignore)", @@ -147,7 +147,7 @@ { "at": "(ignore)", "type": "debug", - "message": "host-tenant1.application1.instance1-test.us-east-1: unorchestrated" + "message": "host-tenant1:application1:instance1-test.us-east-1: unorchestrated" }, { "at": "(ignore)", @@ -172,7 +172,7 @@ { "at": "(ignore)", "type": "debug", - "message": "host-tenant1.application1.instance1-test.us-east-1: unorchestrated" + "message": "host-tenant1:application1:instance1-test.us-east-1: unorchestrated" }, { "at": "(ignore)", @@ -197,7 +197,7 @@ { "at": "(ignore)", "type": "debug", - "message": "host-tenant1.application1.instance1-test.us-east-1: unorchestrated" + "message": "host-tenant1:application1:instance1-test.us-east-1: unorchestrated" }, { "at": "(ignore)", @@ -222,7 +222,7 @@ { "at": "(ignore)", "type": "debug", - "message": "host-tenant1.application1.instance1-test.us-east-1: unorchestrated" + "message": "host-tenant1:application1:instance1-test.us-east-1: unorchestrated" }, { "at": "(ignore)", @@ -247,7 +247,7 @@ { "at": "(ignore)", "type": "debug", - "message": "host-tenant1.application1.instance1-test.us-east-1: unorchestrated" + "message": "host-tenant1:application1:instance1-test.us-east-1: unorchestrated" }, { "at": "(ignore)", @@ -272,7 +272,7 @@ { "at": "(ignore)", "type": "debug", - "message": "host-tenant1.application1.instance1-test.us-east-1: unorchestrated" + "message": "host-tenant1:application1:instance1-test.us-east-1: unorchestrated" }, { "at": "(ignore)", diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-log.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-log.json index bfb5d8e6cbc..f675825c3b6 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-log.json +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/system-test-log.json @@ -18,7 +18,7 @@ { "at": 0, "type": "info", - "message": "host-tenant.application.default-t-test.us-east-1: unorchestrated" + "message": "host-tenant:application:default-t-test.us-east-1: unorchestrated" }, { "at": 0, @@ -33,7 +33,7 @@ { "at": 0, "type": "info", - "message": "host-tenant.application.default-t-test.us-east-1: unorchestrated" + "message": "host-tenant:application:default-t-test.us-east-1: unorchestrated" }, { "at": 0, @@ -48,7 +48,7 @@ { "at": 0, "type": "info", - "message": "host-tenant.application.default-t-test.us-east-1: unorchestrated" + "message": "host-tenant:application:default-t-test.us-east-1: unorchestrated" }, { "at": 0, @@ -63,7 +63,7 @@ { "at": 0, "type": "info", - "message": "host-tenant.application.default-t-test.us-east-1: unorchestrated" + "message": "host-tenant:application:default-t-test.us-east-1: unorchestrated" }, { "at": 0, @@ -78,7 +78,7 @@ { "at": 0, "type": "info", - "message": "host-tenant.application.default-t-test.us-east-1: unorchestrated" + "message": "host-tenant:application:default-t-test.us-east-1: unorchestrated" }, { "at": 0, @@ -117,7 +117,7 @@ { "at": 0, "type": "info", - "message": "host-tenant.application.default-test.us-east-1: unorchestrated" + "message": "host-tenant:application:default-test.us-east-1: unorchestrated" }, { "at": 0, @@ -142,7 +142,7 @@ { "at": 0, "type": "debug", - "message": "host-tenant.application.default-test.us-east-1: unorchestrated" + "message": "host-tenant:application:default-test.us-east-1: unorchestrated" }, { "at": 0, @@ -167,7 +167,7 @@ { "at": 0, "type": "debug", - "message": "host-tenant.application.default-test.us-east-1: unorchestrated" + "message": "host-tenant:application:default-test.us-east-1: unorchestrated" }, { "at": 0, @@ -192,7 +192,7 @@ { "at": 0, "type": "debug", - "message": "host-tenant.application.default-test.us-east-1: unorchestrated" + "message": "host-tenant:application:default-test.us-east-1: unorchestrated" }, { "at": 0, @@ -217,7 +217,7 @@ { "at": 0, "type": "debug", - "message": "host-tenant.application.default-test.us-east-1: unorchestrated" + "message": "host-tenant:application:default-test.us-east-1: unorchestrated" }, { "at": 0, @@ -242,7 +242,7 @@ { "at": 0, "type": "debug", - "message": "host-tenant.application.default-test.us-east-1: unorchestrated" + "message": "host-tenant:application:default-test.us-east-1: unorchestrated" }, { "at": 0, @@ -267,7 +267,7 @@ { "at": 0, "type": "debug", - "message": "host-tenant.application.default-test.us-east-1: unorchestrated" + "message": "host-tenant:application:default-test.us-east-1: unorchestrated" }, { "at": 0, diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java index 53da8c515a7..ca0db13b3d1 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/deployment/DeploymentApiTest.java @@ -97,8 +97,8 @@ public class DeploymentApiTest extends ControllerContainerTest { version.isControllerVersion(), version.isSystemVersion(), version.isReleased(), - List.of(new NodeVersion(HostName.of("config1.test"), ZoneId.defaultId(), version.versionNumber(), version.versionNumber(), Optional.empty()), - new NodeVersion(HostName.of("config2.test"), ZoneId.defaultId(), version.versionNumber(), version.versionNumber(), Optional.empty())), + List.of(new NodeVersion(HostName.from("config1.test"), ZoneId.defaultId(), version.versionNumber(), version.versionNumber(), Optional.empty()), + new NodeVersion(HostName.from("config2.test"), ZoneId.defaultId(), version.versionNumber(), version.versionNumber(), Optional.empty())), version.confidence() ); } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/RoutingPoliciesTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/RoutingPoliciesTest.java index 83b6f05c0b0..1919de33e8b 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/RoutingPoliciesTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/routing/RoutingPoliciesTest.java @@ -453,7 +453,7 @@ public class RoutingPoliciesTest { tester.controllerTester().configServer().removeLoadBalancers(context.instanceId(), zone1); // Load balancer for the same application is provisioned again, but with a different hostname - var newHostname = HostName.of("new-hostname"); + var newHostname = HostName.from("new-hostname"); var loadBalancer = new LoadBalancer("LB-0-Z-" + zone1.value(), context.instanceId(), ClusterSpec.Id.from("c0"), @@ -708,7 +708,7 @@ public class RoutingPoliciesTest { List<Record> records = tester.controllerTester().nameService().findRecords(Record.Type.CNAME, name); assertEquals(1, records.size()); - assertEquals(RecordData.from("lb-0--hosted-vespa.zone-config-servers.default--prod.us-west-1."), + assertEquals(RecordData.from("lb-0--hosted-vespa:zone-config-servers:default--prod.us-west-1."), records.get(0).data()); } @@ -859,10 +859,10 @@ public class RoutingPoliciesTest { for (int i = 0; i < count; i++) { HostName lbHostname; if (shared) { - lbHostname = HostName.of("shared-lb--" + zone.value()); + lbHostname = HostName.from("shared-lb--" + zone.value()); } else { - lbHostname = HostName.of("lb-" + i + "--" + application.toFullString() + - "--" + zone.value()); + lbHostname = HostName.from("lb-" + i + "--" + application.serializedForm() + + "--" + zone.value()); } loadBalancers.add( new LoadBalancer("LB-" + i + "-Z-" + zone.value(), @@ -985,7 +985,7 @@ public class RoutingPoliciesTest { deploymentsByDnsName.forEach((dnsName, deployments) -> { Set<String> weightedTargets = deployments.stream() .map(d -> "weighted/lb-" + loadBalancerId + "--" + - d.applicationId().toFullString() + "--" + d.zoneId().value() + + d.applicationId().serializedForm() + "--" + d.zoneId().value() + "/dns-zone-1/" + d.zoneId().value() + "/" + deploymentWeights.get(d)) .collect(Collectors.toSet()); assertEquals(dnsName + " has expected targets", weightedTargets, aliasDataOf(dnsName)); @@ -1009,7 +1009,7 @@ public class RoutingPoliciesTest { zonesByRegionEndpoint.forEach((regionEndpoint, zonesInRegion) -> { Set<String> weightedTargets = zonesInRegion.stream() .map(z -> "weighted/lb-" + loadBalancerId + "--" + - instance.toFullString() + "--" + z.value() + + instance.serializedForm() + "--" + z.value() + "/dns-zone-1/" + z.value() + "/" + zoneWeights.get(z)) .collect(Collectors.toSet()); assertEquals("Region endpoint " + regionEndpoint + " points to load balancer", diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java index 7ba69438816..ec8d5c35049 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/versions/VersionStatusTest.java @@ -82,9 +82,9 @@ public class VersionStatusTest { @Test public void testControllerVersionIsVersionOfOldestController() { - HostName controller1 = HostName.of("controller-1"); - HostName controller2 = HostName.of("controller-2"); - HostName controller3 = HostName.of("controller-3"); + HostName controller1 = HostName.from("controller-1"); + HostName controller2 = HostName.from("controller-2"); + HostName controller3 = HostName.from("controller-3"); MockCuratorDb db = new MockCuratorDb(Stream.of(controller1, controller2, controller3) .map(hostName -> hostName.value() + ":2222") .collect(Collectors.joining(","))); @@ -491,9 +491,9 @@ public class VersionStatusTest { @Test public void testCommitDetailsPreservation() { - HostName controller1 = HostName.of("controller-1"); - HostName controller2 = HostName.of("controller-2"); - HostName controller3 = HostName.of("controller-3"); + HostName controller1 = HostName.from("controller-1"); + HostName controller2 = HostName.from("controller-2"); + HostName controller3 = HostName.from("controller-3"); MockCuratorDb db = new MockCuratorDb(Stream.of(controller1, controller2, controller3) .map(hostName -> hostName.value() + ":2222") .collect(Collectors.joining(","))); diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java index d884c608ead..2713ff45ae8 100644 --- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java +++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeagent/NodeAgentContext.java @@ -27,7 +27,7 @@ public interface NodeAgentContext extends TaskContext { /** @return hostname of the linux container this context applies to */ default HostName hostname() { - return HostName.of(node().hostname()); + return HostName.from(node().hostname()); } default NodeType nodeType() { diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integration/ContainerTester.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integration/ContainerTester.java index 415a8b6f438..fd93252f3b5 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integration/ContainerTester.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/integration/ContainerTester.java @@ -51,7 +51,7 @@ import static org.mockito.Mockito.when; public class ContainerTester implements AutoCloseable { private static final Logger log = Logger.getLogger(ContainerTester.class.getName()); - static final HostName HOST_HOSTNAME = HostName.of("host.test.yahoo.com"); + static final HostName HOST_HOSTNAME = HostName.from("host.test.yahoo.com"); private final Thread loopThread; private final Phaser phaser = new Phaser(1); diff --git a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java index 995712c6dda..5436f84f467 100644 --- a/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java +++ b/node-admin/src/test/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdaterTest.java @@ -47,7 +47,7 @@ public class NodeAdminStateUpdaterTest { private final NodeRepoMock nodeRepository = spy(new NodeRepoMock()); private final Orchestrator orchestrator = mock(Orchestrator.class); private final NodeAdmin nodeAdmin = mock(NodeAdmin.class); - private final HostName hostHostname = HostName.of("basehost1.test.yahoo.com"); + private final HostName hostHostname = HostName.from("basehost1.test.yahoo.com"); private final NodeAdminStateUpdater updater = spy(new NodeAdminStateUpdater( nodeAgentContextFactory, nodeRepository, orchestrator, nodeAdmin, hostHostname)); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerInstance.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerInstance.java index 1548038e19d..4c6a46f013e 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerInstance.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerInstance.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.hosted.provision.lb; -import ai.vespa.http.DomainName; import com.google.common.collect.ImmutableSortedSet; +import com.yahoo.config.provision.HostName; import java.util.Objects; import java.util.Optional; @@ -16,13 +16,13 @@ import java.util.Set; */ public class LoadBalancerInstance { - private final DomainName hostname; + private final HostName hostname; private final Optional<DnsZone> dnsZone; private final Set<Integer> ports; private final Set<String> networks; private final Set<Real> reals; - public LoadBalancerInstance(DomainName hostname, Optional<DnsZone> dnsZone, Set<Integer> ports, Set<String> networks, + public LoadBalancerInstance(HostName hostname, Optional<DnsZone> dnsZone, Set<Integer> ports, Set<String> networks, Set<Real> reals) { this.hostname = Objects.requireNonNull(hostname, "hostname must be non-null"); this.dnsZone = Objects.requireNonNull(dnsZone, "dnsZone must be non-null"); @@ -32,7 +32,7 @@ public class LoadBalancerInstance { } /** Fully-qualified domain name of this load balancer. This hostname can be used for query and feed */ - public DomainName hostname() { + public HostName hostname() { return hostname; } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceMock.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceMock.java index 7da28bff930..51f59bc3ea0 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceMock.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/LoadBalancerServiceMock.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.hosted.provision.lb; -import ai.vespa.http.DomainName; import com.google.common.collect.ImmutableSet; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ClusterSpec; +import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.NodeType; import java.util.Collections; @@ -56,7 +56,7 @@ public class LoadBalancerServiceMock implements LoadBalancerService { throw new IllegalArgumentException("Refusing to remove all reals from load balancer " + id); } var instance = new LoadBalancerInstance( - DomainName.of("lb-" + spec.application().toShortString() + "-" + spec.cluster().value()), + HostName.from("lb-" + spec.application().toShortString() + "-" + spec.cluster().value()), Optional.of(new DnsZone("zone-id-1")), Collections.singleton(4443), ImmutableSet.of("10.2.3.0/24", "10.4.5.0/24"), diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/Real.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/Real.java index fc8f665c8b4..b8ebf808ae7 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/Real.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/Real.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.hosted.provision.lb; -import ai.vespa.http.DomainName; import com.google.common.net.InetAddresses; +import com.yahoo.config.provision.HostName; import java.util.Objects; @@ -15,15 +15,15 @@ public class Real implements Comparable<Real> { public static final int defaultPort = 4443; - private final DomainName hostname; + private final HostName hostname; private final String ipAddress; private final int port; - public Real(DomainName hostname, String ipAddress) { + public Real(HostName hostname, String ipAddress) { this(hostname, ipAddress, defaultPort); } - public Real(DomainName hostname, String ipAddress, int port) { + public Real(HostName hostname, String ipAddress, int port) { this.hostname = hostname; this.ipAddress = requireIpAddress(ipAddress); if (port < 1 || port > 65535) { @@ -33,7 +33,7 @@ public class Real implements Comparable<Real> { } /** The hostname of this real */ - public DomainName hostname() { + public HostName hostname() { return hostname; } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerService.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerService.java index fa9db9cd800..1345dfb8e65 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerService.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerService.java @@ -1,9 +1,9 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.lb; -import ai.vespa.http.DomainName; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ClusterSpec; +import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.NodeType; import java.util.Objects; @@ -29,7 +29,7 @@ public class SharedLoadBalancerService implements LoadBalancerService { @Override public LoadBalancerInstance create(LoadBalancerSpec spec, boolean force) { - return new LoadBalancerInstance(DomainName.of(vipHostname), + return new LoadBalancerInstance(HostName.from(vipHostname), Optional.empty(), Set.of(4443), Set.of(), diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabase.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabase.java index 1e745b61eaa..659636de581 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabase.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/CuratorDatabase.java @@ -63,7 +63,7 @@ public class CuratorDatabase { return Arrays.stream(curator.zooKeeperEnsembleConnectionSpec().split(",")) .filter(hostAndPort -> !hostAndPort.isEmpty()) .map(hostAndPort -> hostAndPort.split(":")[0]) - .map(HostName::of) + .map(HostName::from) .collect(Collectors.toList()); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializer.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializer.java index d953ab5b543..c361c9183d2 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializer.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializer.java @@ -1,7 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.provision.persistence; -import ai.vespa.http.DomainName; +import com.yahoo.config.provision.HostName; import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.Cursor; import com.yahoo.slime.Inspector; @@ -78,7 +78,7 @@ public class LoadBalancerSerializer { Set<Real> reals = new LinkedHashSet<>(); object.field(realsField).traverse((ArrayTraverser) (i, realObject) -> { - reals.add(new Real(DomainName.of(realObject.field(hostnameField).asString()), + reals.add(new Real(HostName.from(realObject.field(hostnameField).asString()), realObject.field(ipAddressField).asString(), (int) realObject.field(portField).asLong())); @@ -90,7 +90,7 @@ public class LoadBalancerSerializer { Set<String> networks = new LinkedHashSet<>(); object.field(networksField).traverse((ArrayTraverser) (i, network) -> networks.add(network.asString())); - Optional<DomainName> hostname = optionalString(object.field(hostnameField), Function.identity()).filter(s -> !s.isEmpty()).map(DomainName::of); + Optional<HostName> hostname = optionalString(object.field(hostnameField), Function.identity()).filter(s -> !s.isEmpty()).map(HostName::from); Optional<DnsZone> dnsZone = optionalString(object.field(dnsZoneField), DnsZone::new); Optional<LoadBalancerInstance> instance = hostname.map(h -> new LoadBalancerInstance(h, dnsZone, ports, networks, reals)); diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImpl.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImpl.java index 9a53370faf5..b90851dd639 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImpl.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImpl.java @@ -116,7 +116,7 @@ public class InfraDeployerImpl implements InfraDeployer { duperModel.infraApplicationActivated( application.getApplicationId(), - hostSpecs.stream().map(HostSpec::hostname).map(HostName::of).collect(Collectors.toList())); + hostSpecs.stream().map(HostSpec::hostname).map(HostName::from).collect(Collectors.toList())); logger.log(Level.FINE, () -> generateActivationLogMessage(hostSpecs, application.getApplicationId())); } diff --git a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java index f76968d67fd..04f084dd079 100644 --- a/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java +++ b/node-repository/src/main/java/com/yahoo/vespa/hosted/provision/provisioning/LoadBalancerProvisioner.java @@ -254,7 +254,7 @@ public class LoadBalancerProvisioner { Set<Real> reals = new LinkedHashSet<>(); for (var node : nodes) { for (var ip : reachableIpAddresses(node)) { - reals.add(new Real(HostName.of(node.hostname()), ip)); + reals.add(new Real(HostName.from(node.hostname()), ip)); } } return reals; diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerServiceTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerServiceTest.java index d54b41bfcdd..4975e670e86 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerServiceTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerServiceTest.java @@ -20,15 +20,15 @@ public class SharedLoadBalancerServiceTest { private final ApplicationId applicationId = ApplicationId.from("tenant1", "application1", "default"); private final ClusterSpec.Id clusterId = ClusterSpec.Id.from("qrs1"); private final Set<Real> reals = Set.of( - new Real(HostName.of("some.nice.host"), "10.23.56.102"), - new Real(HostName.of("some.awful.host"), "10.23.56.103") + new Real(HostName.from("some.nice.host"), "10.23.56.102"), + new Real(HostName.from("some.awful.host"), "10.23.56.103") ); @Test public void test_create_lb() { var lb = loadBalancerService.create(new LoadBalancerSpec(applicationId, clusterId, reals), false); - assertEquals(HostName.of("vip.example.com"), lb.hostname()); + assertEquals(HostName.from("vip.example.com"), lb.hostname()); assertEquals(Optional.empty(), lb.dnsZone()); assertEquals(Set.of(), lb.networks()); assertEquals(Set.of(4443), lb.ports()); diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializerTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializerTest.java index 1eecb442dc0..38724175c90 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializerTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/persistence/LoadBalancerSerializerTest.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.hosted.provision.persistence; -import ai.vespa.http.DomainName; import com.google.common.collect.ImmutableSet; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.ClusterSpec; +import com.yahoo.config.provision.HostName; import com.yahoo.vespa.hosted.provision.lb.DnsZone; import com.yahoo.vespa.hosted.provision.lb.LoadBalancer; import com.yahoo.vespa.hosted.provision.lb.LoadBalancerId; @@ -31,14 +31,14 @@ public class LoadBalancerSerializerTest { "default"), ClusterSpec.Id.from("qrs")), Optional.of(new LoadBalancerInstance( - DomainName.of("lb-host"), + HostName.from("lb-host"), Optional.of(new DnsZone("zone-id-1")), ImmutableSet.of(4080, 4443), ImmutableSet.of("10.2.3.4/24"), - ImmutableSet.of(new Real(DomainName.of("real-1"), + ImmutableSet.of(new Real(HostName.from("real-1"), "127.0.0.1", 4080), - new Real(DomainName.of("real-2"), + new Real(HostName.from("real-2"), "127.0.0.2", 4080)))), LoadBalancer.State.active, diff --git a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java index 4f2360590c4..224ff51ff40 100644 --- a/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java +++ b/node-repository/src/test/java/com/yahoo/vespa/hosted/provision/provisioning/InfraDeployerImplTest.java @@ -14,6 +14,7 @@ import com.yahoo.vespa.flags.InMemoryFlagSource; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.NodeRepository; import com.yahoo.vespa.hosted.provision.NodeRepositoryTester; +import com.yahoo.vespa.hosted.provision.autoscale.MemoryMetricsDb; import com.yahoo.vespa.hosted.provision.maintenance.InfrastructureVersions; import com.yahoo.vespa.hosted.provision.node.Agent; import com.yahoo.vespa.hosted.provision.node.Allocation; @@ -136,7 +137,7 @@ public class InfraDeployerImplTest { @SuppressWarnings("unchecked") private void verifyActivated(String... hostnames) { verify(duperModelInfraApi).infraApplicationActivated( - eq(application.getApplicationId()), eq(Stream.of(hostnames).map(HostName::of).collect(Collectors.toList()))); + eq(application.getApplicationId()), eq(Stream.of(hostnames).map(HostName::from).collect(Collectors.toList()))); ArgumentMatcher<ApplicationTransaction> transactionMatcher = t -> { assertEquals(application.getApplicationId(), t.application()); return true; 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 08058ef7b04..b1ee156f8e8 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 @@ -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.hosted.provision.provisioning; -import ai.vespa.http.DomainName; import com.google.common.collect.Iterators; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Capacity; import com.yahoo.config.provision.ClusterResources; import com.yahoo.config.provision.ClusterSpec; +import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.HostSpec; import com.yahoo.config.provision.NodeResources; import com.yahoo.config.provision.NodeType; @@ -91,7 +91,7 @@ public class LoadBalancerProvisionerTest { assertEquals(2, loadBalancer.instance().get().reals().size()); assertTrue("Failed node is removed", loadBalancer.instance().get().reals().stream() .map(Real::hostname) - .map(DomainName::value) + .map(HostName::value) .noneMatch(hostname -> hostname.equals(toFail.hostname()))); assertEquals(containers.get().get(0).hostname(), get(loadBalancer.instance().get().reals(), 0).hostname().value()); assertEquals(containers.get().get(1).hostname(), get(loadBalancer.instance().get().reals(), 1).hostname().value()); diff --git a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorTest.java b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorTest.java index 29d6463a7d7..a88e6766050 100644 --- a/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorTest.java +++ b/orchestrator/src/test/java/com/yahoo/vespa/orchestrator/OrchestratorTest.java @@ -86,9 +86,9 @@ public class OrchestratorTest { // There is one config server application with 3 nodes ApplicationId applicationId = new ConfigServerApplication().getApplicationId(); - var cfg1 = com.yahoo.config.provision.HostName.of("cfg1"); - var cfg2 = com.yahoo.config.provision.HostName.of("cfg2"); - var cfg3 = com.yahoo.config.provision.HostName.of("cfg3"); + var cfg1 = com.yahoo.config.provision.HostName.from("cfg1"); + var cfg2 = com.yahoo.config.provision.HostName.from("cfg2"); + var cfg3 = com.yahoo.config.provision.HostName.from("cfg3"); duperModelManager.infraApplicationActivated(applicationId, List.of(cfg1, cfg2, cfg3)); duperModelManager.infraApplicationsIsNowComplete(); diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModel.java b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModel.java index 3a9c2b1f1e7..a5f124540e7 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModel.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/duper/DuperModel.java @@ -121,7 +121,7 @@ public class DuperModel { applicationInfo.getModel().getHosts().stream() .map(HostInfo::getHostname) - .map(HostName::of) + .map(HostName::from) .forEach(hostname -> { if (!removedHosts.remove(hostname)) { // hostname has been added diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthModel.java b/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthModel.java index 3391bbcf82a..2712b510040 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthModel.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/health/StateV1HealthModel.java @@ -45,7 +45,7 @@ public class StateV1HealthModel implements AutoCloseable { Map<ServiceId, HealthEndpoint> endpoints = new HashMap<>(); for (HostInfo hostInfo : application.getModel().getHosts()) { - HostName hostname = HostName.of(hostInfo.getHostname()); + HostName hostname = HostName.from(hostInfo.getHostname()); for (ServiceInfo serviceInfo : hostInfo.getServices()) { ServiceId serviceId = ApplicationInstanceGenerator.getServiceId(application, serviceInfo); for (PortInfo portInfo : serviceInfo.getPorts()) { diff --git a/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceMonitorImpl.java b/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceMonitorImpl.java index bc0db1500b8..6e3f407bb9c 100644 --- a/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceMonitorImpl.java +++ b/service-monitor/src/main/java/com/yahoo/vespa/service/model/ServiceMonitorImpl.java @@ -118,6 +118,6 @@ public class ServiceMonitorImpl implements ServiceMonitor, AntiServiceMonitor { /** The duper model uses HostName from config.provision. */ private static com.yahoo.config.provision.HostName toConfigProvisionHostName(HostName hostname) { - return com.yahoo.config.provision.HostName.of(hostname.s()); + return com.yahoo.config.provision.HostName.from(hostname.s()); } } diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelManagerTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelManagerTest.java index d02cad1c068..a3af44ec911 100644 --- a/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelManagerTest.java +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelManagerTest.java @@ -7,6 +7,8 @@ import com.yahoo.config.model.api.SuperModelListener; import com.yahoo.config.model.api.SuperModelProvider; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.HostName; +import com.yahoo.config.provision.SystemName; +import com.yahoo.vespa.flags.InMemoryFlagSource; import org.junit.Test; import org.mockito.ArgumentCaptor; @@ -64,7 +66,7 @@ public class DuperModelManagerTest { makeManager(false); ApplicationId id = proxyHostApplication.getApplicationId(); - List<HostName> proxyHostHosts = Stream.of("proxyhost1", "proxyhost2").map(HostName::of).collect(Collectors.toList()); + List<HostName> proxyHostHosts = Stream.of("proxyhost1", "proxyhost2").map(HostName::from).collect(Collectors.toList()); verify(duperModel, times(0)).add(any()); manager.infraApplicationActivated(id, proxyHostHosts); verify(duperModel, times(1)).add(any()); @@ -91,12 +93,12 @@ public class DuperModelManagerTest { } private void testEnabledConfigServerLikeInfraApplication(ApplicationId firstId, ApplicationId secondId) { - List<HostName> hostnames1 = Stream.of("node11", "node12").map(HostName::of).collect(Collectors.toList()); + List<HostName> hostnames1 = Stream.of("node11", "node12").map(HostName::from).collect(Collectors.toList()); manager.infraApplicationActivated(firstId, hostnames1); verify(duperModel, times(1)).add(any()); // Adding the second config server like application will be ignored - List<HostName> hostnames2 = Stream.of("node21", "node22").map(HostName::of).collect(Collectors.toList()); + List<HostName> hostnames2 = Stream.of("node21", "node22").map(HostName::from).collect(Collectors.toList()); assertThrows(IllegalArgumentException.class, () -> manager.infraApplicationActivated(secondId, hostnames2)); verify(duperModel, times(1)).add(any()); diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelTest.java index 69d3ef4d498..3fa9baa5d60 100644 --- a/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelTest.java +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/duper/DuperModelTest.java @@ -34,12 +34,12 @@ public class DuperModelTest { private final ApplicationId id1 = ApplicationId.fromSerializedForm("tenant:app1:default"); private final ApplicationInfo application1 = mock(ApplicationInfo.class); - private final HostName hostname1_1 = HostName.of("hostname1-1"); - private final HostName hostname1_2 = HostName.of("hostname1-2"); + private final HostName hostname1_1 = HostName.from("hostname1-1"); + private final HostName hostname1_2 = HostName.from("hostname1-2"); private final ApplicationId id2 = ApplicationId.fromSerializedForm("tenant:app2:default"); private final ApplicationInfo application2 = mock(ApplicationInfo.class); - private final HostName hostname2_1 = HostName.of("hostname2-1"); + private final HostName hostname2_1 = HostName.from("hostname2-1"); private final DuperModelListener listener1 = mock(DuperModelListener.class); @@ -129,7 +129,7 @@ public class DuperModelTest { addAndVerifyApplication1("host1"); addAndVerifyApplication1("host1", "host2"); addAndVerifyApplication1("host2", "host3"); - assertEquals(Optional.empty(), duperModel.getApplicationId(HostName.of("host1"))); + assertEquals(Optional.empty(), duperModel.getApplicationId(HostName.from("host1"))); duperModel.remove(id1); assertEquals(0, duperModel.numberOfApplications()); @@ -138,7 +138,7 @@ public class DuperModelTest { } private void addAndVerifyApplication1(String... hostnameStrings) { - HostName[] hostnameArray = Stream.of(hostnameStrings).map(HostName::of).toArray(HostName[]::new); + HostName[] hostnameArray = Stream.of(hostnameStrings).map(HostName::from).toArray(HostName[]::new); setUpApplication(id1, application1, hostnameArray); duperModel.add(application1); diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/health/ApplicationHealthMonitorTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/health/ApplicationHealthMonitorTest.java index d99e882985f..569ad899331 100644 --- a/service-monitor/src/test/java/com/yahoo/vespa/service/health/ApplicationHealthMonitorTest.java +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/health/ApplicationHealthMonitorTest.java @@ -87,7 +87,7 @@ public class ApplicationHealthMonitorTest { return new ServiceId(configServerApplication.getApplicationId(), configServerApplication.getClusterId(), configServerApplication.getServiceType(), - configServerApplication.configIdFor(HostName.of(hostname))); + configServerApplication.configIdFor(HostName.from(hostname))); } private ServiceStatus getStatus(ApplicationHealthMonitor monitor, String hostname) { @@ -95,7 +95,7 @@ public class ApplicationHealthMonitorTest { configServerApplication.getApplicationId(), configServerApplication.getClusterId(), configServerApplication.getServiceType(), - configServerApplication.configIdFor(HostName.of(hostname))) + configServerApplication.configIdFor(HostName.from(hostname))) .serviceStatus(); } }
\ No newline at end of file diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java index c77ff519abd..d191d914bd0 100644 --- a/service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/health/HealthMonitorManagerTest.java @@ -48,7 +48,7 @@ public class HealthMonitorManagerTest { public void infrastructureApplication() { ProxyHostApplication proxyHostApplication = new ProxyHostApplication(); when(duperModel.isSupportedInfraApplication(proxyHostApplication.getApplicationId())).thenReturn(true); - List<HostName> hostnames = Stream.of("proxyhost1", "proxyhost2").map(HostName::of).collect(Collectors.toList()); + List<HostName> hostnames = Stream.of("proxyhost1", "proxyhost2").map(HostName::from).collect(Collectors.toList()); ApplicationInfo proxyHostApplicationInfo = proxyHostApplication.makeApplicationInfo(hostnames); manager.applicationActivated(proxyHostApplicationInfo); @@ -77,7 +77,7 @@ public class HealthMonitorManagerTest { infraApplication.getApplicationId(), infraApplication.getClusterId(), infraApplication.getServiceType(), - infraApplication.configIdFor(HostName.of(hostname))).serviceStatus(); + infraApplication.configIdFor(HostName.from(hostname))).serviceStatus(); assertEquals(expected, actual); @@ -85,7 +85,7 @@ public class HealthMonitorManagerTest { infraApplication.getApplicationId(), infraApplication.getClusterId(), infraApplication.getServiceType(), - infraApplication.configIdFor(HostName.of(hostname))); + infraApplication.configIdFor(HostName.from(hostname))); } }
\ No newline at end of file diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthModelTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthModelTest.java index 8ae0e55fe41..4fdf6288bd8 100644 --- a/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthModelTest.java +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/health/StateV1HealthModelTest.java @@ -38,7 +38,7 @@ public class StateV1HealthModelTest { private final Duration requestTimeout = Duration.ofSeconds(2); private final Duration keepAlive = Duration.ofSeconds(3); private final ProxyHostApplication proxyHostApplication = new ProxyHostApplication(); - private final List<HostName> hostnames = Stream.of("host1", "host2").map(HostName::of).collect(Collectors.toList()); + private final List<HostName> hostnames = Stream.of("host1", "host2").map(HostName::from).collect(Collectors.toList()); private final ApplicationInfo proxyHostApplicationInfo = proxyHostApplication.makeApplicationInfo(hostnames); private final StateV1HealthModel model = new StateV1HealthModel(healthStaleness, requestTimeout, keepAlive, executor); diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/model/ApplicationInstanceGeneratorTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/model/ApplicationInstanceGeneratorTest.java index 8f87a7bad68..8ca46941366 100644 --- a/service-monitor/src/test/java/com/yahoo/vespa/service/model/ApplicationInstanceGeneratorTest.java +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/model/ApplicationInstanceGeneratorTest.java @@ -34,7 +34,7 @@ public class ApplicationInstanceGeneratorTest { when(statusProvider.getStatus(any(), any(), any(), any())).thenReturn(new ServiceStatusInfo(ServiceStatus.NOT_CHECKED)); Zone zone = mock(Zone.class); ApplicationInfo configServer = configServerApplication.makeApplicationInfo( - configServerList.stream().map(HostName::of).collect(Collectors.toList())); + configServerList.stream().map(HostName::from).collect(Collectors.toList())); ApplicationInstance applicationInstance = new ApplicationInstanceGenerator(configServer, zone) .makeApplicationInstance(statusProvider); diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/model/ServiceHostListenerAdapterTest.java b/service-monitor/src/test/java/com/yahoo/vespa/service/model/ServiceHostListenerAdapterTest.java index 97b6ff0c3e2..cfc24ecbaec 100644 --- a/service-monitor/src/test/java/com/yahoo/vespa/service/model/ServiceHostListenerAdapterTest.java +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/model/ServiceHostListenerAdapterTest.java @@ -100,7 +100,7 @@ public class ServiceHostListenerAdapterTest { } private Optional<ApplicationInfo> getDuperModelApplicationInfo(String hostname) { - return duperModel.getApplicationInfo(com.yahoo.config.provision.HostName.of(hostname)); + return duperModel.getApplicationInfo(com.yahoo.config.provision.HostName.from(hostname)); } private void removeAndVerify(ApplicationId id, boolean listenerInvoked) { diff --git a/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ConfigserverUtil.java b/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ConfigserverUtil.java index df489a8c336..40cc679b69b 100644 --- a/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ConfigserverUtil.java +++ b/service-monitor/src/test/java/com/yahoo/vespa/service/monitor/ConfigserverUtil.java @@ -37,7 +37,7 @@ public class ConfigserverUtil { String configServerHostname3) { return new ConfigServerApplication().makeApplicationInfo( Stream.of(configServerHostname1, configServerHostname2, configServerHostname3) - .map(HostName::of).collect(Collectors.toList())); + .map(HostName::from).collect(Collectors.toList())); } public static ApplicationInfo makeExampleConfigServer() { diff --git a/vespajlib/abi-spec.json b/vespajlib/abi-spec.json index 6044666ebf8..ae69564b671 100644 --- a/vespajlib/abi-spec.json +++ b/vespajlib/abi-spec.json @@ -350,13 +350,13 @@ "fields": [] }, "com.yahoo.net.HostName": { - "superClass": "java.lang.Object", + "superClass": "ai.vespa.validation.PatternedStringWrapper", "interfaces": [], "attributes": [ "public" ], "methods": [ - "public void <init>()", + "public static com.yahoo.net.HostName of(java.lang.String)", "public static synchronized java.lang.String getLocalhost()", "public static void setHostNameForTestingOnly(java.lang.String)" ], diff --git a/vespajlib/src/main/java/ai/vespa/http/DomainName.java b/vespajlib/src/main/java/ai/vespa/http/DomainName.java index 737f6b6d863..a566f5b95be 100644 --- a/vespajlib/src/main/java/ai/vespa/http/DomainName.java +++ b/vespajlib/src/main/java/ai/vespa/http/DomainName.java @@ -15,12 +15,12 @@ import static ai.vespa.validation.Validation.requireMatch; */ public class DomainName extends PatternedStringWrapper<DomainName> { - protected static final Pattern labelPattern = Pattern.compile("([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])"); - protected static final Pattern domainNamePattern = Pattern.compile("(" + labelPattern + "\\.)*" + labelPattern); + static final Pattern labelPattern = Pattern.compile("([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])"); + static final Pattern domainNamePattern = Pattern.compile("(" + labelPattern + "\\.)*" + labelPattern); public static final DomainName localhost = DomainName.of("localhost"); - protected DomainName(String value) { + private DomainName(String value) { super(requireLength(value, "domain name length", 1, 255), domainNamePattern, "domain name"); } diff --git a/vespajlib/src/main/java/ai/vespa/validation/StringWrapper.java b/vespajlib/src/main/java/ai/vespa/validation/StringWrapper.java index 12be0002f6f..0937627b57e 100644 --- a/vespajlib/src/main/java/ai/vespa/validation/StringWrapper.java +++ b/vespajlib/src/main/java/ai/vespa/validation/StringWrapper.java @@ -40,7 +40,7 @@ public abstract class StringWrapper<T extends StringWrapper<T>> implements Compa @Override public final boolean equals(Object o) { if (this == o) return true; - if ( ! (o instanceof StringWrapper<?>)) return false; + if (o == null || getClass() != o.getClass()) return false; return value.equals(((StringWrapper<?>) o).value); } diff --git a/vespajlib/src/main/java/com/yahoo/net/HostName.java b/vespajlib/src/main/java/com/yahoo/net/HostName.java index 7446771f57c..20f1008055e 100644 --- a/vespajlib/src/main/java/com/yahoo/net/HostName.java +++ b/vespajlib/src/main/java/com/yahoo/net/HostName.java @@ -1,18 +1,39 @@ +// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.net; +import ai.vespa.http.DomainName; +import ai.vespa.validation.PatternedStringWrapper; + import java.util.Optional; +import java.util.regex.Pattern; + +import static ai.vespa.validation.Validation.requireLength; /** - * This class has utilities for getting the hostname of the system running the JVM. + * Hostnames match {@link #hostNamePattern}, and are restricted to 64 characters in length. + * + * This class also has utilities for getting the hostname of the system running the JVM. * Detection of the hostname is now done before starting any Vespa * programs and provided in the environment variable VESPA_HOSTNAME; * if that variable isn't set a default of "localhost" is always returned. * * @author arnej + * @author jonmv */ -public class HostName { +public class HostName extends PatternedStringWrapper<HostName> { + + static final Pattern labelPattern = Pattern.compile("([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])"); + static final Pattern hostNamePattern = Pattern.compile("(" + labelPattern + "\\.)*" + labelPattern); - private static String preferredHostName = null; + private static HostName preferredHostName = null; + + private HostName(String value) { + super(requireLength(value, "hostname length", 1, 64), hostNamePattern, "hostname"); + } + + public static HostName of(String value) { + return new HostName(value); + } /** * Return a public and fully qualified hostname for localhost that @@ -24,19 +45,19 @@ public class HostName { if (preferredHostName == null) { preferredHostName = getPreferredHostName(); } - return preferredHostName; + return preferredHostName.value(); } - static private String getPreferredHostName() { + static private HostName getPreferredHostName() { Optional<String> vespaHostEnv = Optional.ofNullable(System.getenv("VESPA_HOSTNAME")); if (vespaHostEnv.isPresent() && ! vespaHostEnv.get().trim().isEmpty()) { - return vespaHostEnv.get().trim(); + return of(vespaHostEnv.get().trim()); } - return "localhost"; + return of("localhost"); } public static void setHostNameForTestingOnly(String hostName) { - preferredHostName = hostName; + preferredHostName = HostName.of(hostName); } } diff --git a/vespajlib/src/test/java/com/yahoo/net/HostNameTest.java b/vespajlib/src/test/java/com/yahoo/net/HostNameTest.java index 2548c3cea60..fa756b31616 100644 --- a/vespajlib/src/test/java/com/yahoo/net/HostNameTest.java +++ b/vespajlib/src/test/java/com/yahoo/net/HostNameTest.java @@ -1,14 +1,39 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.net; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; +/** + * @author jonmv + */ public class HostNameTest { @Test + void testNames() { + HostName.of("name-123.0.321-eman"); + HostName.of(("." + "a".repeat(32)).repeat(2).substring(1, 65)); + HostName.of("123"); + + assertThrows(IllegalArgumentException.class, () -> HostName.of("_")); + assertThrows(IllegalArgumentException.class, () -> HostName.of("-")); + assertThrows(IllegalArgumentException.class, () -> HostName.of(".")); + assertThrows(IllegalArgumentException.class, () -> HostName.of("-foo")); + assertThrows(IllegalArgumentException.class, () -> HostName.of("foo-")); + assertThrows(IllegalArgumentException.class, () -> HostName.of(".foo")); + assertThrows(IllegalArgumentException.class, () -> HostName.of("foo.")); + assertThrows(IllegalArgumentException.class, () -> HostName.of("foo..bar")); + assertThrows(IllegalArgumentException.class, () -> HostName.of("foo.-.bar")); + assertThrows(IllegalArgumentException.class, () -> HostName.of("foo/")); + assertThrows(IllegalArgumentException.class, () -> HostName.of("foo%")); + assertThrows(IllegalArgumentException.class, () -> HostName.of(("." + "a".repeat(32)).repeat(2).substring(1, 66))); + assertThrows(IllegalArgumentException.class, () -> HostName.of("a".repeat(64))); + } + + @Test void testHostnameIsFound() { assertFalse(HostName.getLocalhost().isEmpty()); } |