[
https://issues.apache.org/jira/browse/CAMEL-14136?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-14136.
---------------------------------
Fix Version/s: 3.0.0
Resolution: Fixed
Thanks for the PR
> ConcurrentModificationException when using recipientList with Strings
> ---------------------------------------------------------------------
>
> Key: CAMEL-14136
> URL: https://issues.apache.org/jira/browse/CAMEL-14136
> Project: Camel
> Issue Type: Bug
> Components: camel-core
> Affects Versions: 3.0.0.RC3
> Environment: Java 11, Camel 3.0.0RC3
> Reporter: Christian Mohr
> Priority: Major
> Fix For: 3.0.0
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> I already asked this on the mailing list:
> I encountered a ConcurrentModificationException in Camel:
> {code:java}
> java.util.ConcurrentModificationException: null
> at
> java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1134)
> at
> org.apache.camel.util.Scanner.cachePattern(Scanner.java:305)
> at org.apache.camel.util.Scanner.<init>(Scanner.java:82)
> at
> org.apache.camel.support.ObjectHelper.lambda$createIterable$3(ObjectHelper.java:593)
>
> at
> org.apache.camel.support.ObjectHelper$$Lambda$1118.0000000000000000.iterator(Unknown
> Source)
> at
> org.apache.camel.support.ObjectHelper.createIterator(ObjectHelper.java:435)
> at
> org.apache.camel.support.ObjectHelper.createIterator(ObjectHelper.java:412)
> at
> org.apache.camel.processor.RecipientList.sendToRecipientList(RecipientList.java:137)
>
> at
> org.apache.camel.processor.RecipientList.process(RecipientList.java:125)
> at
> org.apache.camel.processor.Pipeline.doProcess(Pipeline.java:103)
> at
> org.apache.camel.processor.Pipeline.lambda$null$2(Pipeline.java:104)
> at
> org.apache.camel.processor.Pipeline$$Lambda$1096.0000000000000000.run(Unknown
> Source)
> at
> org.apache.camel.impl.engine.DefaultReactiveExecutor$3.run(DefaultReactiveExecutor.java:116)
>
> at
> org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:185)
>
> at
> org.apache.camel.impl.engine.DefaultReactiveExecutor.schedule(DefaultReactiveExecutor.java:67)
>
> at
> org.apache.camel.spi.ReactiveExecutor.schedule(ReactiveExecutor.java:32)
> at
> org.apache.camel.processor.MulticastProcessor.lambda$schedule$1(MulticastProcessor.java:249)
>
> at
> org.apache.camel.processor.MulticastProcessor$$Lambda$1099.0000000000000000.run(Unknown
> Source)
> at
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
>
> at
> java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
>
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
>
> at java.base/java.lang.Thread.run(Thread.java:831) {code}
> My simplified route is as follows. The input is a list of objects, these are
> split, and based on the object the recipientList is different. When there are
> two recipients in the String provided by „getRecipients", the named exception
> is thrown. Sadly not consistently.
> {code:java}
> from("seda:input")
> .split(method(TestClass.class, "split"),
> AggregationStrategies.groupedBody())
> .parallelProcessing()
> .recipientList(method(TestClass.class, "getRecipients"))
> .parallelProcessing() {code}
> It looks like the Scanner uses an internal map of compiled Patterns, but this
> map (LinkedHashMap) is not threadsafe.
>
> Response from Claus Ibsen:
> Yeah its a bug in Camel 3, you are surely welcome to log a JIRA ticket
> and work on a patch.
> I can see we (gnodet) introduced a custom fast scanner implementation,
> but its not thread safe.
> We could add synchronization block to that compute if absent. And for
> those constant patterns WHITE_SPACE, FIND_ANY etc we can make them
> static
> as java.util.Pattern is thread-safe and create them once in a class
> static block.
>
> I did that and will post a PR-Request to the github project shortly, when the
> ticket number is known.
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)