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);

Reply via email to