[MacPorts] #16145: Erlang R12B-3 needs a patch for fsync problem
MacPorts
noreply at macports.org
Thu Aug 7 06:24:07 PDT 2008
#16145: Erlang R12B-3 needs a patch for fsync problem
-------------------------------------+--------------------------------------
Reporter: jerry.jalava at gmail.com | Owner: bfulgham at macports.org
Type: defect | Status: new
Priority: Normal | Milestone:
Component: ports | Version: 1.6.0
Resolution: | Keywords:
-------------------------------------+--------------------------------------
Comment (by febeling at macports.org):
It is a bit hard to tell because the errors you get are potentially
dependent load and io patters of the OS kernel.
I had problems in fairly simple test cases though, and those are indeed
gone now. Just for the record, the whole
problem is not something esoteric which only couchdb encounters, but it is
simply the behavior of the function
file:sync/1 from kernel. OTOH, one can't really speak of an erlang bug,
because the documented behavior explicitly
makes no guarantee:
{{{
sync(IoDevice) -> ok | {error, Reason}
Types:
IoDevice = io_device()
Reason = ext_posix() | terminated
Makes sure that any buffers kept by the operating system (not by the
Erlang runtime system) are written to disk. On some platforms, this
function might have no effect.
}}}
But I don't see how you could program any serious disk persistence without
this function. This is also the view held in the
fsync man page from Apple.
After the patch I used dtruss to watch syscalls while syncing a file from
an erlang shell
and this confirms, that we call fctnl now
{{{
79500/0x7f944f0: fcntl(0x7, 0x33, 0xFFFFFFFFB01A8BD8) = 0 0
}}}
0x33 or 51 is the value of F_FULLSYNC
{{{
./sys/fcntl.h:206:#define F_FULLFSYNC 51 /* fsync + ask the
drive to flush to the media */
}}}
And that was the intention of the patch. So I think this issue could be
closed.
--
Ticket URL: <http://trac.macports.org/ticket/16145#comment:6>
MacPorts <http://www.macports.org/>
Ports system for Mac OS
More information about the macports-tickets
mailing list