[
https://issues.apache.org/jira/browse/CAMEL-16794?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-16794.
---------------------------------
Resolution: Fixed
> camel-core - race condition in LoopProcessor
> --------------------------------------------
>
> Key: CAMEL-16794
> URL: https://issues.apache.org/jira/browse/CAMEL-16794
> Project: Camel
> Issue Type: Bug
> Components: came-core, eip
> Affects Versions: 3.8.0, 3.11.0
> Reporter: Sergio Penkale
> Priority: Major
> Fix For: 3.11.1, 3.12.0
>
>
> I get random errors when using the Loop EIP with more than one concurrent
> request. It started happening from release 3.8.0.
> This reproduces it:
> {code:java}
> from("servlet:test")
> .log("test.exchangeId=${exchangeId}")
> .loop(1)
> .log("loop.exchangeId=${exchangeId}")
> .end();
> {code}
> When testing with the following the client times out:
> {code:java}
> ab -n1000 -c 2 http://localhost:8080/camel/test{code}
>
> Note in the logs below how thread 4 starts working on exchange
> {{0FBD82C2E690DA5-0000000000000018}} but then switches to exchange
> {{0FBD82C2E690DA5-0000000000000017}}
> This is because the state is created and then scheduled in a non atomic way,
> so by the time it gets scheduled another thread has changed it:
> {code:java}
> state = new LoopState(exchange, callback);
> if (exchange.isTransacted()) {
> reactiveExecutor.scheduleSync(state);
> } else {
> reactiveExecutor.scheduleMain(state);
> }
> {code}
> {code:java}
> 2021-07-08 10:04:28.717 TRACE 18495 --- [nio-8080-exec-4]
> o.a.c.i.engine.CamelInternalProcessor : Processing exchange for
> exchangeId: 0FBD82C2E690DA5-0000000000000018 ->
> Exchange[0FBD82C2E690DA5-0000000000000018]
> 2021-07-08 10:04:28.717 TRACE 18495 --- [nio-8080-exec-5]
> o.a.c.i.engine.CamelInternalProcessor : Processing exchange for
> exchangeId: 0FBD82C2E690DA5-0000000000000017 ->
> Exchange[0FBD82C2E690DA5-0000000000000017]
> 2021-07-08 10:04:28.717 TRACE 18495 --- [nio-8080-exec-4]
> o.a.c.i.engine.DefaultReactiveExecutor : Schedule [first=true, main=true,
> sync=false]: SimpleTask
> 2021-07-08 10:04:28.717 TRACE 18495 --- [nio-8080-exec-5]
> o.a.c.i.engine.DefaultReactiveExecutor : Schedule [first=true, main=true,
> sync=false]: SimpleTask
> 2021-07-08 10:04:28.717 TRACE 18495 --- [nio-8080-exec-4]
> o.a.c.i.engine.DefaultReactiveExecutor : Queuing reactive work: SimpleTask
> 2021-07-08 10:04:28.717 TRACE 18495 --- [nio-8080-exec-5]
> o.a.c.i.engine.DefaultReactiveExecutor : Queuing reactive work: SimpleTask
> 2021-07-08 10:04:28.717 TRACE 18495 --- [nio-8080-exec-4]
> o.a.c.i.engine.CamelInternalProcessor : Exchange processed and is
> continued routed asynchronously for exchangeId:
> 0FBD82C2E690DA5-0000000000000018 -> Exchange[0FBD82C2E690DA5-0000000000000018]
> 2021-07-08 10:04:28.717 TRACE 18495 --- [nio-8080-exec-5]
> o.a.c.i.engine.CamelInternalProcessor : Exchange processed and is
> continued routed asynchronously for exchangeId:
> 0FBD82C2E690DA5-0000000000000017 -> Exchange[0FBD82C2E690DA5-0000000000000017]
> 2021-07-08 10:04:28.717 TRACE 18495 --- [nio-8080-exec-4]
> o.a.c.i.engine.DefaultReactiveExecutor : Worker #4 running:
> org.apache.camel.processor.Pipeline$PipelineTask@3a83e1b8
> 2021-07-08 10:04:28.717 TRACE 18495 --- [nio-8080-exec-5]
> o.a.c.i.engine.DefaultReactiveExecutor : Worker #5 running:
> org.apache.camel.processor.Pipeline$PipelineTask@74d4d21
> 2021-07-08 10:04:28.717 TRACE 18495 --- [nio-8080-exec-5]
> o.a.c.i.c.CoreTypeConverterRegistry : Finding type converter to convert
> java.lang.String -> java.lang.Integer with value: 1
> 2021-07-08 10:04:28.717 TRACE 18495 --- [nio-8080-exec-4]
> o.a.c.i.c.CoreTypeConverterRegistry : Finding type converter to convert
> java.lang.String -> java.lang.Integer with value: 1
> 2021-07-08 10:04:28.717 TRACE 18495 --- [nio-8080-exec-5]
> o.a.c.i.c.CoreTypeConverterRegistry : Using bulk converter:
> CamelBaseBulkConverterLoader to convert [class java.lang.String=>class
> java.lang.Integer]
> 2021-07-08 10:04:28.717 TRACE 18495 --- [nio-8080-exec-4]
> o.a.c.i.c.CoreTypeConverterRegistry : Using bulk converter:
> CamelBaseBulkConverterLoader to convert [class java.lang.String=>class
> java.lang.Integer]
> 2021-07-08 10:04:28.718 TRACE 18495 --- [nio-8080-exec-4]
> o.a.c.i.engine.DefaultReactiveExecutor : Schedule [first=true, main=true,
> sync=false]: LoopState
> 2021-07-08 10:04:28.718 TRACE 18495 --- [nio-8080-exec-5]
> o.a.c.i.engine.DefaultReactiveExecutor : Schedule [first=true, main=true,
> sync=false]: LoopState
> 2021-07-08 10:04:28.718 TRACE 18495 --- [nio-8080-exec-4]
> o.a.c.i.engine.DefaultReactiveExecutor : Queuing reactive work: LoopState
> 2021-07-08 10:04:28.718 TRACE 18495 --- [nio-8080-exec-5]
> o.a.c.i.engine.DefaultReactiveExecutor : Queuing reactive work: LoopState
> 2021-07-08 10:04:28.718 TRACE 18495 --- [nio-8080-exec-4]
> o.a.c.i.engine.DefaultReactiveExecutor : Worker #4 running:
> org.apache.camel.processor.Pipeline$PipelineTask@3a83e1b8
> 2021-07-08 10:04:28.718 TRACE 18495 --- [nio-8080-exec-5]
> o.a.c.i.engine.DefaultReactiveExecutor : Worker #5 running:
> org.apache.camel.processor.Pipeline$PipelineTask@74d4d21
> 2021-07-08 10:04:28.718 DEBUG 18495 --- [nio-8080-exec-4]
> o.apache.camel.processor.LoopProcessor : LoopProcessor: iteration #0
> 2021-07-08 10:04:28.718 DEBUG 18495 --- [nio-8080-exec-5]
> o.apache.camel.processor.LoopProcessor : LoopProcessor: iteration #0
> 2021-07-08 10:04:28.718 TRACE 18495 --- [nio-8080-exec-4]
> o.a.c.i.engine.CamelInternalProcessor : Processing exchange for
> exchangeId: 0FBD82C2E690DA5-0000000000000017 ->
> Exchange[0FBD82C2E690DA5-0000000000000017]
> 2021-07-08 10:04:28.718 TRACE 18495 --- [nio-8080-exec-4]
> o.a.c.i.engine.DefaultReactiveExecutor : Schedule [first=true, main=true,
> sync=false]: SimpleTask
> 2021-07-08 10:04:28.718 TRACE 18495 --- [nio-8080-exec-4]
> o.a.c.i.engine.DefaultReactiveExecutor : Queuing reactive work: SimpleTask
> 2021-07-08 10:04:28.718 TRACE 18495 --- [nio-8080-exec-5]
> o.a.c.i.engine.CamelInternalProcessor : Processing exchange for
> exchangeId: 0FBD82C2E690DA5-0000000000000017 ->
> Exchange[0FBD82C2E690DA5-0000000000000017]
> {code}
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)