[ https://issues.apache.org/jira/browse/KAFKA-3014?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Guozhang Wang resolved KAFKA-3014. ---------------------------------- Resolution: Fixed Fix Version/s: 0.9.0.1 Issue resolved by pull request 696 [https://github.com/apache/kafka/pull/696] > Integer overflow causes incorrect node iteration in leastLoadedNode() > ---------------------------------------------------------------------- > > Key: KAFKA-3014 > URL: https://issues.apache.org/jira/browse/KAFKA-3014 > Project: Kafka > Issue Type: Bug > Reporter: Jason Gustafson > Assignee: Jason Gustafson > Fix For: 0.9.0.1 > > > The leastLoadedNode() implementation iterates over all the known nodes to > find a suitable candidate for sending metadata. The loop looks like this: > {code} > for (int i = 0; i < nodes.size(); i++) { > int idx = Utils.abs((this.nodeIndexOffset + i) % nodes.size()); > Node node = nodes.get(idx); > ... > } > {code} > Unfortunately, this doesn't handle integer overflow correctly, which can > result in some nodes in the list being passed over. For example, if the size > of the node list is 5 and the random offset is Integer.MAX_VALUE, then the > loop will iterate over the following indices: 2, 3, 2, 1, 0. > In pathological cases, this can prevent the client from being able to connect > to good nodes in order to refresh metadata. -- This message was sent by Atlassian JIRA (v6.3.4#6332)