[ https://issues.apache.org/jira/browse/CAMEL-6377?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13661366#comment-13661366 ]
Claus Ibsen commented on CAMEL-6377: ------------------------------------ Here is a simple sample route {code} @Override protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { @Override public void configure() throws Exception { from("seda:start") .to("log:foo") .to("log:bar") .process(new Processor() { @Override public void process(Exchange exchange) throws Exception { try { throw new IllegalArgumentException("Forced to dump stacktrace"); } catch (Exception e) { e.printStackTrace(); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); String s = sw.toString(); Scanner scanner = new Scanner(s); scanner.useDelimiter("\n"); int count = 0; while (scanner.hasNext()) { scanner.next(); count++; } System.out.println("There is " + count + " lines in the stacktrace"); } } }) .to("mock:result"); } }; } {code} Which then in Camel 2.11.0 has 40 lines in the stacktrace {code} ava.lang.IllegalArgumentException: Forced to dump stacktrace at org.apache.camel.processor.ReduceStacksNeededDuringRoutingTest$1$1.process(ReduceStacksNeededDuringRoutingTest.java:55) at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.interceptor.BacklogTracerInterceptor.process(BacklogTracerInterceptor.java:84) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:391) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:273) at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:46) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:335) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.Pipeline.process(Pipeline.java:117) at org.apache.camel.processor.Pipeline.process(Pipeline.java:80) at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:46) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:150) at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:117) at org.apache.camel.processor.RouteInflightRepositoryProcessor.processNext(RouteInflightRepositoryProcessor.java:48) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:72) at org.apache.camel.util.AsyncProcessorHelper.process(AsyncProcessorHelper.java:73) at org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:275) at org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:183) at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:139) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722) There is 40 lines in the stacktrace {code} And with (only partly optimized) on trunk we have 28 lines: {code} java.lang.IllegalArgumentException: Forced to dump stacktrace at org.apache.camel.processor.ReduceStacksNeededDuringRoutingTest$1$1.process(ReduceStacksNeededDuringRoutingTest.java:55) at org.apache.camel.util.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:61) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.interceptor.TraceInterceptor.process(TraceInterceptor.java:91) at org.apache.camel.processor.RedeliveryErrorHandler.processErrorHandler(RedeliveryErrorHandler.java:391) at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:273) at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:137) at org.apache.camel.processor.interceptor.DefaultChannel.process(DefaultChannel.java:350) at org.apache.camel.processor.Pipeline.process(Pipeline.java:118) at org.apache.camel.processor.Pipeline.process(Pipeline.java:80) at org.apache.camel.processor.RouteContextProcessor.processNext(RouteContextProcessor.java:47) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.processor.UnitOfWorkProcessor.processAsync(UnitOfWorkProcessor.java:151) at org.apache.camel.processor.UnitOfWorkProcessor.process(UnitOfWorkProcessor.java:118) at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:137) at org.apache.camel.processor.DelegateAsyncProcessor.processNext(DelegateAsyncProcessor.java:99) at org.apache.camel.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:90) at org.apache.camel.management.InstrumentationProcessor.process(InstrumentationProcessor.java:73) at org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:279) at org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:186) at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:139) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:722) There is 28 lines in the stacktrace {code} > Optimize routing engine to reduce stack frames in use during routing and > reduce callbacks > ----------------------------------------------------------------------------------------- > > Key: CAMEL-6377 > URL: https://issues.apache.org/jira/browse/CAMEL-6377 > Project: Camel > Issue Type: Improvement > Components: camel-core > Affects Versions: 2.12.0 > Reporter: Claus Ibsen > Assignee: Claus Ibsen > Fix For: 2.12.0 > > > We can optimize the Camel routing engine internally, and redue the need for > wrapping processors (those internally used for cross cutting functionality) > where they would wrap each other one by one; which then results in larger > call stacks during routing. > This also shows to end users when stacktraces is being logged etc, as they > tend to be a bit longer with many internal calls. > Though the JVM optimizes this at runtime as it can inline the calls and > whatnot. But the stacktraces is still shown expanded. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira