diff options
author | Martin Polden <mpolden@mpolden.no> | 2021-11-08 13:02:49 +0100 |
---|---|---|
committer | Martin Polden <mpolden@mpolden.no> | 2021-11-08 13:02:49 +0100 |
commit | 12a49711b0a38a1c3db2d8897bde15f96163bfdf (patch) | |
tree | 0704ee65d1d011898b5ddd914546a4a4e2ff2ca2 /node-repository | |
parent | 3959ca81f62551ea1e86934f0517902cc5305d6f (diff) |
Use VIP hostname in SharedLoadBalancerService
Diffstat (limited to 'node-repository')
2 files changed, 16 insertions, 19 deletions
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 44fc8cf53b5..7dbebd1fc47 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 @@ -17,8 +17,11 @@ import java.util.Set; import java.util.stream.Collectors; /** - * This code mimics provisioning load balancers that already exist in the routing layer. - * It will just map the load balancer request to the proxy nodes available in the node repository. + * This implementation of {@link LoadBalancerService} returns the load balancer(s) that exists by default in the shared + * routing layer. + * + * Since such load balancers always exist, we can return the hostname of the routing layer VIP and the networks of the + * proxy nodes directly. Nothing has to be provisioned. * * @author ogronnesby */ @@ -27,32 +30,26 @@ public class SharedLoadBalancerService implements LoadBalancerService { private static final Comparator<Node> hostnameComparator = Comparator.comparing(Node::hostname); private final NodeRepository nodeRepository; + private final String vipHostname; - public SharedLoadBalancerService(NodeRepository nodeRepository) { + public SharedLoadBalancerService(NodeRepository nodeRepository, String vipHostname) { this.nodeRepository = Objects.requireNonNull(nodeRepository); + this.vipHostname = Objects.requireNonNull(vipHostname); } @Override public LoadBalancerInstance create(LoadBalancerSpec spec, boolean force) { NodeList proxyNodes = nodeRepository.nodes().list().nodeType(NodeType.proxy).sortedBy(hostnameComparator); - - if (proxyNodes.size() == 0) { - throw new IllegalStateException("Missing proxy nodes in node repository"); - } - - Node firstProxyNode = proxyNodes.first().get(); + if (proxyNodes.isEmpty()) throw new IllegalStateException("No proxy nodes found in node-repository"); Set<String> networks = proxyNodes.stream() .flatMap(node -> node.ipConfig().primary().stream()) .map(SharedLoadBalancerService::withPrefixLength) .collect(Collectors.toSet()); - - return new LoadBalancerInstance( - HostName.from(firstProxyNode.hostname()), - Optional.empty(), - Set.of(4080, 4443), - networks, - spec.reals() - ); + return new LoadBalancerInstance(HostName.from(vipHostname), + Optional.empty(), + Set.of(4080, 4443), + networks, + spec.reals()); } @Override 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 bcde89152bb..28b40bb7642 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 @@ -19,7 +19,7 @@ import static org.junit.Assert.assertEquals; public class SharedLoadBalancerServiceTest { private final ProvisioningTester tester = new ProvisioningTester.Builder().build(); - private final SharedLoadBalancerService loadBalancerService = new SharedLoadBalancerService(tester.nodeRepository()); + private final SharedLoadBalancerService loadBalancerService = new SharedLoadBalancerService(tester.nodeRepository(), "vip.example.com"); 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( @@ -32,7 +32,7 @@ public class SharedLoadBalancerServiceTest { tester.makeReadyNodes(2, "default", NodeType.proxy); var lb = loadBalancerService.create(new LoadBalancerSpec(applicationId, clusterId, reals), false); - assertEquals(HostName.from("host-1.yahoo.com"), lb.hostname()); + assertEquals(HostName.from("vip.example.com"), lb.hostname()); assertEquals(Optional.empty(), lb.dnsZone()); assertEquals(Set.of("127.0.0.1/32", "127.0.0.2/32", "::1/128", "::2/128"), lb.networks()); assertEquals(Set.of(4080, 4443), lb.ports()); |