ThreadsProcessor configured with ExecutorService with DiscardPolicy or
DiscardOldestPolicy leaves inflight exchanges for discarded tasks unprocessed.
-----------------------------------------------------------------------------------------------------------------------------------------------------
Key: CAMEL-4925
URL: https://issues.apache.org/jira/browse/CAMEL-4925
Project: Camel
Issue Type: Bug
Components: camel-core
Affects Versions: 2.8.0
Reporter: Sergey Zhemzhitsky
Attachments: CamelRoutingTest.java
ThreadsProcessor configured with ExecutorService with DiscardPolicy or
DiscardOldestPolicy leaves inflight exchanges for discarded tasks unprocessed.
Here is the code from ThreadsProcessor. In case of DiscardPolicy or
DiscardOldestPolicy executorService will no throw RejectedExecutionException,
so exchange remains unprocessed and count of inflight exchanges will not be
decremented for such discarded exchanges.
{code:java|title=ThreadsProcessor#process(Exchange, AsyncCallback)}
public boolean process(Exchange exchange, AsyncCallback callback) {
if (shutdown.get()) {
throw new IllegalStateException("ThreadsProcessor is not running.");
}
ProcessCall call = new ProcessCall(exchange, callback);
try {
executorService.submit(call);
// tell Camel routing engine we continue routing asynchronous
return false;
} catch (RejectedExecutionException e) {
if (isCallerRunsWhenRejected()) {
if (shutdown.get()) {
exchange.setException(new RejectedExecutionException());
} else {
callback.done(true);
}
} else {
exchange.setException(e);
}
return true;
}
}
{code}
Unit test is attached.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira