> From: Les Mikesell [mailto:lesmikes...@gmail.com] 
> 
> A filesystem snapshot should present exactly the same scenario as a machine 
> that 
> lost power or crashed for some similar reason at that moment, so the question 
> boils down to whether subversion can recover sensibly from a crash at any 
> point. 
>   The fsync's are going to be the critical thing for ordering operations at 
> the 
> disk level, however there is no guarantee how much of the fsync operation 
> might 
> have completed when a crash or snapshot happens.

...and therefore applications (should) make no assumptions about the order of 
writing, or, in the case of a crash, what data actually was written.

In generally, atomic updates have three phases: prepare, commit, apply.  In 
prepare, all changes are written in a manner that either does not touch the 
main data (journal), or can be undone.  In commit, an atomic write marks the 
prepared data as committed.  In apply, changes written in the prepare phase are 
applied to the main data if required (ie: journal entries are "replayed" to the 
main database).

The only atomic requirement here is that after prepare, we can flush everything 
(order is not important) and the commit phase can be written atomically.  For 
example, the db/current file is a integer string.  Since that file fits in a 
single disk block, there is no chance that an update to db/current does not 
leave either the old or the new contents in the file.

-- 
-Justin


Reply via email to