You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Richard Eckart de Castilho (Jira)" <de...@uima.apache.org> on 2023/01/12 15:20:00 UTC
[jira] [Resolved] (UIMA-5036) UIMA-DUCC: fix Agent RejectedExecutionException
[ https://issues.apache.org/jira/browse/UIMA-5036?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Richard Eckart de Castilho resolved UIMA-5036.
----------------------------------------------
Resolution: Abandoned
DUCC has been retired.
> UIMA-DUCC: fix Agent RejectedExecutionException
> -----------------------------------------------
>
> Key: UIMA-5036
> URL: https://issues.apache.org/jira/browse/UIMA-5036
> Project: UIMA
> Issue Type: Bug
> Components: DUCC
> Reporter: Jaroslaw Cwiklik
> Assignee: Jaroslaw Cwiklik
> Priority: Major
>
> Fix a race condition which leads to RejectedExecutionException in LinuxProcessMetricsProcessor.process() method. The method fails with this stack trace:
> java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.FutureTask@4c38895 rejected from java.util.concurrent.ThreadPoolExecutor@41c10669[Terminated, pool \
> size = 0, active threads = 0, queued tasks = 0, completed tasks = 2052]
> at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2047)
> at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:823)
> at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1369)
> at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:134)
> at org.apache.uima.ducc.agent.processors.LinuxProcessMetricsProcessor.process(LinuxProcessMetricsProcessor.java:291)
> at org.apache.camel.processor.DelegateSyncProcessor.process(DelegateSyncProcessor.java:63)
> at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:460)
> at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
> at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:190)
> at org.apache.camel.component.timer.TimerConsumer.sendTimerExchange(TimerConsumer.java:165)
> at org.apache.camel.component.timer.TimerConsumer$1.run(TimerConsumer.java:73)
> at java.util.TimerThread.mainLoop(Timer.java:555)
> at java.util.TimerThread.run(Timer.java:505)
> In the above, the thread pool state shows as Terminated when a submit API was called. This means that the thread pool was stopped when the code was trying to use the pool.
>
> Each process spawned by an Agent has a Camel driven timer which triggers metrics collection. The metrics are collected in multiple threads provided by the thread pool.
> The fix is to synchronize code in close() and process() on a common lock. In stop() the code sets a boolean indicating that the metrics collection should not take place. In the process(), the code checks the boolean to determine if it should proceed.
> The Camel driven timer is eventually stopped in a code handling process termination.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)