[
https://issues.apache.org/jira/browse/UIMA-5191?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15688108#comment-15688108
]
Marshall Schor commented on UIMA-5191:
--------------------------------------
hi, after some more thinking, it seems that UIMA's
MultiprocessingAnalysisEngine's support for Cas Multipliers is not done
properly. I think your analysis is correct. The
MultiprocessingAnalysisEngine's implementation of processAndOutputNewCASes
works as follows (somewhat simplified):
{code}
ae = getAeFromPool(); // get an AnalysisEngine (in this case, a cas multiplier)
JCasIterator theIterator = ae.processAndOutputNewCASes(aJCas);
// here's the bug !
mpool.releaseAnalysisEngine(ae); // return the Analysis Engine to the pool,
// way too early - it may produce more CASes...
return theIterator;
{code}
I don't see a simple way to fix this; so we'll note this and perhaps someone
will figure out how to delay the return of the checked-out ae to the ae pool
until after the iterator's "hasNext()" method gives false.
As a work-around, perhaps you could arrange to manage your own pool of threads,
using Java's Executor mechanisms, and just instantiate an ordinary (not
MultiThreaded) Analysis engine for each one.
> Free instance of agreggate with cas multiplier in
> MultiprocessingAnalysisEngine
> -------------------------------------------------------------------------------
>
> Key: UIMA-5191
> URL: https://issues.apache.org/jira/browse/UIMA-5191
> Project: UIMA
> Issue Type: Bug
> Affects Versions: 2.8.1SDK
> Reporter: Nelson RIvera
>
> I have a aggregate analysis engine that contains 2 casmultiplier
> annotators. I instantiate this aggregate with the interface
> UIMAFramework.produceAnalysisEngine(specifier, 1, 0) for multithreaded
> processing. The last casmultiplier generate more than one cas for each
> input CAS from first casmultiplier. The issue is that after first time that
> the last casmultipler's hasNext method method returns false, the
> MultiprocessingAnalysisEngine_impl assumes that the instance of
> AggregateAnalysisEngine that processes the request has ended, and
> then this instance is free to process ahother request from other thread, and
> it is not true, because missing child cas to process from de first
> casmultipler, producing concurrency errors.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)