On 02/16/2011 08:44 AM, Philip Martin wrote:
So if the timing is just right it's possible for one Apache process to
start writing the transaction, for that process to stop, and for another
process to take over the commit.  WANdisco observed problems on FSFS
where the transaction is synced at the end of the commit, not for each
http request.  What ends up in the transaction probably depends on the
details of the kernel memory and disk caching, the system load, the
underlying OS filesystem, etc.

This is a concern when the repository is hosted on an NFS or other network attached storage? If all the Apache processes are on the same system, then I wouldn't expect any issues.

In my testing with squid I have not managed to produce a corrupt commit,
but I suspect that under the right conditions it would happen.  I think
that getting mod_dav_svn to sync before acknowledging each http request
is a non-starter, for performance reasons.  Can mod_dav_svn detect that
the connection has changed?  It's too late to get the old process to
sync, but perhaps we could abort the commit?  Some valid commits would
fail, but it would avoid the small risk of a corrupt commit.

I think an fsfs.conf option to say that you want everything fsync()ed would be an acceptable solution, for people that deploy on NFS.

Blair

Reply via email to