On Thu, Nov 29, 2018 at 3:30 AM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> Thomas Munro <thomas.munro@enterprisedb.com> writes:
> > On Wed, Nov 28, 2018 at 6:47 PM Tom Lane <tgl@sss.pgh.pa.us> wrote:
> >> Is it possible that unlink() on APFS is not atomic?
>
> > I think you might be right.
> > https://github.com/macdice/unlinktest
>
> Bleah. But you can do better than ask whether it's a bug: you can
> quote POSIX:
>
> The unlink() function shall remove a link to a file. If path names a
> symbolic link, unlink() shall remove the symbolic link named by path
> and shall not affect any file or directory named by the contents of
> the symbolic link. Otherwise, unlink() shall remove the link named by
> the pathname pointed to by path and shall decrement the link count of
> the file referenced by the link.
>
> When the file's link count becomes 0 and no process has the file open,
> the space occupied by the file shall be freed and the file shall no
> longer be accessible. If one or more processes have the file open when
> the last link is removed, the link shall be removed before unlink()
> returns, but the removal of the file contents shall be postponed until
> all references to the file are closed.
>
> Not a lot of wiggle room there.
Agreed. Secret non-shareable bug report filed. Fingers crossed.
--
Thomas Munro
http://www.enterprisedb.com