diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-08-27 13:41:33 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2019-08-27 13:42:57 +0200 |
commit | bec65ec7f0ab308e8d02804b4baedd2cdc2298d6 (patch) | |
tree | 9385179846a0f967edb935c90ca3b7bf7570b2a7 /controller-server | |
parent | c69db7728c5d0026df1ca3d47ca8c8f474f8943e (diff) |
Ignore inactive load balancers in routing policies
Diffstat (limited to 'controller-server')
2 files changed, 24 insertions, 10 deletions
diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicies.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicies.java index a06e187cb23..fb2ec6ea815 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicies.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPolicies.java @@ -74,7 +74,7 @@ public class RoutingPolicies { */ public void refresh(ApplicationId application, DeploymentSpec deploymentSpec, ZoneId zone) { if (!controller.zoneRegistry().zones().directlyRouted().ids().contains(zone)) return; - var lbs = new LoadBalancers(application, zone, controller.configServer().getLoadBalancers(application, zone)); + var lbs = new AllocatedLoadBalancers(application, zone, controller.configServer().getLoadBalancers(application, zone)); try (var lock = db.lockRoutingPolicies()) { removeObsoleteEndpointsFromDns(lbs, deploymentSpec, lock); storePoliciesOf(lbs, deploymentSpec, lock); @@ -84,7 +84,7 @@ public class RoutingPolicies { } /** Create global endpoints for given route, if any */ - private void registerEndpointsInDns(LoadBalancers loadBalancers, @SuppressWarnings("unused") Lock lock) { + private void registerEndpointsInDns(AllocatedLoadBalancers loadBalancers, @SuppressWarnings("unused") Lock lock) { Map<RoutingId, List<RoutingPolicy>> routingTable = routingTableFrom(get(loadBalancers.application)); // Create DNS record for each routing ID @@ -103,7 +103,7 @@ public class RoutingPolicies { } /** Store routing policies for given route */ - private void storePoliciesOf(LoadBalancers loadBalancers, DeploymentSpec spec, @SuppressWarnings("unused") Lock lock) { + private void storePoliciesOf(AllocatedLoadBalancers loadBalancers, DeploymentSpec spec, @SuppressWarnings("unused") Lock lock) { Set<RoutingPolicy> policies = new LinkedHashSet<>(get(loadBalancers.application)); for (LoadBalancer loadBalancer : loadBalancers.list) { RoutingPolicy policy = createPolicy(loadBalancers.application, spec, loadBalancers.zone, loadBalancer); @@ -129,7 +129,7 @@ public class RoutingPolicies { } /** Remove obsolete policies for given route and their CNAME records */ - private void removeObsoletePolicies(LoadBalancers loadBalancers, @SuppressWarnings("unused") Lock lock) { + private void removeObsoletePolicies(AllocatedLoadBalancers loadBalancers, @SuppressWarnings("unused") Lock lock) { var allPolicies = new LinkedHashSet<>(get(loadBalancers.application)); var removalCandidates = new HashSet<>(allPolicies); var activeLoadBalancers = loadBalancers.list.stream() @@ -147,7 +147,7 @@ public class RoutingPolicies { } /** Remove unreferenced global endpoints for given route from DNS */ - private void removeObsoleteEndpointsFromDns(LoadBalancers loadBalancers, DeploymentSpec deploymentSpec, @SuppressWarnings("unused") Lock lock) { + private void removeObsoleteEndpointsFromDns(AllocatedLoadBalancers loadBalancers, DeploymentSpec deploymentSpec, @SuppressWarnings("unused") Lock lock) { var zonePolicies = get(loadBalancers.application, loadBalancers.zone); var removalCandidates = routingTableFrom(zonePolicies).keySet(); var activeRoutingIds = routingIdsFrom(loadBalancers, deploymentSpec); @@ -159,7 +159,7 @@ public class RoutingPolicies { } /** Compute routing IDs from given load balancers */ - private static Set<RoutingId> routingIdsFrom(LoadBalancers loadBalancers, DeploymentSpec spec) { + private static Set<RoutingId> routingIdsFrom(AllocatedLoadBalancers loadBalancers, DeploymentSpec spec) { Set<RoutingId> routingIds = new LinkedHashSet<>(); for (var loadBalancer : loadBalancers.list) { for (var endpointId : endpointIdsOf(loadBalancer, loadBalancers.zone, spec)) { @@ -192,17 +192,22 @@ public class RoutingPolicies { .collect(Collectors.toSet()); } - /** Load balancers for a particular deployment */ - private static class LoadBalancers { + /** Load balancers allocated to a deployment */ + private static class AllocatedLoadBalancers { private final ApplicationId application; private final ZoneId zone; private final List<LoadBalancer> list; - private LoadBalancers(ApplicationId application, ZoneId zone, List<LoadBalancer> list) { + private AllocatedLoadBalancers(ApplicationId application, ZoneId zone, List<LoadBalancer> loadBalancers) { this.application = application; this.zone = zone; - this.list = list; + this.list = loadBalancers.stream() + // DNS no longer needs to maintain for load balancer in other states + // (e.g. inactive) than the following + .filter(lb -> lb.state() == LoadBalancer.State.active || + lb.state() == LoadBalancer.State.reserved) + .collect(Collectors.toUnmodifiableList()); } } diff --git a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPoliciesTest.java b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPoliciesTest.java index e6387ee3e0c..9be4eb5f5b4 100644 --- a/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPoliciesTest.java +++ b/controller-server/src/test/java/com/yahoo/vespa/hosted/controller/maintenance/RoutingPoliciesTest.java @@ -272,8 +272,17 @@ public class RoutingPoliciesTest { ClusterSpec.Id.from("c" + i), HostName.from("lb-" + i + "--" + application.serializedForm() + "--" + zone.value()), + LoadBalancer.State.active, Optional.of("dns-zone-1"))); } + // Add an inactive load balancers that should be ignored + loadBalancers.add(new LoadBalancer("inactive-LB-0-Z-" + zone.value(), + application, + ClusterSpec.Id.from("c0"), + HostName.from("lb-0--" + application.serializedForm() + + "--" + zone.value()), + LoadBalancer.State.inactive, + Optional.of("dns-zone-1"))); return loadBalancers; } |