Hello everyone,

I'm using Camel 3.11 with Spring Boot 2.5.1, having a route template configured 
in Java DSL approximately like this:

routeTemplate()
...
from("quartz://)
...
            .circuitBreaker().resilience4jConfiguration(...)
.process(ExceptionHandlers::patchMDC)
...
.split()..header(...)
            ...
.end()
.endCircuitBreaker()
             .onFallback()
                        ...
            .end()

Unfortunately, running an instance of this template causes an exception (see 
stacktrace below). Removing the circuit breaker pattern solves the problem and 
the route works fine.
The cause seems to be in MulticastProcessor. The route is null, because the 
unit of work is null. The code fragment is passed without exception during the 
init phase, but on the first route execution the exception is thrown.
...
        if (route != this.route && this.route != null) {
            throw new UnsupportedOperationException("Is this really correct ?");
        }
...

Another thing is, that the MDC lost the breadcrumb id within the circuit 
breaker, thus I had to add it again manually. Is that a known design limitation 
or a bug?

Thanks & Best Regards
Andreas

---

java.lang.UnsupportedOperationException: Is this really correct ?
      at 
org.apache.camel.processor.MulticastProcessor.wrapInErrorHandler(MulticastProcessor.java:1006)
      at 
org.apache.camel.processor.MulticastProcessor.createProcessorExchangePair(MulticastProcessor.java:988)
      at 
org.apache.camel.processor.Splitter$SplitterIterable$1.next(Splitter.java:272)
      at 
org.apache.camel.processor.Splitter$SplitterIterable$1.next(Splitter.java:224)
      at 
org.apache.camel.processor.Splitter.createProcessorExchangePairsList(Splitter.java:302)
      at 
org.apache.camel.processor.Splitter.createProcessorExchangePairs(Splitter.java:172)
      at 
org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:307)
      at org.apache.camel.processor.Splitter.process(Splitter.java:157)
      at 
org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:398)
      at org.apache.camel.processor.Pipeline$PipelineTask.run(Pipeline.java:109)
      at 
org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:179)
      at 
org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:64)
      at org.apache.camel.processor.Pipeline.process(Pipeline.java:184)
      at 
org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:83)
      at 
org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:41)
      at 
org.apache.camel.component.resilience4j.ResilienceProcessor.processTask(ResilienceProcessor.java:522)
      at 
org.apache.camel.component.resilience4j.ResilienceProcessor.access$200(ResilienceProcessor.java:70)
      at 
org.apache.camel.component.resilience4j.ResilienceProcessor$CircuitBreakerTask.get(ResilienceProcessor.java:583)
      at 
org.apache.camel.component.resilience4j.ResilienceProcessor$CircuitBreakerTask.get(ResilienceProcessor.java:552)
      at 
java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1604)
      at 
java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1596)
      at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
      at 
java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
      at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
      at 
java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

Reply via email to