On Jan 5, 2009, at 2:38 PM, Chris Anderson wrote:
On Mon, Jan 5, 2009 at 11:32 AM, Damien Katz <[email protected]>
wrote:
1) delayed commit (what you did last night)
2) fsync() commit (what I suspect Couch did on and around 0.8)
3) optional F_FULLSYNC commit, on OS X and any other platform that
provides this level of commit
If necessary and possible, we'll patch the Erlang VM. But if a
platform
doesn't support proper flushing, then it's not a platform that can
support
an ACID database.
If I follow correctly, you're saying that on OS X, 2 == 1, so we use 3
when we want to be ACID. On Linux, as far as we know, 2 will support
ACID. There's only really two options, ACID commit, and delayed
commit. It's up to CouchDB / Erlang / the OS to make sure that the
ACID option isn't false advertising. Makes sense.
[Disclaimer : I'm not an OS filesystem expert]
Except AFAIK that's not what is happening. fsync() on OS X or linux
doesn't support the 'deterministic commit to physical media', which is
what I think you think you are getting.
As far as I can tell, only OS X gives you that full durability via
fcntl(F_FULLSYNC), and it's horribly slow.
That's why I'm proposing three distinct modes (at least).
geir