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