Uploaded image for project: 'Camel'
  1. Camel
  2. CAMEL-21432

multicast function executes for ever. Thread is RUNNABLE for ever. Issue appears with multicast operating on SimpleLRUCache

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 4.4.3
    • 4.4.5, 4.8.2, 4.9.0
    • came-core
    • None
    • Unknown

    Description

      multicast function used in a Camel Route never returns back occasionally. 

      Route Code snippet: 
      from(getProcessMessageURI())
      .routeId(getSourceId() + ".businessRoute")
      .autoStartup(this.getConfigValue(getRouteAutoStartup()))
      .transacted(this.getPropagationRequiredPolicy())
      .setHeader("DESTINATION_URI").simple(this.getConfigValue(getOutputQueue()))
      .process(new InputMessageProcessor(this.getConfigValue(getOutputQueue())))
      .bean(new JTEConfigReader(getConfigXml()), "addJTEConfig(${body})")
      .bean(DMUtilityProcessor.class) exchange
      .bean(TranslatorExchangeController.class)
      .removeHeaders("JMS*")
      .multicast()
      .to(directOutput(), directPersist());
       

      Thread dump shows that the Processing Thread remains in RUNNABLE state. 

      All Stuck instance of Threaddump shows access to SimpleLRUCache$OperationContext.close, where it gets stuck.

       

      Thread Dump:

      Name: Camel (camelContext) thread #11 - JmsConsumer[IFM.RTR.IFM.ITE.BFM.AKNKRAW.EXPRESS]
      State: RUNNABLE
      Total blocked: 13,338  Total waited: 13,968

      Stack trace: 
      org.apache.camel.support.cache.SimpleLRUCache$OperationContext.close(SimpleLRUCache.java:318)
      org.apache.camel.support.cache.SimpleLRUCache.putIfAbsent(SimpleLRUCache.java:125)
      org.apache.camel.processor.MulticastProcessor.wrapInErrorHandler(MulticastProcessor.java:1074)
      org.apache.camel.processor.MulticastProcessor.createProcessorExchangePair(MulticastProcessor.java:1023)
      org.apache.camel.processor.MulticastProcessor.createProcessorExchangePairs(MulticastProcessor.java:990)
      org.apache.camel.processor.MulticastProcessor.doProcess(MulticastProcessor.java:324)
      org.apache.camel.processor.MulticastProcessor.process(MulticastProcessor.java:316)
      org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.doRun(RedeliveryErrorHandler.java:840)
      org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.run(RedeliveryErrorHandler.java:746)
      org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeFromQueue(DefaultReactiveExecutor.java:240)
      org.apache.camel.impl.engine.DefaultReactiveExecutor.executeFromQueue(DefaultReactiveExecutor.java:77)
      org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.await(DefaultAsyncProcessorAwaitManager.java:95)
      org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:84)
      org.apache.camel.processor.errorhandler.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:200)
      org.apache.camel.impl.engine.CamelInternalProcessor.processTransacted(CamelInternalProcessor.java:397)
      org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:327)
      org.apache.camel.processor.Pipeline$PipelineTask.run(Pipeline.java:102)
      org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeFromQueue(DefaultReactiveExecutor.java:240)
      org.apache.camel.impl.engine.DefaultReactiveExecutor.executeFromQueue(DefaultReactiveExecutor.java:77)
      org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.await(DefaultAsyncProcessorAwaitManager.java:95)
      org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:84)
      org.apache.camel.spring.spi.TransactionErrorHandler.processByErrorHandler(TransactionErrorHandler.java:244)
      org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:119)
      org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:132)
      org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.doRun(RedeliveryErrorHandler.java:840)
      org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.run(RedeliveryErrorHandler.java:746)
      org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeFromQueue(DefaultReactiveExecutor.java:240)
      org.apache.camel.impl.engine.DefaultReactiveExecutor.executeFromQueue(DefaultReactiveExecutor.java:77)
      org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.await(DefaultAsyncProcessorAwaitManager.java:95)
      org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:84)
      org.apache.camel.spring.spi.TransactionErrorHandler.processByErrorHandler(TransactionErrorHandler.java:244)
      org.apache.camel.spring.spi.TransactionErrorHandler$1.doInTransactionWithoutResult(TransactionErrorHandler.java:207)
      org.springframework.transaction.support.TransactionCallbackWithoutResult.doInTransaction(TransactionCallbackWithoutResult.java:36)
      org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:140)
      org.apache.camel.spring.spi.TransactionErrorHandler.doInTransactionTemplate(TransactionErrorHandler.java:200)
      org.apache.camel.spring.spi.TransactionErrorHandler.processInTransaction(TransactionErrorHandler.java:155)
      org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:123)
      org.apache.camel.spring.spi.TransactionErrorHandler.process(TransactionErrorHandler.java:132)
      org.apache.camel.impl.engine.CamelInternalProcessor.processNonTransacted(CamelInternalProcessor.java:354)
      org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:330)
      org.apache.camel.processor.Pipeline$PipelineTask.run(Pipeline.java:102)
      org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199)
      org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:189)
      org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:166)
      org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
      org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:59)
      org.apache.camel.processor.Pipeline.process(Pipeline.java:163)
      org.apache.camel.impl.engine.CamelInternalProcessor.processNonTransacted(CamelInternalProcessor.java:354)
      org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:330)
      org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:82)
      org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:32)
      org.apache.camel.component.jms.EndpointMessageListener.onMessage(EndpointMessageListener.java:132)
      org.springframework.jms.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:783)
      org.springframework.jms.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:741)
      org.springframework.jms.listener.AbstractMessageListenerContainer.doExecuteListener(AbstractMessageListenerContainer.java:719)
      org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:333)
      org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:246)
      org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1257)
      org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1247)
      org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:1140)
      java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
      java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
      java.lang.Thread.run(Thread.java:840)

      Attachments

        Issue Links

          Activity

            People

              essobedo Nicolas Filotto
              abhiashokbbh Abhi Ashok
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: