> On 7/13/06, Andreas Hartmann <[EMAIL PROTECTED]> wrote:
> 
> > ...<parameter name="overflow-to-disk" value="false"/>
> >
> > Is there a special reason why this is set to "false"?...
> 
> It's because in that case we only want a short-term cache. There are
> more parameters which might help, they are read by the
> src/java/org/apache/cocoon/components/store/impl/EHDefaultStore.java
> class IIUC.

Beside the fact that I am (have to begin but is on my agenda) going to write a 
best practice on these kind of things, I will try some to explain some stuff 
here in short:

First of all, make sure you have the EHDefaultStore.java from the trunk. This 
one has some important patches.

Now, a common configuration for your store would be:

<store logger="core.store">
    <parameter name="maxobjects" value="1000"/>
    <parameter name="eternal" value="false"/>
    <parameter name="timeToLiveSeconds" value="0"/>
    <!-- 1 day -->
    <parameter name="timeToIdleSeconds" value="86400"/>
    <parameter name="overflow-to-disk" value="true"/>
    <parameter name="diskpersistent" value="true"/>
</store>

This means, a maximum of 1000 object (keys+response) are kept in memory. Since 
eternal is false, timeToLiveSeconds and timeToIdleSeconds are taken into 
account. Is timeToLiveSeconds < timeToIdleSeconds, then only timeToIdleSeconds 
matters. In the configuration above, after 1 day of not being used, the 
cachekey is removed from cache. 

So, when overflow-to-disk is set to true, and you don't have eternal false and 
timeToIdleSeconds > 0, then ones a cachekey is in memory/disk, it will never be 
removed (apart from the StoreJanitor which when low on memory lets the 
EHDefaultStore free its cache ---though this couldn't be implemented worse 
because it just starts removing cachekeys/reponses from index 0 (which are 
commonly the most important ones) instead of removing them according the 
correct eviction policy. I have posted already to the ehcache mailinglist how 
to find the LRU one, but not yet got an answer--- and I assume you dont use 
eventAware cache actively removing keys )

So, it is very well possible, to let your cache grow INFINITELY large. Setting 
timeToIdleSeconds is important. Certainly when for example you have cachekeys 
including current date (though, watch out with these kind of cache practices 
because your cache could grow very large)

diskpersistent is added to be configurable since short, but does not really 
matter. It only indicates persistent cache between JVM restarts (used to be 
default true).

If you are working with a cocoon versions < 2.1.9, and you dont want to switch, 
but want to use the latest EHDefaultStore, just add the EHDefaultStore.java 
from trunk in your src/java/country/yourcomapany/cocoon..., and add to 
user.roles:

<role name="org.apache.excalibur.store.Store"
        shorthand="store"
        
default-class="country.yourcompany.cocoon.components.store.impl.EHDefaultStore"
  /> 

Now, just check it out configuring timeToIdleSeconds to 5 secs or something. 
Then look at the StatusGenerator, and you will see cachekeys being dumped after 
5 sec (by the way, dont refresh the StatusGenerator to often then, because 
looking at the StatusGenerator uses the keys, implying they are not idle for 
another 5 sec... :-) )

Hope things are little clearer...

Regards Ard

> 
> -Bertrand
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to