cziegeler 2003/05/30 02:23:14
Modified: . status.xml src/java/org/apache/cocoon/components/pipeline/impl AbstractCachingProcessingPipeline.java src/java/org/apache/cocoon/components/source/impl SitemapSource.java src/java/org/apache/cocoon/components/pipeline AbstractProcessingPipeline.java ProcessingPipeline.java Log: Fixing bug 17623 Revision Changes Path 1.45 +4 -1 cocoon-2.1/status.xml Index: status.xml =================================================================== RCS file: /home/cvs/cocoon-2.1/status.xml,v retrieving revision 1.44 retrieving revision 1.45 diff -u -r1.44 -r1.45 --- status.xml 27 May 2003 12:09:01 -0000 1.44 +++ status.xml 30 May 2003 09:23:14 -0000 1.45 @@ -179,7 +179,10 @@ <changes> - <release version="@version@" date="@date@"> + <release version="@version@" date="@date@"> + <action dev="CZ" type="fix" fixes-bug="17623" due-to="Alex Romayev" due-to-email="[EMAIL PROTECTED]"> + Fixing incorrect caching behaviour when internal pipelines are used. + </action> <action dev="JT" type="fix"> Command-line will no longer add a 'null' suffix to files with an unknown MIME type. </action> 1.6 +32 -5 cocoon-2.1/src/java/org/apache/cocoon/components/pipeline/impl/AbstractCachingProcessingPipeline.java Index: AbstractCachingProcessingPipeline.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/pipeline/impl/AbstractCachingProcessingPipeline.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- AbstractCachingProcessingPipeline.java 3 May 2003 18:34:41 -0000 1.5 +++ AbstractCachingProcessingPipeline.java 30 May 2003 09:23:14 -0000 1.6 @@ -69,6 +69,7 @@ import org.apache.cocoon.components.sax.XMLSerializer; import org.apache.cocoon.environment.Environment; import org.apache.cocoon.transformation.Transformer; +import org.apache.cocoon.util.HashUtil; import org.apache.excalibur.source.SourceValidity; import org.apache.excalibur.source.impl.validity.AggregatedValidity; import org.apache.excalibur.source.impl.validity.DeferredValidity; @@ -863,11 +864,20 @@ * Otherwise return <code>null</code> */ public SourceValidity getValidityForEventPipeline() { - if ( null != this.toCacheKey - && !this.completeResponseIsCached + int vals = 0; + + if ( null != this.toCacheKey + && !this.cacheCompleteResponse && this.firstNotCacheableTransformerIndex == super.transformers.size()) { - AggregatedValidity validity = new AggregatedValidity(); - for(int i=0; i < this.toCacheKey.size(); i++) { + vals = this.toCacheKey.size(); + } else if ( null != this.fromCacheKey + && !this.completeResponseIsCached + && this.firstProcessedTransformerIndex == super.transformers.size()) { + vals = this.fromCacheKey.size(); + } + if ( vals > 0 ) { + final AggregatedValidity validity = new AggregatedValidity(); + for(int i=0; i < vals; i++) { validity.add(this.getValidityForInternalPipeline(i)); //validity.add(new DeferredPipelineValidity(this, i)); } @@ -876,6 +886,23 @@ return null; } + /* (non-Javadoc) + * @see org.apache.cocoon.components.pipeline.ProcessingPipeline#getKeyForEventPipeline() + */ + public String getKeyForEventPipeline() { + if ( null != this.toCacheKey + && !this.cacheCompleteResponse + && this.firstNotCacheableTransformerIndex == super.transformers.size()) { + return String.valueOf(HashUtil.hash(this.toCacheKey.toString())); + } + if ( null != this.fromCacheKey + && !this.completeResponseIsCached + && this.firstProcessedTransformerIndex == super.transformers.size()) { + return String.valueOf(HashUtil.hash(this.fromCacheKey.toString())); + } + return null; + } + /** * * @see org.apache.cocoon.components.pipeline.ProcessingPipeline#getValidityForInternalPipeline(int) 1.5 +25 -2 cocoon-2.1/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java Index: SitemapSource.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- SitemapSource.java 20 May 2003 00:50:06 -0000 1.4 +++ SitemapSource.java 30 May 2003 09:23:14 -0000 1.5 @@ -101,6 +101,9 @@ /** The system id */ private String systemId; + /** The system id used for caching */ + private String systemIdForCaching; + /** The uri */ private String uri; @@ -291,7 +294,13 @@ * Return the unique identifer for this source */ public String getURI() { - return this.systemId; + if (this.needsRefresh) { + this.refresh(); + } + if (this.redirectSource != null) { + return this.systemId; + } + return this.systemIdForCaching; } /** @@ -358,6 +367,20 @@ this.pipelineProcessor); this.processingPipeline.prepareInternal(this.environment); this.sourceValidity = this.processingPipeline.getValidityForEventPipeline(); + final String eventPipelineKey = this.processingPipeline.getKeyForEventPipeline(); + if ( eventPipelineKey != null ) { + StringBuffer buffer = new StringBuffer(this.systemId); + if ( this.systemId.indexOf('?') == -1) { + buffer.append('?'); + } else { + buffer.append('&'); + } + buffer.append("pipelinehash="); + buffer.append(eventPipelineKey); + this.systemIdForCaching = buffer.toString(); + } else { + this.systemIdForCaching = this.systemId; + } } finally { CocoonComponentManager.leaveEnvironment(); envStack.resetOffset(currentOffset); 1.4 +8 -1 cocoon-2.1/src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java Index: AbstractProcessingPipeline.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- AbstractProcessingPipeline.java 18 May 2003 18:37:09 -0000 1.3 +++ AbstractProcessingPipeline.java 30 May 2003 09:23:14 -0000 1.4 @@ -762,4 +762,11 @@ return expires; } + /* (non-Javadoc) + * @see org.apache.cocoon.components.pipeline.ProcessingPipeline#getKeyForEventPipeline() + */ + public String getKeyForEventPipeline() { + return null; + } + } 1.3 +9 -2 cocoon-2.1/src/java/org/apache/cocoon/components/pipeline/ProcessingPipeline.java Index: ProcessingPipeline.java =================================================================== RCS file: /home/cvs/cocoon-2.1/src/java/org/apache/cocoon/components/pipeline/ProcessingPipeline.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ProcessingPipeline.java 12 Mar 2003 09:10:07 -0000 1.2 +++ ProcessingPipeline.java 30 May 2003 09:23:14 -0000 1.3 @@ -182,5 +182,12 @@ * Otherwise return <code>null</code> */ SourceValidity getValidityForEventPipeline(); - + + /** + * Return the key for the event pipeline + * If the "event pipeline" (= the complete pipeline without the + * serializer) is cacheable and valid, return a key. + * Otherwise return <code>null</code> + */ + String getKeyForEventPipeline(); }