I was able to check your email just today. The agregegate is async,
but only process one input CAS at the same time,default numberOfCASes.
I read your possible explanation but i have no idea that another
thread can modificate the cas, because the last annotator's execution
is correct and only missing that the framework uima-as serializes the
cas.
This is the configuration of deploy of the aggregate:
<?xml version="1.0" encoding="UTF-8"?>
<analysisEngineDeploymentDescription
xmlns="http://uima.apache.org/resourceSpecifier">
<name>XClusterAnalyzerAE Deploy Descriptor</name>
<description>Deploys XClusterAnalyzerAE</description>
<deployment protocol="jms" provider="activemq">
<service>
<inputQueue endpoint="XClusterAnalyzerAggregate"
brokerURL="${defaultBrokerURL}"/>
<topDescriptor>
<import location="./XClusterAnalyzerAggregate.xml"/>
</topDescriptor>
<!-- remoteReplyQueueScaleout for remote delegate-->
<analysisEngine inputQueueScaleout="2"
internalReplyQueueScaleout="3">
<delegates>
<analysisEngine key="FileSystemMultiplerCas">
<casMultiplier poolSize="10"/>
</analysisEngine>
<analysisEngine key="XFileFormatDetector">
<scaleout numberOfInstances="2"/>
<asyncAggregateErrorConfiguration>
<processCasErrors maxRetries="0"
continueOnRetryFailure="true"/>
</asyncAggregateErrorConfiguration>
</analysisEngine>
<analysisEngine key="XDataFileExtractor">
<scaleout numberOfInstances="2"/>
<asyncAggregateErrorConfiguration>
<processCasErrors maxRetries="0"
continueOnRetryFailure="true"/>
</asyncAggregateErrorConfiguration>
</analysisEngine>
<remoteAnalysisEngine key="XLanguageDetector">
<inputQueue endpoint="XLanguageDetector"
brokerURL="${defaultBrokerURL}"/>
<serializer method="xmi"/>
<asyncAggregateErrorConfiguration>
<processCasErrors maxRetries="0"
continueOnRetryFailure="true"/>
</asyncAggregateErrorConfiguration>
</remoteAnalysisEngine>
<analysisEngine key="XTokenizer">
<scaleout numberOfInstances="2"/>
<asyncAggregateErrorConfiguration>
<processCasErrors maxRetries="0"
continueOnRetryFailure="true"/>
</asyncAggregateErrorConfiguration>
</analysisEngine>
<analysisEngine key="XBoTModeler">
<scaleout numberOfInstances="3"/>
<asyncAggregateErrorConfiguration>
<processCasErrors maxRetries="0"
continueOnRetryFailure="true"/>
</asyncAggregateErrorConfiguration>
</analysisEngine>
<analysisEngine key="MergerInViewCasMultipler">
<casMultiplier poolSize="1"/>
</analysisEngine>
<analysisEngine key="XClusterAnalyzer">
<scaleout numberOfInstances="1"/>
<asyncAggregateErrorConfiguration>
<processCasErrors maxRetries="0"
continueOnRetryFailure="true"/>
</asyncAggregateErrorConfiguration>
</analysisEngine>
</delegates>
</analysisEngine>
</service>
</deployment>
</analysisEngineDeploymentDescription>
2017-02-10 16:43 GMT-05:00, Jaroslaw Cwiklik <[email protected]>:
> Just a bit more evidence. The caller of the gerSofaAddr()
>
> public void writeViewsCommons() throws Exception {
> // Get indexes for each SofaFS in the CAS
> int numViews = cas.getBaseSofaCount();
>
> for (int sofaNum = 1; sofaNum <= numViews; sofaNum++) {
> FSIndexRepositoryImpl loopIR = (FSIndexRepositoryImpl)
> cas.getBaseCAS().getSofaIndexRepository(sofaNum);
> final int sofaAddr = getSofaAddr(sofaNum);
>
> Not an expert of this code, but it smells like another thread is changing a
> CAS which is being serialized.
>
> -jerry
>
> On Fri, Feb 10, 2017 at 4:31 PM, Jaroslaw Cwiklik <[email protected]> wrote:
>
>> Is this a primitive (single-threaded) aggregate or async
>> (multi-threaded)?
>> If async, try to simplify and run primitive aggregate with scaleout=1.
>>
>> The CAS does not seem to be null in this case. The caller of the
>> getSerializedCas()
>> checks for null.
>>
>> The code dies here:
>> Caused by: java.lang.NullPointerException
>> at org.apache.uima.cas.impl.CasSerializerSupport$CasDocSerializ
>> er.getSofaAddr(CasSerializerSupport.java:454)
>>
>> public int getSofaAddr(int sofaNum) {
>> if (sofaNum != 1 || cas.isInitialSofaCreated()) { //skip if initial
>> view && no Sofa yet
>> // all
>> non-initial-views must have a sofa
>> * return ((CASImpl)cas.getView(sofaNum)).getSofaRef();*
>> }
>> return 0;
>> }
>>
>> Looks to me that getView(sofaNum) is returning null. Is it possible that
>> two threads are operating on the same CAS maybe? One removing a view
>> while
>> another trying to serialize. Have no idea what else could it be.
>>
>> -jerry
>>
>>
>>
>> On Fri, Feb 10, 2017 at 8:45 AM, nelson rivera <[email protected]>
>> wrote:
>>
>>> Hi, The first thing I did was these tests,i made a simple test case
>>> that create a Cas with 17 views and then serialize using
>>> XmiCasSerializer.serialize(newJCas.getCas(), fis) and serializes
>>> correctly.
>>> Also i made other test, initialize the same AE but of local way with
>>> UIMA API and process the same input documents and the processing is
>>> correct and then serialize the CAS, without problem.
>>>
>>> The error is with AE deployed in uima-as and consuming it.
>>>
>>> 2017-02-09 17:30 GMT-05:00, Marshall Schor <[email protected]>:
>>> > one thing that would help track this down is a small isolated test
>>> > case.
>>> >
>>> > Do you think uima-as is needed? I'm wondering if a simple test case
>>> which
>>> > generated 17 views and then tried to serialize would show the
>>> > failure...
>>> >
>>> > If you could supply a small test case that showed the failure so we
>>> could
>>> > reproduce it, that would enable a rapid resolution.
>>> >
>>> > -Marshall
>>> >
>>> >
>>> > On 2/9/2017 3:58 PM, Marshall Schor wrote:
>>> >> The line throwing the null pointer exception is :
>>> >>
>>> >> cas.getView(sofaNum).getSofaRef()
>>> >>
>>> >> So the NPE is either the cas is null, or the getView(sofaNum) is
>>> returning
>>> >> null.
>>> >>
>>> >> I'm not sure what the best way is to debug this...
>>> >>
>>> >> -Marshall
>>> >>
>>> >>
>>> >>
>>> >>
>>> >> On 2/9/2017 12:42 PM, nelson rivera wrote:
>>> >>> I have a aggregate service uima-as, at the end of aggregate the cas
>>> >>> to
>>> >>> return is composed of as many views as the number of input files,
>>> >>> each
>>> >>> view with annotations of processing.
>>> >>> With a number of input documents less than 15 the processing is
>>> >>> successful always,
>>> >>> but if the number of documents is greater than 15, i get a
>>> >>> NullPointerException at the aggregate service trying to serialize
>>> >>> the
>>> >>> cas, not in the processing of AE aggregate.
>>> >>> the logs of aggregate service:
>>> >>>
>>> >>> 11:51:38.815 - 42:
>>> >>> cu.datys.xinetica.uima.core.MergerInViewCasMultipler.hasNext(285):
>>> >>> INFO: HasNext false
>>> >>> 11:51:38.875 - 44:
>>> >>> org.apache.uima.uimacpp.UimacppAnalysisComponent.log(396): INFO: :
>>> >>> XClusterAnalyzer::process --- OK
>>> >>> 11:51:39.145 - 45:
>>> >>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>>> ller_impl.replyToClient:
>>> >>> WARNING: Service: XClusterAnalyzerAggregate Runtime Exception
>>> >>> 11:51:39.145 - 45:
>>> >>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>>> ller_impl.replyToClient:
>>> >>> WARNING:
>>> >>> org.apache.uima.aae.error.AsynchAEException:
>>> >>> org.apache.uima.UIMARuntimeException
>>> >>> at
>>> >>> org.apache.uima.adapter.jms.activemq.JmsOutputChannel.getSer
>>> ializedCas(JmsOutputChannel.java:1265)
>>> >>> at
>>> >>> org.apache.uima.adapter.jms.activemq.JmsOutputChannel.sendRe
>>> ply(JmsOutputChannel.java:800)
>>> >>> at
>>> >>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>>> ller_impl.sendReplyToRemoteClient(AggregateAnalysisEngineCon
>>> troller_impl.java:2173)
>>> >>> at
>>> >>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>>> ller_impl.replyToClient(AggregateAnalysisEngineController_impl.java:2342)
>>> >>> at
>>> >>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>>> ller_impl.finalStep(AggregateAnalysisEngineController_impl.java:1862)
>>> >>> at
>>> >>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>>> ller_impl.executeFlowStep(AggregateAnalysisEngineController_
>>> impl.java:2489)
>>> >>> at
>>> >>> org.apache.uima.aae.controller.AggregateAnalysisEngineContro
>>> ller_impl.process(AggregateAnalysisEngineController_impl.java:1271)
>>> >>> at
>>> >>> org.apache.uima.aae.handler.HandlerBase.invokeProcess(Handle
>>> rBase.java:118)
>>> >>> at
>>> >>> org.apache.uima.aae.handler.input.ProcessResponseHandler.can
>>> celTimerAndProcess(ProcessResponseHandler.java:117)
>>> >>> at
>>> >>> org.apache.uima.aae.handler.input.ProcessResponseHandler.han
>>> dleProcessResponseWithCASReference(ProcessResponseHandler.java:485)
>>> >>> at
>>> >>> org.apache.uima.aae.handler.input.ProcessResponseHandler.han
>>> dle(ProcessResponseHandler.java:767)
>>> >>> at
>>> >>> org.apache.uima.aae.handler.HandlerBase.delegate(HandlerBase
>>> .java:149)
>>> >>> at
>>> >>> org.apache.uima.aae.handler.input.ProcessRequestHandler_impl
>>> .handle(ProcessRequestHandler_impl.java:1113)
>>> >>> at
>>> >>> org.apache.uima.aae.spi.transport.vm.UimaVmMessageListener.o
>>> nMessage(UimaVmMessageListener.java:107)
>>> >>> at
>>> >>> org.apache.uima.aae.spi.transport.vm.UimaVmMessageDispatcher
>>> $1.run(UimaVmMessageDispatcher.java:70)
>>> >>> at
>>> >>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPool
>>> Executor.java:1145)
>>> >>> at
>>> >>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoo
>>> lExecutor.java:615)
>>> >>> at
>>> >>> org.apache.uima.aae.UimaAsThreadFactory$1.run(UimaAsThreadFa
>>> ctory.java:132)
>>> >>> at java.lang.Thread.run(Thread.java:745)
>>> >>> Caused by: org.apache.uima.UIMARuntimeException
>>> >>> at
>>> >>> org.apache.uima.cas.impl.XmiCasSerializer.serialize(XmiCasSe
>>> rializer.java:420)
>>> >>> at
>>> >>> org.apache.uima.cas.impl.XmiCasSerializer.serialize(XmiCasSe
>>> rializer.java:385)
>>> >>> at
>>> >>> org.apache.uima.aae.UimaSerializer.serializeCasToXmi(UimaSer
>>> ializer.java:145)
>>> >>> at
>>> >>> org.apache.uima.adapter.jms.activemq.JmsOutputChannel.serial
>>> izeCAS(JmsOutputChannel.java:251)
>>> >>> at
>>> >>> org.apache.uima.adapter.jms.activemq.JmsOutputChannel.getSer
>>> ializedCas(JmsOutputChannel.java:1250)
>>> >>> ... 18 more
>>> >>> Caused by: java.lang.NullPointerException
>>> >>> at
>>> >>> org.apache.uima.cas.impl.CasSerializerSupport$CasDocSerializ
>>> er.getSofaAddr(CasSerializerSupport.java:454)
>>> >>> at
>>> >>> org.apache.uima.cas.impl.CasSerializerSupport$CasDocSerializ
>>> er.writeViewsCommons(CasSerializerSupport.java:465)
>>> >>> at
>>> >>> org.apache.uima.cas.impl.XmiCasSerializer$XmiDocSerializer.
>>> writeViews(XmiCasSerializer.java:572)
>>> >>> at
>>> >>> org.apache.uima.cas.impl.CasSerializerSupport$CasDocSerializ
>>> er.serialize(CasSerializerSupport.java:441)
>>> >>> at
>>> >>> org.apache.uima.cas.impl.XmiCasSerializer.serialize(XmiCasSe
>>> rializer.java:415)
>>> >>> ... 22 more
>>> >>>
>>> >>
>>> >
>>> >
>>>
>>
>>
>