On 2/15/2017 9:51 AM, Jaroslaw Cwiklik wrote:
> Not exactly sure how to debug this. 

a small-ish test case we could run would enable debugging...

> The UIMA-AS does not touch contents of
> a CAS directly. Are there any other errors in the log besides NPE? The
> UIMA-AS uses uima-sdk to serialize CASes. Since you are getting null from
> getView(N), this view must have been deleted somehow.
>
> -jerry
>
> On Mon, Feb 13, 2017 at 11:43 AM, nelson rivera <[email protected]>
> wrote:
>
>> 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(AggregateAnalysisEngineControl
>> ler_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
>>>>>>>>
>>>>>>
>>>>

Reply via email to