aboutsummaryrefslogtreecommitdiffstats
path: root/node-repository
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2021-11-08 13:02:49 +0100
committerMartin Polden <mpolden@mpolden.no>2021-11-08 13:02:49 +0100
commit12a49711b0a38a1c3db2d8897bde15f96163bfdf (patch)
tree0704ee65d1d011898b5ddd914546a4a4e2ff2ca2 /node-repository
parent3959ca81f62551ea1e86934f0517902cc5305d6f (diff)
Use VIP hostname in SharedLoadBalancerService
Diffstat (limited to 'node-repository')
-rw-r--r--node-repository/src/main/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerService.java31
-rw-r--r--node-repository/src/test/java/com/yahoo/vespa/hosted/provision/lb/SharedLoadBalancerServiceTest.java4
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());