diff options
author | Martin Polden <mpolden@mpolden.no> | 2019-06-24 14:11:18 +0200 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2019-06-24 14:12:35 +0200 |
commit | 64252d189f3f03e6c00350547ff04c0949a5a9e8 (patch) | |
tree | ea1961afe2f6d997d2f9a81445f935c71b7a2353 /node-repository | |
parent | 85c34d2da774009094ed6352147de7e503288d10 (diff) |
Never provision a new LB in activate
Diffstat (limited to 'node-repository')
2 files changed, 29 insertions, 4 deletions
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 ca7ee1b13a1..4e5d483c171 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 @@ -103,10 +103,11 @@ public class LoadBalancerProvisioner { try (var loadBalancersLock = db.lockLoadBalancers()) { var id = new LoadBalancerId(application, clusterId); var now = nodeRepository.clock().instant(); - var instance = create(application, clusterId, allocatedContainers(application, clusterId)); var loadBalancer = db.readLoadBalancers().get(id); + if (loadBalancer == null && activate) return; // Nothing to activate as this load balancer was never prepared + + var instance = create(application, clusterId, allocatedContainers(application, clusterId)); if (loadBalancer == null) { - if (activate) return; // Nothing to activate as this load balancer was never prepared loadBalancer = new LoadBalancer(id, instance, LoadBalancer.State.reserved, now); } else { var newState = activate ? LoadBalancer.State.active : loadBalancer.state(); 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 0b3c3d209be..dbdff1e5567 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 @@ -9,6 +9,7 @@ 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; import com.yahoo.transaction.NestedTransaction; import com.yahoo.vespa.hosted.provision.Node; import com.yahoo.vespa.hosted.provision.lb.LoadBalancer; @@ -37,6 +38,8 @@ public class LoadBalancerProvisionerTest { private final ApplicationId app1 = ApplicationId.from("tenant1", "application1", "default"); private final ApplicationId app2 = ApplicationId.from("tenant2", "application2", "default"); + private final ApplicationId infraApp1 = ApplicationId.from("vespa", "tenant-host", "default"); + private ProvisioningTester tester = new ProvisioningTester.Builder().build(); @Test @@ -131,15 +134,36 @@ public class LoadBalancerProvisionerTest { .orElseThrow()); } + @Test + public void does_not_provision_load_balancers_for_non_tenant_host() { + tester.activate(infraApp1, prepare(infraApp1, Capacity.fromRequiredNodeType(NodeType.host), + clusterRequest(ClusterSpec.Type.container, + ClusterSpec.Id.from("tenant-host")))); + assertTrue("No load balancer provisioned", tester.loadBalancerService().instances().isEmpty()); + assertEquals(List.of(), tester.nodeRepository().loadBalancers().owner(infraApp1).asList()); + } + + @Test + public void does_not_provision_load_balancers_for_non_container_cluster() { + tester.activate(app1, prepare(app1, clusterRequest(ClusterSpec.Type.content, + ClusterSpec.Id.from("tenant-host")))); + assertTrue("No load balancer provisioned", tester.loadBalancerService().instances().isEmpty()); + assertEquals(List.of(), tester.nodeRepository().loadBalancers().owner(app1).asList()); + } + private void dirtyNodesOf(ApplicationId application) { tester.nodeRepository().setDirty(tester.nodeRepository().getNodes(application), Agent.system, this.getClass().getSimpleName()); } private Set<HostSpec> prepare(ApplicationId application, ClusterSpec... specs) { - tester.makeReadyNodes(specs.length * 2, "d-1-1-1"); + return prepare(application, Capacity.fromCount(2, new NodeResources(1, 1, 1), false, true), specs); + } + + private Set<HostSpec> prepare(ApplicationId application, Capacity capacity, ClusterSpec... specs) { + tester.makeReadyNodes(specs.length * 2, "d-1-1-1", capacity.type()); Set<HostSpec> allNodes = new LinkedHashSet<>(); for (ClusterSpec spec : specs) { - allNodes.addAll(tester.prepare(application, spec, Capacity.fromCount(2, new NodeResources(1, 1, 1), false, true), 1, false)); + allNodes.addAll(tester.prepare(application, spec, capacity, 1, false)); } return allNodes; } |