cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Unico Hommes <un...@hippo.nl>
Subject Re: NPE in AbstractCachingProcessingPipeline
Date Wed, 17 Nov 2004 13:40:52 GMT
The section fixes 
http://issues.apache.org/bugzilla/show_bug.cgi?id=31012 which is a 
serious bug in itself.

Anyway, I have found out why toCacheSourceValidities could be null when 
cachedResponse is not. Apparently this happens when the pipeline is not 
yet expired. I have committed a better fix.

--
Unico

Carsten Ziegeler wrote:

>Hmm, this is imho not the best solutions. Preventing NPEs
>by null checking smells a little bit :)
>If the section has been added recently than that author
>should now if a null for the object is a valid case or
>not; otherwise we should better remove the section for 
>the release.
>
>Carsten 
>
>  
>
>>-----Original Message-----
>>From: Unico Hommes [mailto:unico@hippo.nl] 
>>Sent: Tuesday, November 16, 2004 4:00 PM
>>To: dev@cocoon.apache.org
>>Subject: Re: NPE in AbstractCachingProcessingPipeline
>>
>>The section that causes the NPE was added recently. If you 
>>say that there are situations where it causes an NPE then I 
>>believe you immediately. The code is rather incomprehensible 
>>to me as well to say the least. Lots of side effects and null 
>>states that are supposed to signal some sort of situation 
>>that are probably not even clear to the original author 
>>anymore. I guess I'll add a null check for this situation, 
>>when SVN is up again that is.
>>
>>--
>>Unico
>>
>>Jon Evans wrote:
>>
>>    
>>
>>>Hi,
>>>
>>>Bugzilla appears to be broken...
>>>
>>>
>>>I've been chasing down a problem where the portal I'm 
>>>      
>>>
>>developing would 
>>    
>>
>>>work fine for a few iterations, then it would break and bits of it 
>>>would be replaced with "The coplet xxx is currently 
>>>      
>>>
>>unavailable".  The 
>>    
>>
>>>NPE logged in error.log was pretty hard to track down, in the end I 
>>>had to step through the code.
>>>
>>>I tracked it down to the function 
>>>      
>>>
>>getValidityForEventPipeline(), the 
>>    
>>
>>>first section of which reads:
>>>
>>>      
>>>
>>>>        if (this.cachedResponse != null) {
>>>>            final AggregatedValidity validity = new 
>>>>AggregatedValidity();
>>>>
>>>>            for (int i=0; i < this.toCacheSourceValidities.length;
>>>>i++) {
>>>>                validity.add(this.toCacheSourceValidities[i]);
>>>>            }
>>>>            return validity;
>>>>        
>>>>
>>>The problem seems to be that this.toCacheSourceValidities is null.  
>>>This would point to the fact that setupValidities() has never been 
>>>called - or it's internal state is such that 
>>>      
>>>
>>setupValidities() ends up 
>>    
>>
>>>setting toCacheSourceValidities to null.  I don't know 
>>>      
>>>
>>anything about 
>>    
>>
>>>the lifecycle of an AbstractCachingProcessingPipeline so I wouldn't 
>>>know where to track that down.
>>>
>>>If a !=null test is added to getValidityForEventPipeline():
>>>
>>>      
>>>
>>>>        if (this.cachedResponse != null) {
>>>>            final AggregatedValidity validity = new 
>>>>AggregatedValidity();
>>>>
>>>>            if (this.toCacheSourceValidities != null) {
>>>>                for (int i=0; i <
>>>>this.toCacheSourceValidities.length; i++) {
>>>>                    validity.add(this.toCacheSourceValidities[i]);
>>>>                }
>>>>            }
>>>>            return validity;
>>>>        
>>>>
>>>then it seems to work (at least, my portal doesn't seem to keep 
>>>falling over any more).
>>>
>>>If my patch isn't correct then I'd be happy to track this down 
>>>further, if someone could point me in the right direction with some 
>>>more information about how an 
>>>      
>>>
>>AbstractCachingProcessingPipeline gets 
>>    
>>
>>>constructed, and at what point in its lifecycle setupValidities() 
>>>should be called.
>>>
>>>I'd appreciate some feedback / help on this one!
>>>
>>>Thanks,
>>>
>>>Jon
>>>
>>>      
>>>
>>    
>>
>
>  
>


Mime
View raw message