diff options
92 files changed, 287 insertions, 331 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 4bd9b2fc9b8..65c8a9df28e 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,6 +16,7 @@ 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 03e6fb51086..ea4c657af8c 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 1ad9f722eca..42e4978091d 100644 --- a/config-lib/src/test/java/com/yahoo/config/FileNodeTest.java +++ b/config-lib/src/test/java/com/yahoo/config/FileNodeTest.java @@ -23,9 +23,8 @@ public class FileNodeTest { assertEquals("foo.txt", n.value().value()); assertEquals("\"foo.txt\"", n.toString()); - assertThrows("path may not start with '..', but got: foo/../../boo", - IllegalArgumentException.class, - () -> new FileNode("foo/../../boo")); + assertEquals("path may not start with '..', but got: foo/../../boo", + assertThrows(IllegalArgumentException.class, () -> new FileNode("foo/../../boo")).getMessage()); } } 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 2240f647726..016c53b42e3 100644 --- a/config-lib/src/test/java/com/yahoo/config/PathNodeTest.java +++ b/config-lib/src/test/java/com/yahoo/config/PathNodeTest.java @@ -22,9 +22,8 @@ public class PathNodeTest { n = new PathNode(new FileReference("foo.txt")); assertEquals(new File("foo.txt").toPath(), n.value()); - assertThrows("path may not start with '..', but got: foo/../../boo", - IllegalArgumentException.class, - () -> new PathNode(new FileReference("foo/../../boo"))); + assertEquals("path may not start with '..', but got: foo/../../boo", + assertThrows(IllegalArgumentException.class, () -> new PathNode(new FileReference("foo/../../boo"))).getMessage()); } } 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 17690c6ecab..47519853ed0 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.from(configServerSpecs.stream() - .findFirst() - .map(ConfigServerSpec::getHostName) - .orElse("unknown") // Currently unable to test this, hence the unknown + () -> HostName.of(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 66cbfbd537f..70b9fc54882 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 c686a813c9f..1e0c554af81 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,13 +74,14 @@ public class IntermediateParserTestCase { @Test public void backwards_path_is_disallowed() { - 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")); + 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()); } 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 04b15af51f2..e55737da18d 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,47 +1,23 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.config.provision; -import java.util.Objects; +import ai.vespa.http.DomainName; + +import static ai.vespa.validation.Validation.requireLength; /** - * A host name + * Hostnames match {@link #domainNamePattern}, and are restricted to 64 characters in length. * - * @author mortent + * @author jonmv */ -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()); - } +public class HostName extends DomainName { - @Override - public String toString() { - return name; + private HostName(String value) { + super(requireLength(value, "hostname length", 1, 64)); } - @Override - public int compareTo(HostName that) { - return this.name.compareTo(that.name); + public static HostName of(String value) { + return new HostName(value); } } 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 new file mode 100644 index 00000000000..da01920cc57 --- /dev/null +++ b/config-provisioning/src/test/java/com/yahoo/config/provision/HostNameTest.java @@ -0,0 +1,35 @@ +// 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 fe9ab82637f..b59dbda3174 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 = HostName.from(configserverConfig.loadBalancerAddress()); + this.loadBalancerName = configserverConfig.loadBalancerAddress().isEmpty() ? null : HostName.of(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 55645d83b3c..1946a9bf76c 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 30d3dcffc30..2650b23a38e 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.from("myhostname"); + private static final HostName HOSTNAME = HostName.of("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 17b35a6343c..b0392c16e2e 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")); - assertThrows("path segments cannot be \"\", \".\", or \"..\", but got: '..'", - IllegalArgumentException.class, - () -> new Path(URI.create("/foo")).matches("/foo/bar/%2e%2e")); + assertEquals("path segments cannot be \"\", \".\", or \"..\", but got: '..'", + assertThrows(IllegalArgumentException.class, + () -> new Path(URI.create("/foo")).matches("/foo/bar/%2e%2e")).getMessage()); 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 77b8118784a..389cda605af 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 deleted file mode 100644 index fc46c92189d..00000000000 --- a/controller-api/src/main/java/com/yahoo/vespa/hosted/controller/api/identifiers/Hostname.java +++ /dev/null @@ -1,13 +0,0 @@ -// 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 ecd58bc292c..3ac289a06b1 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,7 +8,6 @@ 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 18be3a414a5..de40344c1c9 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,7 +6,6 @@ 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 015d7dce33b..6199c8c28b9 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<HostName> hostname; + private final Optional<DomainName> hostname; private final State state; private final Optional<String> dnsZone; - public LoadBalancer(String id, ApplicationId application, ClusterSpec.Id cluster, Optional<HostName> hostname, State state, + public LoadBalancer(String id, ApplicationId application, ClusterSpec.Id cluster, Optional<DomainName> 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<HostName> hostname() { + public Optional<DomainName> 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 d82b9c97187..c5d3fd1374f 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.from(hostname)); + return hostname(HostName.of(hostname)); } public Builder hostname(HostName hostname) { @@ -539,7 +539,7 @@ public class Node { } public Builder parentHostname(String parentHostname) { - return parentHostname(HostName.from(parentHostname)); + return parentHostname(HostName.of(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 0f410ede864..9d6fe07e91c 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,10 +1,11 @@ // 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 com.yahoo.config.provision.HostName; +import ai.vespa.http.DomainName; 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; @@ -32,10 +33,10 @@ public interface TesterCloud { boolean testerReady(DeploymentId deploymentId); /** Returns the IP address of the given host name, if any. */ - Optional<String> resolveHostName(HostName hostname); + Optional<InetAddress> resolveHostName(DomainName hostname); /** Returns the host name of the given CNAME, if any. */ - Optional<HostName> resolveCname(HostName hostName); + Optional<DomainName> resolveCname(DomainName 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 eeac395e8e1..04e264651a6 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 com.yahoo.config.provision.HostName; +import ai.vespa.http.DomainName; import java.util.Objects; @@ -12,11 +12,11 @@ import java.util.Objects; */ public abstract class AliasTarget { - private final HostName name; + private final DomainName name; private final String dnsZone; private final String id; - public AliasTarget(HostName name, String dnsZone, String id) { + public AliasTarget(DomainName 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 HostName name() { + public final DomainName 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 170cad8cd5b..b8cd1e89cdc 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,6 +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 com.yahoo.config.provision.zone.ZoneId; @@ -15,7 +16,7 @@ public class LatencyAliasTarget extends AliasTarget { private final ZoneId zone; - public LatencyAliasTarget(HostName name, String dnsZone, ZoneId zone) { + public LatencyAliasTarget(DomainName name, String dnsZone, ZoneId zone) { super(name, dnsZone, zone.value()); this.zone = Objects.requireNonNull(zone); } @@ -59,7 +60,7 @@ public class LatencyAliasTarget extends AliasTarget { if (!"latency".equals(parts[0])) { throw new IllegalArgumentException("Unexpected type '" + parts[0] + "'"); } - return new LatencyAliasTarget(HostName.from(parts[1]), parts[2], ZoneId.from(parts[3])); + return new LatencyAliasTarget(HostName.of(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 963cf74b948..e7a46de75bc 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,6 +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 com.yahoo.config.provision.zone.ZoneId; @@ -18,7 +19,7 @@ public class WeightedAliasTarget extends AliasTarget { private final long weight; - public WeightedAliasTarget(HostName name, String dnsZone, ZoneId zone, long weight) { + public WeightedAliasTarget(DomainName 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"); @@ -63,7 +64,7 @@ public class WeightedAliasTarget extends AliasTarget { if (!"weighted".equals(parts[0])) { throw new IllegalArgumentException("Unexpected type '" + parts[0] + "'"); } - return new WeightedAliasTarget(HostName.from(parts[1]), parts[2], ZoneId.from(parts[3]), + return new WeightedAliasTarget(HostName.of(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 cf6b592b7a5..63c2388b461 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 com.yahoo.config.provision.HostName; +import ai.vespa.http.DomainName; 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,7 +10,9 @@ 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; @@ -57,15 +59,20 @@ public class MockTesterCloud implements TesterCloud { } @Override - public Optional<String> resolveHostName(HostName hostname) { - return Optional.of("1.2.3.4"); + 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"); + } } @Override - public Optional<HostName> resolveCname(HostName hostName) { + public Optional<DomainName> resolveCname(DomainName hostName) { return nameService.findRecords(Record.Type.CNAME, RecordName.from(hostName.value())).stream() .findFirst() - .map(record -> HostName.from(record.data().asString().substring(0, record.data().asString().length() - 1))); + .map(record -> DomainName.of(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 ff0fd9e460f..35d2ad1ffca 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.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) + 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) ); 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 c35e8c5a7ac..d9664fd0475 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.from(hostnameSupplier.get()); + return com.yahoo.config.provision.HostName.of(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 beef090d214..ae61c98cffb 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,6 +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.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; @@ -23,7 +24,6 @@ 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)) { - HostName endpointName = HostName.from(endpoint.dnsName()); + DomainName endpointName = DomainName.of(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("empty") + ") are not equal"); + policy.canonicalName() + "' (" + loadBalancerAddress.orElse(null) + ") 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 10ec9dce5f7..0f1f531d589 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.from(entry.field(hostnameField).asString()); + var hostname = HostName.of(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 17337f823c0..72c16ae0110 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, - HostName.from(inspect.field(canonicalNameField).asString()), + DomainName.of(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 924f7c0b0a5..dcc916cc5a3 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,7 +53,6 @@ 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; @@ -2053,7 +2052,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::from)) + .withHostName(Optional.ofNullable(request.getProperty("hostname")).map(HostName::of)) .withClusterType(Optional.ofNullable(request.getProperty("clusterType")).map(ClusterSpec.Type::from)) .withClusterId(Optional.ofNullable(request.getProperty("clusterId")).map(ClusterSpec.Id::from)); @@ -2295,7 +2294,7 @@ public class ApplicationApiHandler extends AuditLoggingRequestHandler { try { node = nodeRepository.getNode(zone, hostname); } catch (IllegalArgumentException e) { - throw new NotExistsException(new Hostname(hostname)); + throw new NotExistsException(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 e1fc68974cc..c72d8ceb089 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::from) + .map(HostName::of) .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 b98ef717dd3..850a8cab123 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(HostName.from(regionEndpoint.dnsName()), + endpoints.computeIfAbsent(regionEndpoint, (k) -> new RegionEndpoint(new LatencyAliasTarget(DomainName.of(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 34736c16a6b..1ccb3205816 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 HostName canonicalName; + private final DomainName 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, HostName canonicalName, Optional<String> dnsZone, + public RoutingPolicy(RoutingPolicyId id, DomainName 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 HostName canonicalName() { + public DomainName 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 3fa440e694e..a2f0948193c 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.from(host); + HostName hostname = HostName.of(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 5ababdd8250..816a7370bcd 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.from("lb-0--tenant:application:default--prod.us-east-3"), + new WeightedAliasTarget(HostName.of("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.from("application.tenant.us-east-3-w.vespa.oath.cloud"), + new LatencyAliasTarget(HostName.of("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 75c33952754..b39e59d4420 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.from(hostname), version, commitSha, commitDate); + upgradeController(HostName.of(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 86c21839c96..896f5355129 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.from("lb-host"), + policies.put(id, new RoutingPolicy(id, HostName.of("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 44bcbcfb4fa..b5fd3d750ef 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.from("alias1"), + new LatencyAliasTarget(HostName.of("alias1"), "dns-zone-01", ZoneId.from("prod", "us-north-1")).pack()), new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), - new LatencyAliasTarget(HostName.from("alias2"), + new LatencyAliasTarget(HostName.of("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 e98ff71884d..fc87f3f8be6 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.from("host-" + application.serializedForm() + "-" + zone.value()); + return HostName.of("host-" + application.toFullString() + "-" + 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.from("node-" + i + "-" + application.id().application() - .value() + "-" + zone.value())) + .hostname(HostName.of("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.from("lb-0--" + id.applicationId().serializedForm() + "--" + id.zoneId().toString())), + Optional.of(HostName.of("lb-0--" + id.applicationId().toFullString() + "--" + 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 7b67db39350..3f1ca3f9706 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.from(hostname)); + nodeRepository.get(zone).remove(HostName.of(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.from("hostA")) - .parentHostname(HostName.from("parentHostA")) + .hostname(HostName.of("hostA")) + .parentHostname(HostName.of("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.from("hostB")) - .parentHostname(HostName.from("parentHostB")) + .hostname(HostName.of("hostB")) + .parentHostname(HostName.of("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.from(hostname)); + return require(zone, HostName.of(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.from(hostname)), patcher); + patchNodes(zone, Optional.of(HostName.of(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 8daedc05e96..6ccd307f0d9 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.from(hostname)) + .hostname(HostName.of(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 a06e15de3c7..890f0b41098 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.from("cfg3" + hostnameSuffix)) + Node configNode = Node.builder().hostname(HostName.of("cfg3" + hostnameSuffix)) .type(NodeType.config) .build(); - Node configHost = Node.builder().hostname(HostName.from("cfghost3" + hostnameSuffix)) + Node configHost = Node.builder().hostname(HostName.of("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 6109890bae3..4d3f94eaa3d 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.from("host" + state)) - .parentHostname(HostName.from("parenthost" + state)) + .hostname(HostName.of("host" + state)) + .parentHostname(HostName.of("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 f58911a6114..1a6976034c5 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.from("parentHostA.prod.region-2"))); - assertEquals(SHARED_HOST_APPLICATION, applicationForHost.get(HostName.from("parentHostB.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"))); } private void setUpZones() { @@ -51,19 +51,19 @@ public class ResourceTagMaintainerTest { public void setNodes(ZoneId zone) { var hostA = Node.builder() - .hostname(HostName.from("parentHostA." + zone.value())) + .hostname(HostName.of("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.from("hostA." + zone.value())) + .hostname(HostName.of("hostA." + zone.value())) .type(NodeType.tenant) - .parentHostname(HostName.from("parentHostA." + zone.value())) + .parentHostname(HostName.of("parentHostA." + zone.value())) .owner(ApplicationId.from("tenant1", "app1", "default")) .build(); var hostB = Node.builder() - .hostname(HostName.from("parentHostB." + zone.value())) + .hostname(HostName.of("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 0dbe31d921b..8b2bfe8ee95 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.from("lb1.example.com")), + Optional.of(HostName.of("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 7f369d21d3a..e7a6c3ea3c3 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.from("host1"); - private final HostName host2 = HostName.from("host2"); - private final HostName host3 = HostName.from("host3"); + private final HostName host1 = HostName.of("host1"); + private final HostName host2 = HostName.of("host2"); + private final HostName host3 = HostName.of("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 4ef09bbfce0..5ecc22ffc5e 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.from("alias1"), + new LatencyAliasTarget(HostName.of("alias1"), "dns-zone-01", ZoneId.from("prod", "us-north-1")).pack()), new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), - new LatencyAliasTarget(HostName.from("alias2"), + new LatencyAliasTarget(HostName.of("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 482303a0e49..d50c071d98e 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.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))) + 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))) )); versions.put(new OsVersion(version2, CloudName.defaultName()), List.of( - 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))) + 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))) )); 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 422188420bd..2e8ba84d4ff 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.from("long-and-ugly-name"), + HostName.of("long-and-ugly-name"), Optional.of("zone1"), instanceEndpoints, applicationEndpoints, new RoutingPolicy.Status(true, RoutingStatus.DEFAULT)), new RoutingPolicy(id2, - HostName.from("long-and-ugly-name-2"), + HostName.of("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 e202d4a687d..73cfc6ad2f3 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.from(hostname), ZoneId.from("prod", "us-north-1"), version, wantedVersion, Optional.empty())); + nodeVersions.add(new NodeVersion(HostName.of(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 5827ef676d7..6b07fea0187 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() { - assertThrows("Request path '/path' does not end with proxy path '/zone/v2/'", - IllegalArgumentException.class, - () -> testRequest("http://domain.tld/path", "/zone/v2/")); + assertEquals("Request path '/path' does not end with proxy path '/zone/v2/'", + assertThrows(IllegalArgumentException.class, + () -> testRequest("http://domain.tld/path", "/zone/v2/")).getMessage()); } @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 67b201bdc9d..52da2fadf0c 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 422c8c122fa..88a92bf7810 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 3ef993c6589..bfaa4d5c813 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 6b1d48f4a08..7c1f7223e9e 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 377b8c6ed69..e830f96bbba 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 f675825c3b6..bfb5d8e6cbc 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 ca0db13b3d1..53da8c515a7 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.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())), + 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())), 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 1919de33e8b..83b6f05c0b0 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.from("new-hostname"); + var newHostname = HostName.of("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.from("shared-lb--" + zone.value()); + lbHostname = HostName.of("shared-lb--" + zone.value()); } else { - lbHostname = HostName.from("lb-" + i + "--" + application.serializedForm() + - "--" + zone.value()); + lbHostname = HostName.of("lb-" + i + "--" + application.toFullString() + + "--" + 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().serializedForm() + "--" + d.zoneId().value() + + d.applicationId().toFullString() + "--" + 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.serializedForm() + "--" + z.value() + + instance.toFullString() + "--" + 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 ec8d5c35049..7ba69438816 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.from("controller-1"); - HostName controller2 = HostName.from("controller-2"); - HostName controller3 = HostName.from("controller-3"); + HostName controller1 = HostName.of("controller-1"); + HostName controller2 = HostName.of("controller-2"); + HostName controller3 = HostName.of("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.from("controller-1"); - HostName controller2 = HostName.from("controller-2"); - HostName controller3 = HostName.from("controller-3"); + HostName controller1 = HostName.of("controller-1"); + HostName controller2 = HostName.of("controller-2"); + HostName controller3 = HostName.of("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 2713ff45ae8..d884c608ead 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.from(node().hostname()); + return HostName.of(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 fd93252f3b5..415a8b6f438 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.from("host.test.yahoo.com"); + static final HostName HOST_HOSTNAME = HostName.of("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 5436f84f467..995712c6dda 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.from("basehost1.test.yahoo.com"); + private final HostName hostHostname = HostName.of("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 4c6a46f013e..1548038e19d 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 HostName hostname; + private final DomainName hostname; private final Optional<DnsZone> dnsZone; private final Set<Integer> ports; private final Set<String> networks; private final Set<Real> reals; - public LoadBalancerInstance(HostName hostname, Optional<DnsZone> dnsZone, Set<Integer> ports, Set<String> networks, + public LoadBalancerInstance(DomainName 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 HostName hostname() { + public DomainName 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 51f59bc3ea0..7da28bff930 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( - HostName.from("lb-" + spec.application().toShortString() + "-" + spec.cluster().value()), + DomainName.of("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 b8ebf808ae7..fc8f665c8b4 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 HostName hostname; + private final DomainName hostname; private final String ipAddress; private final int port; - public Real(HostName hostname, String ipAddress) { + public Real(DomainName hostname, String ipAddress) { this(hostname, ipAddress, defaultPort); } - public Real(HostName hostname, String ipAddress, int port) { + public Real(DomainName 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 HostName hostname() { + public DomainName 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 1345dfb8e65..fa9db9cd800 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(HostName.from(vipHostname), + return new LoadBalancerInstance(DomainName.of(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 659636de581..1e745b61eaa 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::from) + .map(HostName::of) .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 c361c9183d2..d953ab5b543 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 com.yahoo.config.provision.HostName; +import ai.vespa.http.DomainName; 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(HostName.from(realObject.field(hostnameField).asString()), + reals.add(new Real(DomainName.of(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<HostName> hostname = optionalString(object.field(hostnameField), Function.identity()).filter(s -> !s.isEmpty()).map(HostName::from); + Optional<DomainName> hostname = optionalString(object.field(hostnameField), Function.identity()).filter(s -> !s.isEmpty()).map(DomainName::of); 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 b90851dd639..9a53370faf5 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::from).collect(Collectors.toList())); + hostSpecs.stream().map(HostSpec::hostname).map(HostName::of).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 04f084dd079..f76968d67fd 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.from(node.hostname()), ip)); + reals.add(new Real(HostName.of(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 4975e670e86..d54b41bfcdd 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.from("some.nice.host"), "10.23.56.102"), - new Real(HostName.from("some.awful.host"), "10.23.56.103") + new Real(HostName.of("some.nice.host"), "10.23.56.102"), + new Real(HostName.of("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.from("vip.example.com"), lb.hostname()); + assertEquals(HostName.of("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 38724175c90..1eecb442dc0 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( - HostName.from("lb-host"), + DomainName.of("lb-host"), Optional.of(new DnsZone("zone-id-1")), ImmutableSet.of(4080, 4443), ImmutableSet.of("10.2.3.4/24"), - ImmutableSet.of(new Real(HostName.from("real-1"), + ImmutableSet.of(new Real(DomainName.of("real-1"), "127.0.0.1", 4080), - new Real(HostName.from("real-2"), + new Real(DomainName.of("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 224ff51ff40..4f2360590c4 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,7 +14,6 @@ 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; @@ -137,7 +136,7 @@ public class InfraDeployerImplTest { @SuppressWarnings("unchecked") private void verifyActivated(String... hostnames) { verify(duperModelInfraApi).infraApplicationActivated( - eq(application.getApplicationId()), eq(Stream.of(hostnames).map(HostName::from).collect(Collectors.toList()))); + eq(application.getApplicationId()), eq(Stream.of(hostnames).map(HostName::of).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 b1ee156f8e8..08058ef7b04 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(HostName::value) + .map(DomainName::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 a88e6766050..29d6463a7d7 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.from("cfg1"); - var cfg2 = com.yahoo.config.provision.HostName.from("cfg2"); - var cfg3 = com.yahoo.config.provision.HostName.from("cfg3"); + 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"); 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 a5f124540e7..3a9c2b1f1e7 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::from) + .map(HostName::of) .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 2712b510040..3391bbcf82a 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.from(hostInfo.getHostname()); + HostName hostname = HostName.of(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 6e3f407bb9c..bc0db1500b8 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.from(hostname.s()); + return com.yahoo.config.provision.HostName.of(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 a3af44ec911..d02cad1c068 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,8 +7,6 @@ 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; @@ -66,7 +64,7 @@ public class DuperModelManagerTest { makeManager(false); ApplicationId id = proxyHostApplication.getApplicationId(); - List<HostName> proxyHostHosts = Stream.of("proxyhost1", "proxyhost2").map(HostName::from).collect(Collectors.toList()); + List<HostName> proxyHostHosts = Stream.of("proxyhost1", "proxyhost2").map(HostName::of).collect(Collectors.toList()); verify(duperModel, times(0)).add(any()); manager.infraApplicationActivated(id, proxyHostHosts); verify(duperModel, times(1)).add(any()); @@ -93,12 +91,12 @@ public class DuperModelManagerTest { } private void testEnabledConfigServerLikeInfraApplication(ApplicationId firstId, ApplicationId secondId) { - List<HostName> hostnames1 = Stream.of("node11", "node12").map(HostName::from).collect(Collectors.toList()); + List<HostName> hostnames1 = Stream.of("node11", "node12").map(HostName::of).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::from).collect(Collectors.toList()); + List<HostName> hostnames2 = Stream.of("node21", "node22").map(HostName::of).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 3fa9baa5d60..69d3ef4d498 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.from("hostname1-1"); - private final HostName hostname1_2 = HostName.from("hostname1-2"); + private final HostName hostname1_1 = HostName.of("hostname1-1"); + private final HostName hostname1_2 = HostName.of("hostname1-2"); private final ApplicationId id2 = ApplicationId.fromSerializedForm("tenant:app2:default"); private final ApplicationInfo application2 = mock(ApplicationInfo.class); - private final HostName hostname2_1 = HostName.from("hostname2-1"); + private final HostName hostname2_1 = HostName.of("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.from("host1"))); + assertEquals(Optional.empty(), duperModel.getApplicationId(HostName.of("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::from).toArray(HostName[]::new); + HostName[] hostnameArray = Stream.of(hostnameStrings).map(HostName::of).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 569ad899331..d99e882985f 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.from(hostname))); + configServerApplication.configIdFor(HostName.of(hostname))); } private ServiceStatus getStatus(ApplicationHealthMonitor monitor, String hostname) { @@ -95,7 +95,7 @@ public class ApplicationHealthMonitorTest { configServerApplication.getApplicationId(), configServerApplication.getClusterId(), configServerApplication.getServiceType(), - configServerApplication.configIdFor(HostName.from(hostname))) + configServerApplication.configIdFor(HostName.of(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 d191d914bd0..c77ff519abd 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::from).collect(Collectors.toList()); + List<HostName> hostnames = Stream.of("proxyhost1", "proxyhost2").map(HostName::of).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.from(hostname))).serviceStatus(); + infraApplication.configIdFor(HostName.of(hostname))).serviceStatus(); assertEquals(expected, actual); @@ -85,7 +85,7 @@ public class HealthMonitorManagerTest { infraApplication.getApplicationId(), infraApplication.getClusterId(), infraApplication.getServiceType(), - infraApplication.configIdFor(HostName.from(hostname))); + infraApplication.configIdFor(HostName.of(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 4fdf6288bd8..8ae0e55fe41 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::from).collect(Collectors.toList()); + private final List<HostName> hostnames = Stream.of("host1", "host2").map(HostName::of).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 8ca46941366..8f87a7bad68 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::from).collect(Collectors.toList())); + configServerList.stream().map(HostName::of).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 cfc24ecbaec..97b6ff0c3e2 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.from(hostname)); + return duperModel.getApplicationInfo(com.yahoo.config.provision.HostName.of(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 40cc679b69b..df489a8c336 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::from).collect(Collectors.toList())); + .map(HostName::of).collect(Collectors.toList())); } public static ApplicationInfo makeExampleConfigServer() { diff --git a/vespajlib/abi-spec.json b/vespajlib/abi-spec.json index ae69564b671..6044666ebf8 100644 --- a/vespajlib/abi-spec.json +++ b/vespajlib/abi-spec.json @@ -350,13 +350,13 @@ "fields": [] }, "com.yahoo.net.HostName": { - "superClass": "ai.vespa.validation.PatternedStringWrapper", + "superClass": "java.lang.Object", "interfaces": [], "attributes": [ "public" ], "methods": [ - "public static com.yahoo.net.HostName of(java.lang.String)", + "public void <init>()", "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 a566f5b95be..737f6b6d863 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> { - 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); + 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); public static final DomainName localhost = DomainName.of("localhost"); - private DomainName(String value) { + protected 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 0937627b57e..12be0002f6f 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 == null || getClass() != o.getClass()) return false; + if ( ! (o instanceof StringWrapper<?>)) 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 20f1008055e..7446771f57c 100644 --- a/vespajlib/src/main/java/com/yahoo/net/HostName.java +++ b/vespajlib/src/main/java/com/yahoo/net/HostName.java @@ -1,39 +1,18 @@ -// 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; /** - * 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. + * This class 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 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); +public class HostName { - 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); - } + private static String preferredHostName = null; /** * Return a public and fully qualified hostname for localhost that @@ -45,19 +24,19 @@ public class HostName extends PatternedStringWrapper<HostName> { if (preferredHostName == null) { preferredHostName = getPreferredHostName(); } - return preferredHostName.value(); + return preferredHostName; } - static private HostName getPreferredHostName() { + static private String getPreferredHostName() { Optional<String> vespaHostEnv = Optional.ofNullable(System.getenv("VESPA_HOSTNAME")); if (vespaHostEnv.isPresent() && ! vespaHostEnv.get().trim().isEmpty()) { - return of(vespaHostEnv.get().trim()); + return vespaHostEnv.get().trim(); } - return of("localhost"); + return "localhost"; } public static void setHostNameForTestingOnly(String hostName) { - preferredHostName = HostName.of(hostName); + preferredHostName = hostName; } } diff --git a/vespajlib/src/test/java/com/yahoo/net/HostNameTest.java b/vespajlib/src/test/java/com/yahoo/net/HostNameTest.java index fa756b31616..2548c3cea60 100644 --- a/vespajlib/src/test/java/com/yahoo/net/HostNameTest.java +++ b/vespajlib/src/test/java/com/yahoo/net/HostNameTest.java @@ -1,39 +1,14 @@ // 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()); } |