From cfa6f94d4c89d673a7e08ab811d2b55f38b91ade Mon Sep 17 00:00:00 2001 From: Ryan Jobse Date: Tue, 3 Sep 2024 12:22:14 -0400 Subject: [PATCH] checking newNode size to make sure its not 0 (#520) * checking newNode size to make sure its not 0 --- .../org/apache/kafka/clients/NetworkClient.java | 4 ++++ .../apache/kafka/clients/NetworkClientTest.java | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/clients/src/main/java/org/apache/kafka/clients/NetworkClient.java b/clients/src/main/java/org/apache/kafka/clients/NetworkClient.java index 7dc81279a33a..0dbb169a65e4 100644 --- a/clients/src/main/java/org/apache/kafka/clients/NetworkClient.java +++ b/clients/src/main/java/org/apache/kafka/clients/NetworkClient.java @@ -990,6 +990,10 @@ public Node leastLoadedNode(long now) { newNodes.add(new Node(nodeId--, address.getHostString(), address.getPort())); } + if (newNodes.size() == 0) { + return null; + } + int offset = this.randOffset.nextInt(newNodes.size()); Node node = newNodes.get(offset); log.trace("Resolved bootstrap server again, randomly picked node {} as least loaded node from the resolved node set", node); diff --git a/clients/src/test/java/org/apache/kafka/clients/NetworkClientTest.java b/clients/src/test/java/org/apache/kafka/clients/NetworkClientTest.java index c6a50ffa3621..d0a5326786da 100644 --- a/clients/src/test/java/org/apache/kafka/clients/NetworkClientTest.java +++ b/clients/src/test/java/org/apache/kafka/clients/NetworkClientTest.java @@ -18,6 +18,7 @@ import java.util.PriorityQueue; import org.apache.kafka.common.Cluster; +import org.apache.kafka.common.config.ConfigException; import org.apache.kafka.common.KafkaException; import org.apache.kafka.common.Node; import org.apache.kafka.common.errors.AuthenticationException; @@ -631,6 +632,19 @@ public void testResolveBootstrapInLeastLoadedNode() { assertNotEquals(node, clusterClient.leastLoadedNode(time.milliseconds())); } + @Test + public void noLeastLoadedNode() { + NetworkClient nc = new NetworkClient(selector, clusterMetadataUpdater, "mock-cluster-md", Integer.MAX_VALUE, + 0, 0, 64 * 1024, 64 * 1024, + defaultRequestTimeoutMs, connectionSetupTimeoutMsTest, connectionSetupTimeoutMaxMsTest, time, true, new ApiVersions(), new LogContext(), + LeastLoadedNodeAlgorithm.VANILLA, new ArrayList<>()); + nc.ready(node, time.milliseconds()); + assertFalse(client.isReady(node, time.milliseconds())); + assertThrows(ConfigException.class, () -> nc.leastLoadedNode(time.milliseconds())); + + assertEquals(null, nc.leastLoadedNode(time.milliseconds())); + } + @Test public void testLeastLoadedNode() { client.ready(node, time.milliseconds());