[ZODB-Dev] Use of fsync in ZODB
Marius Gedminas
mgedmin at b4net.lt
Fri Jul 23 14:46:51 EDT 2004
Hi,
I've been reading http://zope.org/Wikis/ZODB/FileStorageBackup (a
wonderful resource, thanks Tim!). Among other things, it says:
There's one exception to the rule that bytes in a FileStorage are
never overwritten. When a new transaction is committed to a
FileStorage, a special status byte is first written to record that a
transaction record append has started. When the append is complete,
this status byte (near the start of the new transaction record) is
overwritten with a value indicating that the commit completed
successfully. If, for example, the computer crashes before the append
is complete, the next time the FileStorage is opened the status byte
still has its initial "append started but didn't complete" value, and
the FileStorage is then truncated, to remove the incomplete append.
After reading this paragraph I assumed that ZODB would call os.fsync
before overwriting the transaction status byte (and call os.fsync again
after overwriting it). This turns out not to be the case -- in ZODB
3.2.2 (bundled with Zope 2.7.1) os.fsync is only called once, *after*
overwriting the transaction status byte, if I understood the code
correctly.
Doesn't this mean that if the system suddenly crashes in the middle of
os.fsync, the Data.fs on disk will contain an incomplete transaction,
but the transaction status byte would claim that the transaction is
complete. Wouldn't that be bad?
Just wondering,
Marius Gedminas
--
Eagleson's Law:
Any code of your own that you haven't looked at for six or more
months, might as well have been written by someone else. (Eagleson
is an optimist, the real number is more like three weeks.)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://mail.zope.org/pipermail/zodb-dev/attachments/20040723/73755138/attachment.bin
More information about the ZODB-Dev
mailing list