uima-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From nelson rivera <nelsonriver...@gmail.com>
Subject Re: Many views in the cas to serialize cause java.lang.NullPointerException in service uima-as
Date Mon, 13 Feb 2017 16:43:37 GMT
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 <uimaee@gmail.com>:
> 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 <uimaee@gmail.com> 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 <nelsonrivera12@gmail.com>
>> 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 <msa@schor.com>:
>>> > 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
>>> >>>
>>> >>
>>> >
>>> >
>>>
>>
>>
>

Mime
View raw message