On Wed, 17 Jan 2007, Giuliano Gavazzi wrote:
I have a solution for the r470455 mod_disk_cache not caching SSI.
There are two points where the module seems incorrect to me, changing those
makes it work:
Since you're talking about the code on trunk, you should be warned
that the current state is somewhat unreliable due to merging patches
which then ran into an implementation discussion that never got solved
(I think). Last I heard, the current plan is to revoke most patches
and redo stuff.
However, since I'm the one to blame for the patches that has been
partially landed on trunk (which is the parts you touch) I can provide
my comments on your solutions (and I hope that others can chime in
where I'm wrong).
First, don't reindent code when not needed. That only serves to make
your patch hard to read.
1) in store_body the condition (!APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) was
incorrectly stopping the flow from ever going past (for static and dynamic
pages). I moved it, changing the condition. I will post the patch tomorrow.
From looking at the patch I can only say "huh?". The brigade is
complete when EOS is present, and only then can you complete the
storing procedure. From a quick look at your patch I can't see how it
could change things (instead of dropping out if not EOS you have a big
if-chunk if it indeed is EOS, only adding an indentation level).
I might have missed some detail, but it's not obious from the
hard-to-read patch...
2) in store_disk_headers nothing should happen (well, it should just return
or never be called) if the dobj->initial_size < 0.
It should be called, and it should do stuff.
One of the points of those patches are to solve the "thundering herd"
problem, simply described as when a frequently accessed object is
expired all accesses are served directly by your backend until one
access has completed successfully and the cache has been able to store
it. This is Bad if it causes your backend to grind to a halt.
To avoid this, the header is always written when the cache thinks it
should cache something. Other requests will find this header, and if
the size is unknown they will wait until it's updated with the correct
size, otherwise they will do read-while-caching and return the
contents as the file is being cached.
Those two changes make the header cache file store the correct resource size
also for dynamic pages.
It stores the size, but doing so it breaks quite a few things.
I think it would be best if someone (Graham?) could revoke the status
of mod_disk_cache on trunk to the agreed "last good" status, which is
essentially the same as 2.2.4 if I remember correctly.
As for your problems, I would recommend staying on 2.2.4 proper and
look further into the issue of expired/last-modified headers.
/Nikke
--
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Niklas Edmundsson, Admin @ {acc,hpc2n}.umu.se | [EMAIL PROTECTED]
---------------------------------------------------------------------------
And tomorrow will be like today, only more so.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=