You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (JIRA)" <ji...@apache.org> on 2015/06/03 18:13:39 UTC

[jira] [Commented] (CAMEL-8829) ConcurrentModificationException while logging

    [ https://issues.apache.org/jira/browse/CAMEL-8829?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14571267#comment-14571267 ] 

Claus Ibsen commented on CAMEL-8829:
------------------------------------

Yeah its the seda producer when you use wait=never that does a shallow copy and therefore its the same header map that the 2 loggers are using, and as they are routed concurrently then that exception may happen.

The fix would be to force the seda producer to copy the headers defensivly instead of shallow.

> ConcurrentModificationException while logging
> ---------------------------------------------
>
>                 Key: CAMEL-8829
>                 URL: https://issues.apache.org/jira/browse/CAMEL-8829
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 2.15.2
>            Reporter: Stanislav Filyuta
>            Assignee: Claus Ibsen
>
> There is a route which consumes messages from CXFRS endpoint.
> It publishes them into 2 SEDA endpoints:
> {code}
> from("direct:someCxfRsEndpoint")
>    ...
>    .to("seda:queue1?waitForTaskToComplete=Never&size=100&blockWhenFull=true&concurrentConsumers=1")
>    .to("seda:queue2?waitForTaskToComplete=Never&size=100&blockWhenFull=true&concurrentConsumers=1")
>    ...
> {code}
> Both the seda consumers print the message into log:
> {code}
> from("seda..")
>    ...
>    .to("log:queuelog?showAll=true&multiline=true")
> {code}
> ConcurrentModificationException is thrown during logging the message:
> {code}
> Error processing exchange. Exchange[Message: ...]. Caused by: [java.util.ConcurrentModificationException - null]
> java.util.ConcurrentModificationException: null
>         at java.util.HashMap$HashIterator.nextNode(HashMap.java:1429) ~[na:1.8.0_40]
>         at java.util.HashMap$EntryIterator.next(HashMap.java:1463) ~[na:1.8.0_40]
>         at java.util.HashMap$EntryIterator.next(HashMap.java:1461) ~[na:1.8.0_40]
>         at java.util.AbstractMap.toString(AbstractMap.java:531) ~[na:1.8.0_40]
>         at java.lang.String.valueOf(String.java:2982) ~[na:1.8.0_40]
>         at java.lang.StringBuilder.append(StringBuilder.java:131) ~[na:1.8.0_40]
>         at java.util.AbstractMap.toString(AbstractMap.java:536) ~[na:1.8.0_40]
>         at java.lang.String.valueOf(String.java:2982) ~[na:1.8.0_40]
>         at java.lang.StringBuilder.append(StringBuilder.java:131) ~[na:1.8.0_40]
>         at org.apache.camel.processor.DefaultExchangeFormatter.format(DefaultExchangeFormatter.java:99) ~[camel-core-2.15.2.jar:2.15.2]
>         at org.apache.camel.processor.CamelLogProcessor.process(CamelLogProcessor.java:66) ~[camel-core-2.15.2.jar:2.15.2]
>         at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109) ~[camel-core-2.15.2.jar:2.15.2]
>         at org.apache.camel.processor.CamelLogProcessor.process(CamelLogProcessor.java:61) ~[camel-core-2.15.2.jar:2.15.2]
>         at org.apache.camel.component.log.LogProducer.process(LogProducer.java:39) ~[camel-core-2.15.2.jar:2.15.2]
>         at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:129) ~[camel-core-2.15.2.jar:2.15.2]
>         at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) ~[camel-core-2.15.2.jar:2.15.2]
>         at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:448) ~[camel-core-2.15.2.jar:2.15.2]
>         at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191) ~[camel-core-2.15.2.jar:2.15.2]
>         at org.apache.camel.processor.Pipeline.process(Pipeline.java:118) ~[camel-core-2.15.2.jar:2.15.2]
>         at org.apache.camel.processor.Pipeline.process(Pipeline.java:80) ~[camel-core-2.15.2.jar:2.15.2]
>         at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191) ~[camel-core-2.15.2.jar:2.15.2]
>         at org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:291) [camel-core-2.15.2.jar:2.15.2]
>         at org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:200) [camel-core-2.15.2.jar:2.15.2]
>         at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:147) [camel-core-2.15.2.jar:2.15.2]
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_40]
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_40]
>         at java.lang.Thread.run(Thread.java:745) [na:1.8.0_40]
> {code}
> There is also another cause when it happens:
> {code}
>  org.eclipse.jetty.http.HttpFields -
> java.util.ConcurrentModificationException: null
> at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901) ~[na:1.8.0_40]
> at java.util.ArrayList$Itr.next(ArrayList.java:851) ~[na:1.8.0_40]
> at org.eclipse.jetty.http.HttpFields.toString(HttpFields.java:585) ~[jetty-http-9.2.9.v20150224.jar:9.2.9.v20150224]
> at java.util.Formatter$FormatSpecifier.printString(Formatter.java:2886) [na:1.8.0_40]
> at java.util.Formatter$FormatSpecifier.print(Formatter.java:2763) [na:1.8.0_40]
> at java.util.Formatter.format(Formatter.java:2520) [na:1.8.0_40]
> at java.util.Formatter.format(Formatter.java:2455) [na:1.8.0_40]
> at java.lang.String.format(String.java:2928) [na:1.8.0_40]
> at org.eclipse.jetty.server.Response.toString(Response.java:1331) [jetty-server-9.2.9.v20150224.jar:9.2.9.v20150224]
> at java.lang.String.valueOf(String.java:2982) [na:1.8.0_40]
> at java.lang.StringBuilder.append(StringBuilder.java:131) [na:1.8.0_40]
> at java.util.AbstractMap.toString(AbstractMap.java:536) [na:1.8.0_40]
> at java.lang.String.valueOf(String.java:2982) [na:1.8.0_40]
> at java.lang.StringBuilder.append(StringBuilder.java:131) [na:1.8.0_40]
> at java.util.AbstractMap.toString(AbstractMap.java:536) [na:1.8.0_40]
> at java.lang.String.valueOf(String.java:2982) [na:1.8.0_40]
> at java.lang.StringBuilder.append(StringBuilder.java:131) [na:1.8.0_40]
> at org.apache.camel.processor.DefaultExchangeFormatter.format(DefaultExchangeFormatter.java:99) [camel-core-2.15.2.jar:2.15.2]
> at org.apache.camel.processor.CamelLogProcessor.process(CamelLogProcessor.java:66) [camel-core-2.15.2.jar:2.15.2]
> at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:109) [camel-core-2.15.2.jar:2.15.2]
> at org.apache.camel.processor.CamelLogProcessor.process(CamelLogProcessor.java:61) [camel-core-2.15.2.jar:2.15.2]
> at org.apache.camel.component.log.LogProducer.process(LogProducer.java:39) [camel-core-2.15.2.jar:2.15.2]
> at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:129) [camel-core-2.15.2.jar:2.15.2]
> at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:77) [camel-core-2.15.2.jar:2.15.2]
> at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:448) [camel-core-2.15.2.jar:2.15.2]
> at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191) [camel-core-2.15.2.jar:2.15.2]
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:118) [camel-core-2.15.2.jar:2.15.2]
> at org.apache.camel.processor.Pipeline.process(Pipeline.java:80) [camel-core-2.15.2.jar:2.15.2]
> at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:191) [camel-core-2.15.2.jar:2.15.2]
> at org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:291) [camel-core-2.15.2.jar:2.15.2]
> at org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:200) [camel-core-2.15.2.jar:2.15.2]
> at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:147) [camel-core-2.15.2.jar:2.15.2]
> at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_40]
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_40]
> at java.lang.Thread.run(Thread.java:745) [na:1.8.0_40]
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)