Re: Loaded footgun open_datasync on Windows

Amit Kapila <amit.kapila16@gmail.com>

From: Amit Kapila <amit.kapila16@gmail.com>
To: Laurenz Albe <laurenz.albe@cybertec.at>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2018-06-01T13:26:55Z
Lists: pgsql-hackers
On Fri, Jun 1, 2018 at 3:13 PM, Laurenz Albe <laurenz.albe@cybertec.at>
wrote:

> I recently read our documentation about reliability on Windows:
>
> > On Windows, if wal_sync_method is open_datasync (the default), write
> caching can
> > be disabled by unchecking
> > My Computer\Open\disk drive\Properties\Hardware\Properties\Policies\Enable
> write caching
> > on the disk. Alternatively, set wal_sync_method to fsync or
> fsync_writethrough,
> > which prevent write caching.
>
> It seems dangerous to me to initialize "wal_sync_method" to a method that
> is unsafe
> by default.  Admittedly I am not a Windows man, but the fact that this has
> eluded me
> up to now leads me to believe that other people running PostgreSQL on
> Windows might
> also have missed that important piece of advice and are consequently
> running with
> an unsafe setup.
>
> Wouldn't it be smarter to set a different default value on Windows, like
> we do on
> Linux (for other reasons)?
>
>
One thing to note is that it seems that in code we use
FILE_FLAG_WRITE_THROUGH for open_datasync which according to MSDN [1] will
bypass any intermediate cache .  See pgwin32_open.  Have you experimented
to set any other option as we have a comment in code which say Win32 only
has O_DSYNC?


[1] -
https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx

-- 
With Regards,
Amit Kapila.
EnterpriseDB: http://www.enterprisedb.com

Commits

  1. Allow concurrent-safe open() and fopen() in frontend code for Windows

  2. Fix inclusions of c.h from .h files.

  3. Allow borland compiles.

  4. Corrects issues recently posted by Dann Corbit, allowing libpq/psql to