browserup / browserup-proxy

BrowserUp Proxy is a free utility to watch, test, and manipulate web application network traffic and performance.
https://browserup.com
Apache License 2.0
164 stars 41 forks source link

Make HarLog thread-safe #341

Closed valfirst closed 3 years ago

valfirst commented 3 years ago

The following exception is caused by concurrent read-write operations (proxy is adding new entries, while client is trying to read them):

java.util.ConcurrentModificationException
    at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1627)
    at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
    at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
    at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
    at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
    at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)
    at com.browserup.harreader.model.HarLog.findEntries(HarLog.java:178)
    at com.browserup.harreader.model.HarLog.findEntries(HarLog.java:172)

browsermob-proxy used CopyOnWriteArrayList which is thread-safe: https://github.com/lightbody/browsermob-proxy/blob/master/browsermob-core/src/main/java/net/lightbody/bmp/core/har/HarLog.java#L13-L14