From b7fe294fa0e8410e95ed41c668c4dc492a5df7e8 Mon Sep 17 00:00:00 2001 From: "Marco N." Date: Tue, 10 Feb 2026 21:18:49 +0100 Subject: [PATCH] Add node count and next-node selection to LoadBalancer API Closes #46156 Signed-off-by: Marco Neuhaus --- .../testframework/clustering/LoadBalancer.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/test-framework/clustering/src/main/java/org/keycloak/testframework/clustering/LoadBalancer.java b/test-framework/clustering/src/main/java/org/keycloak/testframework/clustering/LoadBalancer.java index 820f16c29cf..521528ec3f7 100644 --- a/test-framework/clustering/src/main/java/org/keycloak/testframework/clustering/LoadBalancer.java +++ b/test-framework/clustering/src/main/java/org/keycloak/testframework/clustering/LoadBalancer.java @@ -25,6 +25,8 @@ public class LoadBalancer { private final Vertx vertx; private final HttpProxy proxy; + private int currentNodeIndex = 0; + public LoadBalancer(ClusteredKeycloakServer server) { this.server = server; @@ -38,7 +40,7 @@ public class LoadBalancer { return ProxyInterceptor.super.handleProxyRequest(context); } }); - node(0); + node(currentNodeIndex); HttpServer proxyServer = vertx.createHttpServer(); proxyServer.requestHandler(proxy).listen(9999, "localhost"); @@ -46,6 +48,7 @@ public class LoadBalancer { public void node(int index) { Origin origin = origin(index); + currentNodeIndex = index; LOGGER.debugf("Setting proxy origin to: %s:%d", origin.host, origin.port); proxy.origin(origin.port, origin.host); } @@ -54,6 +57,14 @@ public class LoadBalancer { return origin(index).urls; } + public int nodeCount() { + return server.clusterSize(); + } + + public void nextNode() { + node((currentNodeIndex + 1) % nodeCount()); + } + private Origin origin(int index) { if (index >= server.clusterSize()) { throw new IllegalArgumentException("Node index out of bounds. Requested nodeIndex: %d, cluster size: %d".formatted(server.clusterSize(), index));