[ https://issues.apache.org/jira/browse/GEODE-8195?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Bill Burcham updated GEODE-8195: -------------------------------- Description: this code in {{LocatorMembershipListenerImpl$DistributeLocatorsRunnable.run}}: {code} Set<LocatorJoinMessage> joinMessages = entry.getValue(); for (LocatorJoinMessage locatorJoinMessage : joinMessages) { if (retryMessage(targetLocator, locatorJoinMessage, attempt)) { joinMessages.remove(locatorJoinMessage); } else { {code} modifies the {{joinMessages}} set as it is iterating over the set, resulting in a {{ConcurrentModificationException}}. Here is a scratch file that illustrates the issue: {code} import java.util.HashSet; import java.util.Set; class Scratch { public static void main(String[] args) { final Set<String> joinMessages = new HashSet<>(); joinMessages.add("one"); joinMessages.add("two"); for( final String entry:joinMessages ) { if (entry.equals("one")) joinMessages.remove(entry); } } } {code} >From looking at the Geode code, {{joinMessages}} is not used outside the loop >so there is no need to modify it at all—I think we can simply remove this line: {code} joinMessages.remove(locatorJoinMessage); {code} was: this code: {code} Set<LocatorJoinMessage> joinMessages = entry.getValue(); for (LocatorJoinMessage locatorJoinMessage : joinMessages) { if (retryMessage(targetLocator, locatorJoinMessage, attempt)) { joinMessages.remove(locatorJoinMessage); } else { {code} modifies the {{joinMessages}} set as it is iterating over the set, resulting in a {{ConcurrentModificationException}}. Here is a scratch file that illustrates the issue: {code} import java.util.HashSet; import java.util.Set; class Scratch { public static void main(String[] args) { final Set<String> joinMessages = new HashSet<>(); joinMessages.add("one"); joinMessages.add("two"); for( final String entry:joinMessages ) { if (entry.equals("one")) joinMessages.remove(entry); } } } {code} >From looking at the Geode code, {{joinMessages}} is not used outside the loop >so there is no need to modify it at all—I think we can simply remove this line: {code} joinMessages.remove(locatorJoinMessage); {code} > ConcurrentModificationException from > LocatorMembershipListenerImpl$DistributeLocatorsRunnable.run > ------------------------------------------------------------------------------------------------- > > Key: GEODE-8195 > URL: https://issues.apache.org/jira/browse/GEODE-8195 > Project: Geode > Issue Type: Bug > Components: membership > Reporter: Bill Burcham > Priority: Major > > this code in {{LocatorMembershipListenerImpl$DistributeLocatorsRunnable.run}}: > {code} > Set<LocatorJoinMessage> joinMessages = entry.getValue(); > for (LocatorJoinMessage locatorJoinMessage : joinMessages) { > if (retryMessage(targetLocator, locatorJoinMessage, attempt)) { > joinMessages.remove(locatorJoinMessage); > } else { > {code} > modifies the {{joinMessages}} set as it is iterating over the set, resulting > in a {{ConcurrentModificationException}}. > Here is a scratch file that illustrates the issue: > {code} > import java.util.HashSet; > import java.util.Set; > class Scratch { > public static void main(String[] args) { > final Set<String> joinMessages = new HashSet<>(); > joinMessages.add("one"); > joinMessages.add("two"); > for( final String entry:joinMessages ) { > if (entry.equals("one")) > joinMessages.remove(entry); > } > } > } > {code} > From looking at the Geode code, {{joinMessages}} is not used outside the loop > so there is no need to modify it at all—I think we can simply remove this > line: > {code} > joinMessages.remove(locatorJoinMessage); > {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)