[ 
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)

Reply via email to