diff options
author | Martin Polden <mpolden@mpolden.no> | 2020-06-24 13:35:32 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2020-06-24 14:41:35 +0200 |
commit | 0c3080ce98166a121d94775d2da9fdc63b737be8 (patch) | |
tree | 8ae1747586597ad5d727baa0d6d40ef057fa9fb6 /controller-server | |
parent | c2b57fddcbc9beb3b866d579c6cd68a68590651e (diff) |
Support multiple types of alias targets
Diffstat (limited to 'controller-server')
7 files changed, 36 insertions, 34 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/CreateRecords.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/CreateRecords.java index 9dd02735638..1697c05b8fb 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/CreateRecords.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/CreateRecords.java @@ -1,4 +1,4 @@ -// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.dns; import com.yahoo.vespa.hosted.controller.api.integration.dns.AliasTarget; @@ -41,7 +41,7 @@ public class CreateRecords implements NameServiceRequest { public void dispatchTo(NameService nameService) { switch (type) { case ALIAS: - var targets = records.stream().map(Record::data).map(AliasTarget::from).collect(Collectors.toSet()); + var targets = records.stream().map(Record::data).map(AliasTarget::unpack).collect(Collectors.toSet()); nameService.createAlias(name, targets); break; case TXT: diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceForwarder.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceForwarder.java index 459378def6c..b8692233b2d 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceForwarder.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/dns/NameServiceForwarder.java @@ -1,4 +1,4 @@ -// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.dns; import com.yahoo.vespa.curator.Lock; @@ -45,8 +45,8 @@ public class NameServiceForwarder { /** Create or update an ALIAS record with given name and targets */ public void createAlias(RecordName name, Set<AliasTarget> targets, NameServiceQueue.Priority priority) { - var records = targets.stream().map(AliasTarget::asData) - .map(data -> new Record(Record.Type.ALIAS, name, data)) + var records = targets.stream() + .map(target -> new Record(Record.Type.ALIAS, name, target.pack())) .collect(Collectors.toList()); forward(new CreateRecords(records), priority); } 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 a429c444e0b..e080b7babce 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,4 +1,4 @@ -// Copyright 2020 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.routing; import com.yahoo.config.application.api.DeploymentSpec; @@ -10,6 +10,7 @@ import com.yahoo.vespa.hosted.controller.Controller; import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId; import com.yahoo.vespa.hosted.controller.api.integration.configserver.LoadBalancer; import com.yahoo.vespa.hosted.controller.api.integration.dns.AliasTarget; +import com.yahoo.vespa.hosted.controller.api.integration.dns.LatencyAliasTarget; import com.yahoo.vespa.hosted.controller.api.integration.dns.Record; import com.yahoo.vespa.hosted.controller.api.integration.dns.RecordData; import com.yahoo.vespa.hosted.controller.api.integration.dns.RecordName; @@ -125,7 +126,7 @@ public class RoutingPolicies { for (var policy : routeEntry.getValue()) { if (policy.dnsZone().isEmpty()) continue; if (!controller.zoneRegistry().routingMethods(policy.id().zone()).contains(RoutingMethod.exclusive)) continue; - var target = new AliasTarget(policy.canonicalName(), policy.dnsZone().get(), policy.id().zone()); + var target = new LatencyAliasTarget(policy.canonicalName(), policy.dnsZone().get(), policy.id().zone()); var zonePolicy = db.readZoneRoutingPolicy(policy.id().zone()); // Remove target zone if global routing status is set out at: // - zone level (ZoneRoutingPolicy) @@ -361,7 +362,7 @@ public class RoutingPolicies { public void removeRecords(Record.Type type, RecordName name) {} @Override - public void createAlias(RecordName name, Set<AliasTarget> target) {} + public void createAlias(RecordName name, Set<AliasTarget> targets) {} @Override public void createCname(RecordName name, RecordData data) {} 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 dfca2d69a5e..95f8219b401 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 @@ -1,4 +1,4 @@ -// Copyright 2020 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller; import com.google.common.collect.Sets; @@ -11,6 +11,7 @@ import com.yahoo.config.provision.AthenzService; import com.yahoo.config.provision.CloudName; import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.TenantName; @@ -24,6 +25,7 @@ import com.yahoo.vespa.hosted.controller.api.application.v4.model.EndpointStatus import com.yahoo.vespa.hosted.controller.api.identifiers.DeploymentId; import com.yahoo.vespa.hosted.controller.api.integration.certificates.EndpointCertificateMetadata; import com.yahoo.vespa.hosted.controller.api.integration.deployment.ApplicationVersion; +import com.yahoo.vespa.hosted.controller.api.integration.dns.LatencyAliasTarget; import com.yahoo.vespa.hosted.controller.api.integration.dns.Record; import com.yahoo.vespa.hosted.controller.api.integration.dns.RecordData; import com.yahoo.vespa.hosted.controller.api.integration.dns.RecordName; @@ -813,7 +815,8 @@ public class ControllerTest { // The 'east' global endpoint, pointing to zone 2 with exclusive routing new Record(Record.Type.ALIAS, RecordName.from("east.application.tenant.global.vespa.oath.cloud"), - RecordData.from("lb-0--tenant:application:default--prod.us-east-3/dns-zone-1/prod.us-east-3")), + new LatencyAliasTarget(HostName.from("lb-0--tenant:application:default--prod.us-east-3"), + "dns-zone-1", ZoneId.from("prod.us-east-3")).pack()), // The 'default' global endpoint, pointing to both zones with shared routing, via rotation new Record(Record.Type.CNAME, 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 30ed9b5432c..c187552b0b3 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 @@ -1,9 +1,9 @@ -// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.dns; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.ZoneId; -import com.yahoo.vespa.hosted.controller.api.integration.dns.AliasTarget; +import com.yahoo.vespa.hosted.controller.api.integration.dns.LatencyAliasTarget; import com.yahoo.vespa.hosted.controller.api.integration.dns.MemoryNameService; import com.yahoo.vespa.hosted.controller.api.integration.dns.Record; import com.yahoo.vespa.hosted.controller.api.integration.dns.RecordData; @@ -27,19 +27,17 @@ public class NameServiceQueueTest { var nameService = new MemoryNameService(); 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"), RecordData.from("alias1/dns-zone-01/prod.us-north-1")), - new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), RecordData.from("alias2/dns-zone-02/prod.us-north-2"))); + var r3 = List.of(new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), + new LatencyAliasTarget(HostName.from("alias1"), + "dns-zone-01", + ZoneId.from("prod", "us-north-1")).pack()), + new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), + new LatencyAliasTarget(HostName.from("alias2"), + "dns-zone-02", + ZoneId.from("prod", "us-north-2")).pack())); var req1 = new CreateRecord(r1); var req2 = new CreateRecords(List.of(r2)); - var req3 = new CreateRecords(List.of(new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), - new AliasTarget(HostName.from("alias1"), - "dns-zone-01", - ZoneId.from("prod", "us-north-1")).asData()), - new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), - new AliasTarget(HostName.from("alias2"), - "dns-zone-02", - ZoneId.from("prod", "us-north-2")).asData())) - ); + var req3 = new CreateRecords(r3); var req4 = new RemoveRecords(r3.get(0).type(), r3.get(0).name()); var req5 = new RemoveRecords(r2.type(), r2.data()); var req6 = new RemoveRecords(Record.Type.CNAME, r1.data()); 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 e852710c604..a2c995eaaf0 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 @@ -1,9 +1,9 @@ -// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.persistence; import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.zone.ZoneId; -import com.yahoo.vespa.hosted.controller.api.integration.dns.AliasTarget; +import com.yahoo.vespa.hosted.controller.api.integration.dns.LatencyAliasTarget; import com.yahoo.vespa.hosted.controller.api.integration.dns.Record; import com.yahoo.vespa.hosted.controller.api.integration.dns.RecordData; import com.yahoo.vespa.hosted.controller.api.integration.dns.RecordName; @@ -32,13 +32,13 @@ 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 AliasTarget(HostName.from("alias1"), - "dns-zone-01", - ZoneId.from("prod", "us-north-1")).asData()), + new LatencyAliasTarget(HostName.from("alias1"), + "dns-zone-01", + ZoneId.from("prod", "us-north-1")).pack()), new Record(Record.Type.ALIAS, RecordName.from("alias.example.com"), - new AliasTarget(HostName.from("alias2"), - "dns-zone-02", - ZoneId.from("prod", "us-north-2")).asData())) + new LatencyAliasTarget(HostName.from("alias2"), + "dns-zone-02", + ZoneId.from("prod", "us-north-2")).pack())) ), new RemoveRecords(record1.type(), record1.name()), new RemoveRecords(record2.type(), record2.data()) 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 760d80d230c..3b2fe95d0f7 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 @@ -1,4 +1,4 @@ -// Copyright 2020 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.hosted.controller.routing; import com.google.common.collect.Sets; @@ -247,7 +247,7 @@ public class RoutingPoliciesTest { var endpoint = "r0.app1.tenant1.global.vespa.oath.cloud"; assertEquals(endpoint + " points to c0 in all regions", - List.of("lb-0--tenant1:app1:default--prod.us-west-1/dns-zone-1/prod.us-west-1"), + List.of("latency/lb-0--tenant1:app1:default--prod.us-west-1/dns-zone-1/prod.us-west-1"), tester.aliasDataOf(endpoint)); assertTrue("No rotations assigned", context.application().instances().values().stream() .map(Instance::rotations) @@ -699,7 +699,7 @@ public class RoutingPoliciesTest { .map(Endpoint::dnsName) .orElse("<none>"); var zoneTargets = Arrays.stream(zone) - .map(z -> "lb-" + loadBalancerId + "--" + application.serializedForm() + "--" + + .map(z -> "latency/lb-" + loadBalancerId + "--" + application.serializedForm() + "--" + z.value() + "/dns-zone-1/" + z.value()) .collect(Collectors.toSet()); assertEquals("Global endpoint " + endpoint + " points to expected zones", zoneTargets, |