Nelson, I agree with Marshall. If you can produce a small test case that shows the problem I will find time to debug it.
-jerry On Fri, Feb 17, 2017 at 2:14 PM, Marshall Schor <m...@schor.com> wrote: > Hi Nelson, > > Due to local holidays, you may not see activity here until mid-next week. > > Meanwhile, it would help to have a small test case which reproduces this > issue. > > If you could make one and zip it up and attach it to a Jira, that would > enable > great progress :-) > > -Marshall > > > On 2/16/2017 8:52 AM, nelson rivera wrote: > > I tested the solution that proposes, add processParentLast="true" to > > the Cas Multiplier delegate's configuration. The behavior is the > > same. The other alternative that you say, is that i have a bug > > somewhere in my code which allows a CAS to be accessed in two separate > > threads, but i not have idea,because the cas generated in the second > > cas multipler is composed of all views and then this cas go to the end > > annotator that have only 1 instance, and here finish the flow. > > > > 2017-02-15 16:31 GMT-05:00, Jaroslaw Cwiklik <uim...@gmail.com>: > >> Nelson, change Cas Multiplier in your deployment descriptor as follows: > >> > >> <analysisEngine key="FileSystemMultiplerCas"> > >> <casMultiplier poolSize="10" > >> processParentLast="true"/> > >> </analysisEngine> > >> > >> Note: processParentLast="true". > >> > >> In UIMA-AS async aggregate its possible for a child CAS and its parent > CAS > >> to flow through the pipeline at the same time and the parent CAS may > reach > >> the end before its child(ren). The above setting will ensure the parent > CAS > >> does not flow ahead of its children. From UIMA-AS documentation: > >> > >> "The processParentLast attribute on the <casMultiplier> element is > >> optional, and specifies processing order of an input CAS relative to its > >> children. If true, a flow of an input CAS will be suspended after it is > >> returned from a Cas Multiplier delegate until all its child CASes have > >> finished processing. If false, an input CAS can be processed in parallel > >> with its children." > >> > >> > >> If the above change does not fix the NPE, I suspect you may have a bug > >> somewhere in your code which allows a CAS to be accessed in two separate > >> threads. > >> > >> -jerry > >> > >> On Wed, Feb 15, 2017 at 12:43 PM, Jaroslaw Cwiklik <uim...@gmail.com> > >> wrote: > >> > >>> Nelson, I can try to setup a simple pipeline with one AE which will add > >>> 20 > >>> views and than test serialization. Not sure if I get to it today. If > not > >>> this will have to wait till Monday next week. I've already mentioned > this > >>> before, don't operate on a CAS once it leaves an AE. The contract is > >>> CAS-In > >>> CAS-out. A CAS instance can only be operated on by one AE at a time. > >>> > >>> -jerry > >>> > >>> On Wed, Feb 15, 2017 at 11:06 AM, Marshall Schor <m...@schor.com> > wrote: > >>> > >>>> 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 < > >>>> nelsonriver...@gmail.com> > >>>>> 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 <uim...@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 < > uim...@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.CasSe > >>>> rializerSupport$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 < > >>>>>> nelsonriver...@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 <m...@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(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(AggregateAnalysisEngineControl > ler_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 > >>>>>>>>>>>> > >>>> > >