aboutsummaryrefslogtreecommitdiffstats
path: root/controller-server
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-05-10 11:35:21 +0200
committerMartin Polden <mpolden@mpolden.no>2021-06-02 14:21:09 +0200
commit6a49bbba29431dd50a425706f4dbb4aae7eecf1d (patch)
tree2b95053579a2fcf69f7e819edc839b24b13c844d /controller-server
parent2162af381b69e68c68960d228ca439336ca74f67 (diff)
Default to new endpoints in public
Diffstat (limited to 'controller-server')
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java4
-rw-r--r--controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Endpoint.java24
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/EndpointTest.java74
-rw-r--r--controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-cloud.json2
4 files changed, 63 insertions, 41 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java
index abdb394c278..1b1df28c201 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/RoutingController.java
@@ -180,11 +180,11 @@ public class RoutingController {
builder = builder.routingMethod(RoutingMethod.exclusive)
.on(Port.tls());
Endpoint endpoint = builder.in(controller.system());
- endpointDnsNames.add(endpoint.dnsName());
if (controller.system().isPublic() && vespaAppDomainInCertificate.with(FetchVector.Dimension.APPLICATION_ID, deployment.applicationId().serializedForm()).value()) {
Endpoint legacyEndpoint = builder.legacy().in(controller.system());
endpointDnsNames.add(legacyEndpoint.dnsName());
}
+ endpointDnsNames.add(endpoint.dnsName());
}
return Collections.unmodifiableList(endpointDnsNames);
}
@@ -393,7 +393,7 @@ public class RoutingController {
private static String commonNameHashOf(ApplicationId application, SystemName system) {
HashCode sha1 = Hashing.sha1().hashString(application.serializedForm(), StandardCharsets.UTF_8);
String base32 = BaseEncoding.base32().omitPadding().lowerCase().encode(sha1.asBytes());
- return 'v' + base32 + Endpoint.dnsSuffix(system);
+ return 'v' + base32 + Endpoint.dnsSuffix(system, system.isPublic());
}
/** Returns direct routing endpoints if any exist and feature flag is set for given application */
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Endpoint.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Endpoint.java
index 3f079a5fb9b..2132f731280 100644
--- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Endpoint.java
+++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/application/Endpoint.java
@@ -26,12 +26,10 @@ public class Endpoint {
private static final String YAHOO_DNS_SUFFIX = ".vespa.yahooapis.com";
private static final String OATH_DNS_SUFFIX = ".vespa.oath.cloud";
- private static final String PUBLIC_DNS_SUFFIX = ".public.vespa.oath.cloud";
- private static final String PUBLIC_CD_DNS_SUFFIX = ".public-cd.vespa.oath.cloud";
- // TODO(mpolden): New domain is considered "legacy" for the time being, until it's ready for use. Once it's ready
- // we'll make the vespa.oath.cloud variant legacy and this non-legacy.
- private static final String PUBLIC_DNS_LEGACY_SUFFIX = ".vespa-app.cloud";
- private static final String PUBLIC_CD_LEGACY_DNS_SUFFIX = ".cd.vespa-app.cloud";
+ private static final String PUBLIC_DNS_SUFFIX = ".vespa-app.cloud";
+ private static final String PUBLIC_CD_DNS_SUFFIX = ".cd.vespa-app.cloud";
+ private static final String PUBLIC_DNS_LEGACY_SUFFIX = ".public.vespa.oath.cloud";
+ private static final String PUBLIC_CD_LEGACY_DNS_SUFFIX = ".public-cd.vespa.oath.cloud";
private final EndpointId id;
private final ClusterSpec.Id cluster;
@@ -161,11 +159,6 @@ public class Endpoint {
return String.format("endpoint %s [scope=%s, legacy=%s, routingMethod=%s]", url, scope, legacy, routingMethod);
}
- /** Returns the DNS suffix used for endpoints in given system */
- public static String dnsSuffix(SystemName system) {
- return dnsSuffix(system, false);
- }
-
private static String endpointOrClusterAsString(EndpointId id, ClusterSpec.Id cluster) {
return id == null ? cluster.value() : id.id();
}
@@ -206,7 +199,7 @@ public class Endpoint {
}
private static String scopePart(Scope scope, List<ZoneId> zones, boolean legacy, SystemName system) {
- if (system.isPublic() && legacy) {
+ if (system.isPublic() && !legacy) {
if (scope == Scope.global) return "g";
var zone = zones.get(0);
var region = zone.region().value();
@@ -218,7 +211,7 @@ public class Endpoint {
var zone = zones.get(0);
var region = zone.region().value();
if (scope == Scope.region) region += "-w";
- if (!legacy && zone.environment().isProduction()) return region; // Skip prod environment for non-legacy endpoints
+ if ((system.isPublic() || !legacy) && zone.environment().isProduction()) return region;
return region + "." + zone.environment().value();
}
@@ -229,11 +222,12 @@ public class Endpoint {
private static String systemPart(SystemName system, String separator, boolean legacy) {
if (!system.isCd()) return "";
- if (system.isPublic() && legacy) return "";
+ if (system.isPublic() && !legacy) return "";
return system.value() + separator;
}
- private static String dnsSuffix(SystemName system, boolean legacy) {
+ /** Returns the DNS suffix used for endpoints in given system */
+ public static String dnsSuffix(SystemName system, boolean legacy) {
switch (system) {
case cd:
case main:
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/EndpointTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/EndpointTest.java
index 468c92d3539..da641d17a8a 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/EndpointTest.java
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/application/EndpointTest.java
@@ -64,24 +64,28 @@ public class EndpointTest {
"https://r2.i2.a2.t2.global.vespa.oath.cloud/",
Endpoint.of(app2).target(EndpointId.of("r2")).on(Port.tls()).routingMethod(RoutingMethod.exclusive).in(SystemName.main),
- // Main endpoint in public system
+ // Main endpoint in public system (legacy)
"https://a1.t1.global.public.vespa.oath.cloud/",
- Endpoint.of(app1).target(endpointId).on(Port.tls()).routingMethod(RoutingMethod.exclusive).in(SystemName.Public)
+ Endpoint.of(app1).target(endpointId).on(Port.tls()).routingMethod(RoutingMethod.exclusive).legacy().in(SystemName.Public)
);
tests.forEach((expected, endpoint) -> assertEquals(expected, endpoint.url().toString()));
Map<String, Endpoint> tests2 = Map.of(
- // Default endpoint in public system using new domain
+ // Main endpoint in public CD system (legacy)
+ "https://publiccd.a1.t1.global.public-cd.vespa.oath.cloud/",
+ Endpoint.of(app1).target(endpointId).on(Port.tls()).routingMethod(RoutingMethod.exclusive).legacy().in(SystemName.PublicCd),
+
+ // Default endpoint in public system
"https://a1.t1.g.vespa-app.cloud/",
- Endpoint.of(app1).target(endpointId).on(Port.tls()).routingMethod(RoutingMethod.exclusive).legacy().in(SystemName.Public),
+ Endpoint.of(app1).target(endpointId).on(Port.tls()).routingMethod(RoutingMethod.exclusive).in(SystemName.Public),
- // Default endpoint in public CD system using new domain
+ // Default endpoint in public CD system
"https://a1.t1.g.cd.vespa-app.cloud/",
- Endpoint.of(app1).target(endpointId).on(Port.tls()).routingMethod(RoutingMethod.exclusive).legacy().in(SystemName.PublicCd),
+ Endpoint.of(app1).target(endpointId).on(Port.tls()).routingMethod(RoutingMethod.exclusive).in(SystemName.PublicCd),
- // Custom instance in public system, using new domain
+ // Custom instance in public system
"https://i2.a2.t2.g.vespa-app.cloud/",
- Endpoint.of(app2).target(endpointId).on(Port.tls()).routingMethod(RoutingMethod.exclusive).legacy().in(SystemName.Public)
+ Endpoint.of(app2).target(endpointId).on(Port.tls()).routingMethod(RoutingMethod.exclusive).in(SystemName.Public)
);
tests2.forEach((expected, endpoint) -> assertEquals(expected, endpoint.url().toString()));
}
@@ -127,16 +131,20 @@ public class EndpointTest {
"https://r2.i2.a2.t2.global.vespa.oath.cloud/",
Endpoint.of(app2).target(EndpointId.of("r2")).on(Port.tls()).routingMethod(RoutingMethod.exclusive).in(SystemName.main),
- // Main endpoint in public system
+ // Main endpoint in public system (legacy)
"https://a1.t1.global.public.vespa.oath.cloud/",
- Endpoint.of(app1).target(endpointId).on(Port.tls()).routingMethod(RoutingMethod.exclusive).in(SystemName.Public)
+ Endpoint.of(app1).target(endpointId).on(Port.tls()).routingMethod(RoutingMethod.exclusive).legacy().in(SystemName.Public)
);
tests.forEach((expected, endpoint) -> assertEquals(expected, endpoint.url().toString()));
Map<String, Endpoint> tests2 = Map.of(
- // Custom endpoint and instance in public system, using new domain
+ // Custom endpoint and instance in public CD system (legacy)
+ "https://foo.publiccd.i2.a2.t2.global.public-cd.vespa.oath.cloud/",
+ Endpoint.of(app2).target(EndpointId.of("foo")).on(Port.tls()).routingMethod(RoutingMethod.exclusive).legacy().in(SystemName.PublicCd),
+
+ // Custom endpoint and instance in public system
"https://foo.i2.a2.t2.g.vespa-app.cloud/",
- Endpoint.of(app2).target(EndpointId.of("foo")).on(Port.tls()).routingMethod(RoutingMethod.exclusive).legacy().in(SystemName.Public)
+ Endpoint.of(app2).target(EndpointId.of("foo")).on(Port.tls()).routingMethod(RoutingMethod.exclusive).in(SystemName.Public)
);
tests2.forEach((expected, endpoint) -> assertEquals(expected, endpoint.url().toString()));
}
@@ -176,13 +184,13 @@ public class EndpointTest {
"https://i2--a2--t2.us-north-1.vespa.oath.cloud:4443/",
Endpoint.of(app2).target(cluster, prodZone).on(Port.tls(4443)).in(SystemName.main),
- // Non-default cluster in public
+ // Non-default cluster in public (legacy)
"https://c1.a1.t1.us-north-1.public.vespa.oath.cloud/",
- Endpoint.of(app1).target(ClusterSpec.Id.from("c1"), prodZone).on(Port.tls()).routingMethod(RoutingMethod.exclusive).in(SystemName.Public),
+ Endpoint.of(app1).target(ClusterSpec.Id.from("c1"), prodZone).on(Port.tls()).routingMethod(RoutingMethod.exclusive).legacy().in(SystemName.Public),
- // Non-default cluster and instance in public
+ // Non-default cluster and instance in public (legacy)
"https://c2.i2.a2.t2.us-north-1.public.vespa.oath.cloud/",
- Endpoint.of(app2).target(ClusterSpec.Id.from("c2"), prodZone).on(Port.tls()).routingMethod(RoutingMethod.exclusive).in(SystemName.Public),
+ Endpoint.of(app2).target(ClusterSpec.Id.from("c2"), prodZone).on(Port.tls()).routingMethod(RoutingMethod.exclusive).legacy().in(SystemName.Public),
// Endpoint in main using shared layer 4
"https://a1.t1.us-north-1.vespa.oath.cloud/",
@@ -191,17 +199,21 @@ public class EndpointTest {
tests.forEach((expected, endpoint) -> assertEquals(expected, endpoint.url().toString()));
Map<String, Endpoint> tests2 = Map.of(
- // Custom cluster name in public, using new domain
+ // Non-default cluster and instance in public CD (legacy)
+ "https://c2.publiccd.i2.a2.t2.us-north-1.public-cd.vespa.oath.cloud/",
+ Endpoint.of(app2).target(ClusterSpec.Id.from("c2"), prodZone).on(Port.tls()).routingMethod(RoutingMethod.exclusive).legacy().in(SystemName.PublicCd),
+
+ // Custom cluster name in public
"https://c1.a1.t1.us-north-1.z.vespa-app.cloud/",
- Endpoint.of(app1).target(ClusterSpec.Id.from("c1"), prodZone).on(Port.tls()).routingMethod(RoutingMethod.exclusive).legacy().in(SystemName.Public),
+ Endpoint.of(app1).target(ClusterSpec.Id.from("c1"), prodZone).on(Port.tls()).routingMethod(RoutingMethod.exclusive).in(SystemName.Public),
- // Default cluster name in non-production zone in public, using new domain
+ // Default cluster name in non-production zone in public
"https://a1.t1.us-north-2.test.z.vespa-app.cloud/",
- Endpoint.of(app1).target(ClusterSpec.Id.from("default"), testZone).on(Port.tls()).routingMethod(RoutingMethod.exclusive).legacy().in(SystemName.Public),
+ Endpoint.of(app1).target(ClusterSpec.Id.from("default"), testZone).on(Port.tls()).routingMethod(RoutingMethod.exclusive).in(SystemName.Public),
- // Default cluster name in public CD, using new domain
+ // Default cluster name in public CD
"https://a1.t1.us-north-1.z.cd.vespa-app.cloud/",
- Endpoint.of(app1).target(ClusterSpec.Id.from("default"), prodZone).on(Port.tls()).routingMethod(RoutingMethod.exclusive).legacy().in(SystemName.PublicCd)
+ Endpoint.of(app1).target(ClusterSpec.Id.from("default"), prodZone).on(Port.tls()).routingMethod(RoutingMethod.exclusive).in(SystemName.PublicCd)
);
tests2.forEach((expected, endpoint) -> assertEquals(expected, endpoint.url().toString()));
}
@@ -219,6 +231,7 @@ public class EndpointTest {
.target(EndpointId.defaultId())
.routingMethod(RoutingMethod.exclusive)
.on(Port.tls())
+ .legacy()
.in(SystemName.Public),
// Wildcard to match other rotations
@@ -227,6 +240,7 @@ public class EndpointTest {
.wildcard()
.routingMethod(RoutingMethod.exclusive)
.on(Port.tls())
+ .legacy()
.in(SystemName.Public),
// Default cluster in zone
@@ -235,6 +249,7 @@ public class EndpointTest {
.target(defaultCluster, prodZone)
.routingMethod(RoutingMethod.exclusive)
.on(Port.tls())
+ .legacy()
.in(SystemName.Public),
// Wildcard to match other clusters in zone
@@ -243,6 +258,7 @@ public class EndpointTest {
.wildcard(prodZone)
.routingMethod(RoutingMethod.exclusive)
.on(Port.tls())
+ .legacy()
.in(SystemName.Public),
// Default cluster in test zone
@@ -251,6 +267,7 @@ public class EndpointTest {
.target(defaultCluster, testZone)
.routingMethod(RoutingMethod.exclusive)
.on(Port.tls())
+ .legacy()
.in(SystemName.Public),
// Wildcard to match other clusters in test zone
@@ -259,6 +276,15 @@ public class EndpointTest {
.wildcard(testZone)
.routingMethod(RoutingMethod.exclusive)
.on(Port.tls())
+ .legacy()
+ .in(SystemName.Public),
+
+ // Wildcard to match other clusters in zone
+ "https://*.a1.t1.us-north-1.z.vespa-app.cloud/",
+ Endpoint.of(app1)
+ .wildcard(prodZone)
+ .routingMethod(RoutingMethod.exclusive)
+ .on(Port.tls())
.in(SystemName.Public)
);
@@ -275,25 +301,27 @@ public class EndpointTest {
.targetRegion(cluster, ZoneId.from("prod", "us-north-1a"))
.routingMethod(RoutingMethod.exclusive)
.on(Port.tls())
+ .legacy()
.in(SystemName.Public),
"https://a1.t1.us-north-2-w.public.vespa.oath.cloud/",
Endpoint.of(app1)
.targetRegion(cluster, prodZone)
.routingMethod(RoutingMethod.exclusive)
.on(Port.tls())
+ .legacy()
.in(SystemName.Public),
"https://a1.t1.us-north-2-w.test.public.vespa.oath.cloud/",
Endpoint.of(app1)
.targetRegion(cluster, ZoneId.from("test", "us-north-2"))
.routingMethod(RoutingMethod.exclusive)
.on(Port.tls())
+ .legacy()
.in(SystemName.Public),
"https://c1.a1.t1.us-north-2.r.vespa-app.cloud/",
Endpoint.of(app1)
.targetRegion(ClusterSpec.Id.from("c1"), prodZone)
.routingMethod(RoutingMethod.exclusive)
.on(Port.tls())
- .legacy()
.in(SystemName.Public)
);
tests.forEach((expected, endpoint) -> assertEquals(expected, endpoint.url().toString()));
diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-cloud.json b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-cloud.json
index 3a3fdfbf6c7..a214969485d 100644
--- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-cloud.json
+++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/restapi/application/responses/deployment-cloud.json
@@ -8,7 +8,7 @@
{
"cluster": "default",
"tls": true,
- "url": "https://albums.scoober.aws-us-east-1c.public.vespa.oath.cloud/",
+ "url": "https://albums.scoober.aws-us-east-1c.z.vespa-app.cloud/",
"scope": "zone",
"routingMethod": "exclusive",
"legacy": false