Hi Ard,

Shoot, I am blind. The refresher is already dropping requests for keys that
are already in the queue.
So then I don't think there is a serious problem left :-).


Reinier


On Tue, Jan 12, 2010 at 5:50 PM, Reinier van den Born <
[email protected]> wrote:

> Hi Ard,
>
> This is becoming interesting :-).
>
> On Tue, Jan 12, 2010 at 1:16 PM, Ard Schrijvers <[email protected]
> > wrote:
>
>> On Tue, Jan 12, 2010 at 11:40 AM, Reinier van den Born
>> <[email protected]> wrote:
>> > Hello Ard,
>> >
>> > I followed your proposal to take the outside (http:) route.
>> > So I have two pipeline matchers now: "lazysource" and
>> "lazysource_direct",
>> > where "lazysource" generates "async:http://host/lazysource_direct"; and
>> the
>> > latter does the original work.
>> >
>> > This seems to work, ie. I get cached results in return until it expires,
>> > while the _direct returns an updated result instantly.
>> > The only odd thing is that when I log the matchers, "lazysource_direct"
>> > appears to be invoked every time lazysource is.
>>
>> this is to compute the cachekey. The cached result should be returned
>> still. So, that the call is done is correct
>>
>
> Still a bit confusing (to me) that  the logging action is also called when
> only the key is generated.
> I would expect it to be only called when entering the pipeline to
> generate(),
> Maybe I should configure the actions differently (I am not very experienced
> with Cocoon).
>
>
> > So it seems the cached result is used, but still gets the result to be
> > generated. Sounds odd, because that would defy the purpose of the whole
>
>  No, the cachekey is generated, see
>> http://cocoon.apache.org/2.2/core-modules/core/2.2/690_1_1.html
>
>
> Interesting, but goes a bit too deep to fully understand with my limited
> knowledge :-)
> The page they claim to make more intelligible is actually easier to
> follow...but is probably outdated.
> But does this one describe really what is happening for an async-ed Source?
>
> Still not really sure why cocoon would need to generate a cachekey for
> "lazysource_direct" as long as "lazysource" is in cache and valid.
> I can see it being necessary for normal caching go down a full cache tree.
> But for an expiring, time-triggered cache that doesn't seem necessary, or?
> Unless it is checking for existence. According to the page you refer to
> that might be it...
>
> > exercise.
>> >
>> > I tried to put lazysource in a "caching", as opposed to "ecaching",
>> pipeline
>> > but that doesn't seem to make a difference.
>> >
>> > Made me wonder further, whether you have foreseen a mechanism that keeps
>> > simultaneous requests from being able to kick off parallel requests for
>> > "_direct" once it is outdated.
>>
>> you can try to create your own generator (configured in the
>> cocoon.xconf to have a pool limit size of 1) and have in here a
>> synchronized method, which blocks other requests
>>
>
> Isn't having pool-size=1 and using synchronized, somehow doing things
> double?
>
> Also it seems to me this would serialize all generate/refresh requests
> (yes, this would prevent us from running out of memory)
> but not suppress them. See below.
>
>
> > Because that is what my original problem was.
> >
> > I made an attempt to locate the source code to take a peek myself. Only
> > found something doing with async in the repository block of cocoon itself
> > (CachingSource.java).
> > Is that where I should be looking?
>
>  you should take a look at the hippo cachingsource block, but be
>> warned, Cocoon's caching is a very complex thing.
>
>
> Just looking around the code I ran into refresher, the one that controls
> the actual generating work on asynced stuff.
> What if it were to be modified to drop refresh() requests that are already
> in the queue (match on cacheKey)?
> Since the refresher starts processing no more than one request per second
> (which in cases may be limiting, might want to make a parameter of that?)
> and is threadCount (which is a parameter) limited, unnecessary generation
> will not be completely avoided, but they will be kept under tight control.
> Quick upper limit estimate: number of threads+1 or so??
>
> Doesn't seem like a risky or complicated modification, but my view of the
> world may be to simplified :-)
> What do you think?
>
> Groeten,
>
> Reinier
>
>
>
>>
>> Regards Ard
>>
>> >
>> > Thanks,
>> >
>> > Reinier
>> >
>> > Reinier van den Born
>> > HintTech B.V.
>> > The Netherlands
>> >
>> > T: +31(0)88 268 25 00
>> > F: +31(0)88 268 25 01
>> > M: +31(0)6 494 171 36
>> > HintTech is a specialist in eBusiness Technology ( .Net, Java platform,
>> > Tridion ) and IT-Projects.
>> > Chamber of Commerce The Hague nr. 27242282 | Sales Tax nr.
>> NL8062.16.396.B01
>> >
>> >
>> >
>> >
>> >
>> > On Fri, Jan 8, 2010 at 2:45 PM, Ard Schrijvers <
>> [email protected]>wrote:
>> >
>> >> Hello Reinier,
>> >>
>> >> On Fri, Jan 8, 2010 at 2:37 PM, Reinier van den Born
>> >> <[email protected]> wrote:
>> >> > Hi Ard,
>> >> >
>> >> > I have followed the instructions, but it doesn't seem to work. At
>> least
>> >> not
>> >> > for a cocoon: resource.
>> >> >
>> >> > I created a separate pipeline (original was calling a resource, so
>> that
>> >> was
>> >> > easier).
>> >> >
>> >> > Without async: it works like before, but with async the cache seems
>> not
>> >> to
>> >> > expire at all.
>> >> > I tried both with and without a cache-expires argument.
>> >> > This is what I am using:
>> >> > <map:generate src="async:cocoon://lazysource"/>
>> >> >
>> >> > I also tried
>> >> > <map:generate
>> src="async:cocoon://lazysource?cocoon:cache-expires=10"/>
>> >> >
>> >> > When I switch back and forth between with async: and without async: I
>> get
>> >> > the first cached version and the latest version respectively.
>> >> >
>> >> >>> just found out this is not entirely correct: after a real long
>> while -
>> >> at
>> >> > least 20 minutes but more like an hour - the cache is being updated
>> <<
>> >> >
>> >> > However when I replace the cocoon: url with a http: one things start
>> to
>> >> work
>> >> > like you described.
>> >> > So for instance
>> >> > <map:generate src="async:
>> >> > http://www.anwb.nl/verkeer/verkeersinformatie_files_nl"/>
>> >> > is updated properly (with the delay).
>> >> > (except that the first request will show the old cached version, like
>> we
>> >> > discussed below, showing it is actually active :-)
>> >> >
>> >> > I hope this is just me overlooking something, because it looks very
>> >> > promosing.
>> >> > Any ideas?
>> >>
>> >> It might have been broken for the cocoon:// protocol. I vaguely
>> >> remember that it was extremely hard to accomplish for the cocoon://
>> >> protocol.
>> >>
>> >> But can't you just do an http call to the cocoon instance? Thus,
>> instead
>> >> of:
>> >>
>> >> <map:generate src="async:cocoon://lazysource?cocoon:cache-expires=10"/>
>> >>
>> >> use
>> >>
>> >> <map:generate src="async:
>> >> http://www.mydomain.com/lazysource?cocoon:cache-expires=10"/>
>> >>
>> >> Regards Ard
>> >>
>> >> >
>> >> > Reinier
>> >> >
>> >> >
>> >> >
>> >> > On Thu, Jan 7, 2010 at 5:36 PM, Ard Schrijvers <
>> >> [email protected]>wrote:
>> >> >
>> >> >> hello,
>> >> >>
>> >> >> On Thu, Jan 7, 2010 at 5:17 PM, Reinier van den Born
>> >> >> <[email protected]> wrote:
>> >> >> > Hi Ard,
>> >> >> >
>> >> >> > Thanks for your reply.
>> >> >> >
>> >> >> > Your suggestion looks quite like what we need, but I am not sure
>> >> whether
>> >> >> it
>> >> >> > will really work for us.
>> >> >> >
>> >> >> > You are talking about an external resource where the (async)
>> >> regeneration
>> >> >> is
>> >> >> > simply triggered when the cache has expired.
>> >> >>
>> >> >> it works also for internal
>> >> >>
>> >> >> > In our case we are dealing with a repository resource, where cache
>> >> >> > invalidations are triggered by resource changes.
>> >> >> > So normally update events are invalidating all caches upto our
>> final
>> >> >> page.
>> >> >> > If this continues to happen the cache
>> >> >> > will be invalidated in between expires, so the problem would
>> remain.
>> >> >>
>> >> >> I think I addressed this, where the old response is still being
>> served.
>> >> >>
>> >> >> > Or will the cache-expires option protect the "slowpart" cache from
>> >> those
>> >> >> > cache invalidations?
>> >> >>
>> >> >> think so, but it was long time ago i built it
>> >> >>
>> >> >> >
>> >> >> > If not, maybe it is possible to set up an intermediate pipeline to
>> >> >> provide
>> >> >> > the necessary isolation?
>> >> >>
>> >> >> I would just test whether it does what you expect from it...I know
>> the
>> >> >> Cocoon caching is quite complex, and this part was much complexer
>> then
>> >> >> standard Cocoon caching
>> >> >>
>> >> >> >
>> >> >> > Some more general questions:
>> >> >> >
>> >> >> > I've been looking around a bit further and ran into the following
>> >> page:
>> >> >> >
>> >> >>
>> >>
>> http://wiki.onehippo.com/display/CMS/Using+asynchronic+get+for+cached+content
>> >> >> > If I am not mistaken this is using the async option on Cocoon's
>> >> >> > CachingSourceFactory.
>> >> >> > Is this related to what you mention or are these entirely
>> different
>> >> >> things?
>> >> >>
>> >> >> Heey, I wrote that wiki page, great! This is exactly what I meant. I
>> >> >> only forgot I added a seperate source-factory async for it...whow, I
>> >> >> forgot I did all that back then :-))
>> >> >>
>> >> >> You should follow that page!
>> >> >>
>> >> >> >>
>> >> >> > Btw, if I understand the async option correctly, the regeneration
>> is
>> >> >> still
>> >> >> > initiated by an incoming request.
>> >> >>
>> >> >> yes... (you can have some cron script calling it if you want?)
>> >> >>
>> >> >> > Does that mean that if a request arrives first after an expire it
>> >> still
>> >> >> gets
>> >> >> > the old content served?
>> >> >>
>> >> >> Exactly....
>> >> >>
>> >> >> > In other words, when page traffic is sufficiently low, the site
>> will
>> >> >> always
>> >> >> > produce expired content?
>> >> >>
>> >> >> Tja, that's what you get with a async fetch...iirc, I did not add a
>> >> >> cron job checking the cache for async expired entries and refetch
>> >> >> them...
>> >> >>
>> >> >> >
>> >> >> > This shouldn't be a problem for the case we're experiencing our
>> >> problems,
>> >> >> > but it would be something to take into consideration for different
>> >> cases.
>> >> >>
>> >> >> Well....yes, I see your point, but it was quite hard already :-))
>> >> >>
>> >> >> Just try it I think is the best!
>> >> >>
>> >> >> Regards Ard
>> >> >>
>> >> >> >
>> >> >> > Regards,
>> >> >> >
>> >> >> > Reinier
>> >> >> >
>> >> >> > Reinier van den Born
>> >> >> > HintTech B.V.
>> >> >> >
>> >> >> > T: +31(0)88 268 25 00
>> >> >> > F: +31(0)88 268 25 01
>> >> >> > M: +31(0)6 494 171 36
>> >> >> >
>> >> >> > Delftechpark 37i | 2628 XJ Delft | The Netherlands
>> >> >> > www.hinttech.com<javascript:void('http://www.hinttech.com');>
>> >> >> >
>> >> >> > HintTech is a specialist in eBusiness Technology ( .Net, Java
>> >> platform,
>> >> >> > Tridion ) and IT-Projects.
>> >> >> > Chamber of Commerce The Hague nr. 27242282 | Sales Tax nr.
>> >> >> NL8062.16.396.B01
>> >> >> >
>> >> >> >
>> >>
>> >> Deleted tail of the conversation here.
>> > ********************************************
>> > Hippocms-dev: Hippo CMS development public mailinglist
>> >
>> > Searchable archives can be found at:
>> > MarkMail: http://hippocms-dev.markmail.org
>> > Nabble: http://www.nabble.com/Hippo-CMS-f26633.html
>> >
>> >
>> ********************************************
>> Hippocms-dev: Hippo CMS development public mailinglist
>>
>> Searchable archives can be found at:
>> MarkMail: http://hippocms-dev.markmail.org
>> Nabble: http://www.nabble.com/Hippo-CMS-f26633.html
>>
>>
>
********************************************
Hippocms-dev: Hippo CMS development public mailinglist

Searchable archives can be found at:
MarkMail: http://hippocms-dev.markmail.org
Nabble: http://www.nabble.com/Hippo-CMS-f26633.html

Reply via email to