Re: Many views in the cas to serialize cause java.lang.NullPointerException in service uima-as
Nelson, change Cas Multiplier in your deployment descriptor as follows: 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 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 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 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: >> >> >> >> >> >> > >> xmlns="http://uima.apache.org/resourceSpecifier";> >> >> >> >> XClusterAnalyzerAE Deploy Descriptor >> >> Deploys XClusterAnalyzerAE >> >> >> >> >> >> >> >> >> >> > >> brokerURL="${defaultBrokerURL}"/> >> >> >> >> >> >> >> >> >> >> > >> internalReplyQueueScaleout="3"> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> > >> continueOnRetryFailure="true"/> >> >> >> >> >> >> >> >> >> >> >> >> > >> continueOnRetryFailure="true"/> >> >> >> >> >> >> >> >> > >> brokerURL="${defaultBrokerURL}"/> >> >> >> >> >> >> > >> continueOnRetryFailure="true"/> >> >> >> >> >> >> >> >> >> >> >> >> > >> continueOnRetryFailure="true"/> >> >> >> >> >> >> >> >> >> >> >> >> > >> continueOnRetryFailure="true"/> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> > >> continueOnRetryFailure="true"/> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> >> 2017-02-10 16:43 GMT-05:00, Jaroslaw Cwiklik : >> >>> 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().getSofaIndexRepositor
Re: Many views in the cas to serialize cause java.lang.NullPointerException in service uima-as
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 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: > >> > >> > >> >> xmlns="http://uima.apache.org/resourceSpecifier";> > >> > >> XClusterAnalyzerAE Deploy Descriptor > >> Deploys XClusterAnalyzerAE > >> > >> > >> > >> > >> >> brokerURL="${defaultBrokerURL}"/> > >> > >> > >> > >> > >> >> internalReplyQueueScaleout="3"> > >> > >> > >> > >> > >> > >> > >> > >> >> continueOnRetryFailure="true"/> > >> > >> > >> > >> > >> > >> >> continueOnRetryFailure="true"/> > >> > >> > >> > >> >> brokerURL="${defaultBrokerURL}"/> > >> > >> > >> >> continueOnRetryFailure="true"/> > >> > >> > >> > >> > >> > >> >> continueOnRetryFailure="true"/> > >> > >> > >> > >> > >> > >> >> continueOnRetryFailure="true"/> > >> > >> > >> > >> > >> > >> > >> > >> > >> >> continueOnRetryFailure="true"/> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> 2017-02-10 16:43 GMT-05:00, Jaroslaw Cwiklik : > >>> 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 > >> 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)).
Re: Many views in the cas to serialize cause java.lang.NullPointerException in service uima-as
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 > 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: >> >> >> > xmlns="http://uima.apache.org/resourceSpecifier";> >> >> XClusterAnalyzerAE Deploy Descriptor >> Deploys XClusterAnalyzerAE >> >> >> >> >> > brokerURL="${defaultBrokerURL}"/> >> >> >> >> >> > internalReplyQueueScaleout="3"> >> >> >> >> >> >> >> >> > continueOnRetryFailure="true"/> >> >> >> >> >> >> > continueOnRetryFailure="true"/> >> >> >> >> > brokerURL="${defaultBrokerURL}"/> >> >> >> > continueOnRetryFailure="true"/> >> >> >> >> >> >> > continueOnRetryFailure="true"/> >> >> >> >> >> >> > continueOnRetryFailure="true"/> >> >> >> >> >> >> >> >> >> > continueOnRetryFailure="true"/> >> >> >> >> >> >> >> >> >> >> 2017-02-10 16:43 GMT-05:00, Jaroslaw Cwiklik : >>> 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 >> 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 < >> 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 A
Re: Many views in the cas to serialize cause java.lang.NullPointerException in service uima-as
Not exactly sure how to debug this. 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 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: > > > xmlns="http://uima.apache.org/resourceSpecifier";> > > XClusterAnalyzerAE Deploy Descriptor > Deploys XClusterAnalyzerAE > > > > > brokerURL="${defaultBrokerURL}"/> > > > > > internalReplyQueueScaleout="3"> > > > > > > > > continueOnRetryFailure="true"/> > > > > > > continueOnRetryFailure="true"/> > > > > brokerURL="${defaultBrokerURL}"/> > > > continueOnRetryFailure="true"/> > > > > > > continueOnRetryFailure="true"/> > > > > > > continueOnRetryFailure="true"/> > > > > > > > > > continueOnRetryFailure="true"/> > > > > > > > > > > 2017-02-10 16:43 GMT-05:00, Jaroslaw Cwiklik : > > 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 > 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 < > 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