Issue 3512: Change fsync to use fullfsync on platforms (like OS X) that have/need it (original) (raw)

Created on 2008-08-07 04:07 by icharnas, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
fullfsync.patch icharnas,2008-08-07 04:07
Messages (5)
msg70810 - (view) Author: Ian Charnas (icharnas) Date: 2008-08-07 04:07
fsync on OSX does not actually flush the file to disk as is desired. This is a problem because application developers rely on fsync for file integrity. SQLite [1] and MySQL [2] and other major database systems all use 'fullfsync' on OS X instead of fsync, because 'fullfsync' provides the desired behavior. Because the documented behavior of python's fsync function is to "force write of file with filedescriptor to disk", I believe that on OS X the fullfsync call should be used instead of fsync. The supplied patch adds this functionality in a non-platform-specific way. It checks if there is a FULLFSYNC fcntl call available (using "#ifdef F_FULLFSYNC", where F_FULLFSYNC is defined in sys/fcntl.h), and if this symbol is defined then a fnctl(F_FULLFSYNC, fd, 0) is called instead of fsync. [1] SQLite uses fullfsync on all platforms that define it: http://www.sqlite.org/cvstrac/fileview?f=sqlite/src/os_unix.c [2] MySQL uses fullfsync only on the darwin platform and only when F_FULLFSYNC is defined as 51, which seems to be short-sighted in that this symbol may change value in future versions of OS X. To see this code, download a mysql 5.x source snapshot and open up mysql-/innobase/os/os0file.c
msg70811 - (view) Author: Ian Charnas (icharnas) Date: 2008-08-07 04:09
My patch is against trunk, but really this fix should be applied to all versions that will have future releases.
msg70835 - (view) Author: Guido van Rossum (gvanrossum) * (Python committer) Date: 2008-08-07 16:20
IMO it would be better not to confuse matters my having os.fsync() call fullfsync(); it's better to add a separate os.fullfsync() call on platforms that support it. That way the application can choose. I suppose Apple had a reason for changing the behavior...
msg70839 - (view) Author: Guido van Rossum (gvanrossum) * (Python committer) Date: 2008-08-07 16:53
Based on discussion in python-dev, I'm rejecting this patch. Open a new one if you want to make F_FULLSYNC available.
msg70843 - (view) Author: Ian Charnas (icharnas) Date: 2008-08-07 17:38
Done. See 3517 http://bugs.python.org/issue3517 On Thu, Aug 7, 2008 at 12:53 PM, Guido van Rossum <report@bugs.python.org> wrote: > > Guido van Rossum <guido@python.org> added the comment: > > Based on discussion in python-dev, I'm rejecting this patch. > > Open a new one if you want to make F_FULLSYNC available. > > ---------- > resolution: -> rejected > status: open -> closed > > _______________________________________ > Python tracker <report@bugs.python.org> > <http://bugs.python.org/issue3512> > _______________________________________ >
History
Date User Action Args
2022-04-11 14:56:37 admin set github: 47762
2008-08-07 17:38:12 icharnas set messages: +
2008-08-07 16:53:30 gvanrossum set status: open -> closedresolution: rejectedmessages: +
2008-08-07 16:20:31 gvanrossum set nosy: + gvanrossummessages: +
2008-08-07 04:09:41 icharnas set messages: +
2008-08-07 04:07:39 icharnas create