This is an automated email from the ASF dual-hosted git repository.
penghui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push:
new 21a25bfb569 [fix][broker] Avoid ConcurrentModificationException for
ModularLoadManagerImpl.cleanupDeadBrokersData() (#16690)
21a25bfb569 is described below
commit 21a25bfb569396f2cdcffacd85f0a742782daa38
Author: Penghui Li <[email protected]>
AuthorDate: Wed Jul 20 23:12:06 2022 +0800
[fix][broker] Avoid ConcurrentModificationException for
ModularLoadManagerImpl.cleanupDeadBrokersData() (#16690)
---
.../pulsar/broker/loadbalance/impl/ModularLoadManagerImpl.java | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImpl.java
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImpl.java
index e9f7057c61a..5cb30eb6ad5 100644
---
a/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImpl.java
+++
b/pulsar-broker/src/main/java/org/apache/pulsar/broker/loadbalance/impl/ModularLoadManagerImpl.java
@@ -485,10 +485,11 @@ public class ModularLoadManagerImpl implements
ModularLoadManager {
private void cleanupDeadBrokersData() {
final Set<String> activeBrokers = getAvailableBrokers();
- Collection<String> newBrokers =
CollectionUtils.subtract(activeBrokers, knownBrokers);
- knownBrokers.addAll(newBrokers);
- Collection<String> deadBrokers =
CollectionUtils.subtract(knownBrokers, activeBrokers);
- knownBrokers.removeAll(deadBrokers);
+ final Set<String> knownBrokersCopy = new HashSet<>(this.knownBrokers);
+ Collection<String> newBrokers =
CollectionUtils.subtract(activeBrokers, knownBrokersCopy);
+ this.knownBrokers.addAll(newBrokers);
+ Collection<String> deadBrokers =
CollectionUtils.subtract(knownBrokersCopy, activeBrokers);
+ this.knownBrokers.removeAll(deadBrokers);
if (pulsar.getLeaderElectionService() != null
&& pulsar.getLeaderElectionService().isLeader()) {
deadBrokers.forEach(this::deleteTimeAverageDataFromMetadataStoreAsync);