hangc0276 opened a new pull request #10536:
URL: https://github.com/apache/pulsar/pull/10536


   ### Motivation
   In broker shutting down stage, it throw the following exception.
   ```
   11:31:55.887 [metadata-store-5-1] ERROR 
org.apache.pulsar.metadata.impl.AbstractMetadataStore - Failed to process 
metadata store notification
   java.util.ConcurrentModificationException: null
           at 
java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1553) 
~[?:1.8.0_131]
           at 
java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481) 
~[?:1.8.0_131]
           at 
java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471) 
~[?:1.8.0_131]
           at 
java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:151) 
~[?:1.8.0_131]
           at 
java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:174)
 ~[?:1.8.0_131]
           at 
java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) 
~[?:1.8.0_131]
           at 
java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:418) 
~[?:1.8.0_131]
           at 
org.apache.pulsar.metadata.coordination.impl.LockManagerImpl.handleDataNotification(LockManagerImpl.java:120)
 ~[pulsar-metadata-2.8.0-SNAPSHOT.jar:2.8.0-SNAPSHOT]
           at 
org.apache.pulsar.metadata.impl.AbstractMetadataStore.lambda$null$0(AbstractMetadataStore.java:141)
 ~[pulsar-metadata-2.8.0-SNAPSHOT.jar:2.8.0-SNAPSHOT]
           at 
java.util.concurrent.CopyOnWriteArrayList.forEach(CopyOnWriteArrayList.java:890)
 ~[?:1.8.0_131]
           at 
org.apache.pulsar.metadata.impl.AbstractMetadataStore.lambda$receivedNotification$1(AbstractMetadataStore.java:139)
 ~[pulsar-metadata-2.8.0-SNAPSHOT.jar:2.8.0-SNAPSHOT
   ]
           at 
java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1590)
 [?:1.8.0_131]
           at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
[?:1.8.0_131]
           at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
[?:1.8.0_131]
           at 
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
 [netty-common-4.1.63.Final.jar:4.1.63.Final]
           at java.lang.Thread.run(Thread.java:748) [?:1.8.0_131]
   ```
   
   When using `locks.stream.filter()`, it get a set contains the result. Then 
use foreach to traverse the elements. 
   However, when the elements remove by another thread, the foreach will throw 
exception.
   
   ### Modification
   1. use for loop instead of stream to traverse the locks set.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to