Arian Treffer created CAMEL-14891:
-------------------------------------
Summary: Race condition using toD
Key: CAMEL-14891
URL: https://issues.apache.org/jira/browse/CAMEL-14891
Project: Camel
Issue Type: Bug
Components: camel-metrics
Affects Versions: 3.2.0
Reporter: Arian Treffer
I'm not sure which components are affected by this. I noticed this with the
metrics component but it might be a general issue. Consider these two stack
traces:
{{"Camel (camel-1) thread #7 - my-thread-1"}}
{{ at
org.apache.camel.component.metrics.MetricsComponent.doInit(MetricsComponent.java:137)}}
{{ at org.apache.camel.support.service.BaseService.init(BaseService.java:83)}}
{{ at org.apache.camel.support.service.BaseService.start(BaseService.java:111)}}
{{ at
org.apache.camel.impl.engine.AbstractCamelContext.startService(AbstractCamelContext.java:3056)}}
{{ at
org.apache.camel.impl.engine.AbstractCamelContext.getComponent(AbstractCamelContext.java:537)}}
{{ at
org.apache.camel.impl.engine.AbstractCamelContext.getComponent(AbstractCamelContext.java:500)}}
{{ at
org.apache.camel.impl.engine.AbstractCamelContext.doGetEndpoint(AbstractCamelContext.java:831)}}
{{ at
org.apache.camel.impl.engine.AbstractCamelContext.getEndpoint(AbstractCamelContext.java:769)}}
{{ at
org.apache.camel.support.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:72)}}
{{ at
org.apache.camel.support.ExchangeHelper.resolveEndpoint(ExchangeHelper.java:114)}}
{{ at
org.apache.camel.support.ExchangeHelper.resolveEndpoint(ExchangeHelper.java:92)}}
{{ at
org.apache.camel.processor.SendDynamicProcessor.resolveEndpoint(SendDynamicProcessor.java:289)}}
{{ at
org.apache.camel.processor.SendDynamicProcessor.process(SendDynamicProcessor.java:157)}}
{{ at
org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:395)}}
{{ at
org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)}}
{{ at
org.apache.camel.impl.engine.DefaultReactiveExecutor.schedule(DefaultReactiveExecutor.java:55)}}
{{ at
org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.lambda$run$0(RedeliveryErrorHandler.java:398)}}
{{ at
org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask$$Lambda$742.2026232778.done}}
{{ at
org.apache.camel.processor.ThreadsProcessor$ProcessCall.run(ThreadsProcessor.java:88)}}
{{ at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)}}
{{ at java.util.concurrent.FutureTask.run(FutureTask.java:266)}}
{{ at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)}}
{{ at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)}}
{{ at java.lang.Thread.run(Thread.java:748)}}
{{"Camel (camel-1) thread #8 - my-thread-2"}}
{{ at
org.apache.camel.component.metrics.MetricsComponent.createEndpoint(MetricsComponent.java:60)}}
{{ at
org.apache.camel.support.DefaultComponent.createEndpoint(DefaultComponent.java:233)}}
{{ at
org.apache.camel.impl.engine.AbstractCamelContext.doGetEndpoint(AbstractCamelContext.java:842)}}
{{ at
org.apache.camel.impl.engine.AbstractCamelContext.getEndpoint(AbstractCamelContext.java:769)}}
{{ at
org.apache.camel.support.CamelContextHelper.getMandatoryEndpoint(CamelContextHelper.java:72)}}
{{ at
org.apache.camel.support.ExchangeHelper.resolveEndpoint(ExchangeHelper.java:114)}}
{{ at
org.apache.camel.support.ExchangeHelper.resolveEndpoint(ExchangeHelper.java:92)}}
{{ at
org.apache.camel.processor.SendDynamicProcessor.resolveEndpoint(SendDynamicProcessor.java:289)}}
{{ at
org.apache.camel.processor.SendDynamicProcessor.process(SendDynamicProcessor.java:157)}}
{{ at
org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:395)}}
{{ at
org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)}}
{{ at
org.apache.camel.impl.engine.DefaultReactiveExecutor.schedule(DefaultReactiveExecutor.java:55)}}
{{ at
org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.lambda$run$0(RedeliveryErrorHandler.java:398)}}
{{ at
org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask$$Lambda$742.2026232778.done}}
{{ at
org.apache.camel.processor.ThreadsProcessor$ProcessCall.run(ThreadsProcessor.java:88)}}
{{ at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)}}
{{ at java.util.concurrent.FutureTask.run(FutureTask.java:266)}}
{{ at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)}}
{{ at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)}}
{{ at java.lang.Thread.run(Thread.java:748)}}
As you can see, thread #8 tries to create an endpoint from the metrics
component while thread #7 is still initializing it. This causes endpoinds to be
created from uninitialized components.
Both threads are working on the same node in the same route, which is defined
using the DSL:
{{.toD("metrics:counter:request.${headers.product}-xcount?increment=1")}}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)