mirror of
https://github.com/postgres/postgres.git
synced 2025-05-28 00:03:23 -04:00
Remove O_FSYNC and associated macros.
O_FSYNC was a pre-POSIX way of spelling O_SYNC, supported since commit 9d645fd84c3 for non-conforming operating systems of the time. It's not needed on any modern system. We can just use standard O_SYNC directly if it exists (= all targeted systems except Windows), and get rid of our OPEN_SYNC_FLAG macro. Similarly for standard O_DSYNC, we can just use that directly if it exists (= all targeted systems except DragonFlyBSD), and get rid of our OPEN_DATASYNC_FLAG macro. We still avoid choosing open_datasync as a default value for wal_sync_method if O_DSYNC has the same value as O_SYNC (= only OpenBSD), so there is no change in default behavior. Discussion: https://postgr.es/m/CA%2BhUKGJE7y92NY7FG2ftUbZUaqohBU65_Ys_7xF5mUHo4wirTQ%40mail.gmail.com
This commit is contained in:
parent
4f1f5a7f85
commit
a1b56090eb
@ -171,10 +171,10 @@ const struct config_enum_entry sync_method_options[] = {
|
||||
#ifdef HAVE_FDATASYNC
|
||||
{"fdatasync", SYNC_METHOD_FDATASYNC, false},
|
||||
#endif
|
||||
#ifdef OPEN_SYNC_FLAG
|
||||
#ifdef O_SYNC
|
||||
{"open_sync", SYNC_METHOD_OPEN, false},
|
||||
#endif
|
||||
#ifdef OPEN_DATASYNC_FLAG
|
||||
#ifdef O_DSYNC
|
||||
{"open_datasync", SYNC_METHOD_OPEN_DSYNC, false},
|
||||
#endif
|
||||
{NULL, 0, false}
|
||||
@ -7894,10 +7894,10 @@ get_sync_bit(int method)
|
||||
|
||||
/*
|
||||
* Optimize writes by bypassing kernel cache with O_DIRECT when using
|
||||
* O_SYNC/O_FSYNC and O_DSYNC. But only if archiving and streaming are
|
||||
* disabled, otherwise the archive command or walsender process will read
|
||||
* the WAL soon after writing it, which is guaranteed to cause a physical
|
||||
* read if we bypassed the kernel cache. We also skip the
|
||||
* O_SYNC and O_DSYNC. But only if archiving and streaming are disabled,
|
||||
* otherwise the archive command or walsender process will read the WAL
|
||||
* soon after writing it, which is guaranteed to cause a physical read if
|
||||
* we bypassed the kernel cache. We also skip the
|
||||
* posix_fadvise(POSIX_FADV_DONTNEED) call in XLogFileClose() for the same
|
||||
* reason.
|
||||
*
|
||||
@ -7921,13 +7921,13 @@ get_sync_bit(int method)
|
||||
case SYNC_METHOD_FSYNC_WRITETHROUGH:
|
||||
case SYNC_METHOD_FDATASYNC:
|
||||
return 0;
|
||||
#ifdef OPEN_SYNC_FLAG
|
||||
#ifdef O_SYNC
|
||||
case SYNC_METHOD_OPEN:
|
||||
return OPEN_SYNC_FLAG | o_direct_flag;
|
||||
return O_SYNC | o_direct_flag;
|
||||
#endif
|
||||
#ifdef OPEN_DATASYNC_FLAG
|
||||
#ifdef O_DSYNC
|
||||
case SYNC_METHOD_OPEN_DSYNC:
|
||||
return OPEN_DATASYNC_FLAG | o_direct_flag;
|
||||
return O_DSYNC | o_direct_flag;
|
||||
#endif
|
||||
default:
|
||||
/* can't happen (unless we are out of sync with option array) */
|
||||
|
@ -300,7 +300,7 @@ test_sync(int writes_per_op)
|
||||
printf(LABEL_FORMAT, "open_datasync");
|
||||
fflush(stdout);
|
||||
|
||||
#ifdef OPEN_DATASYNC_FLAG
|
||||
#ifdef O_DSYNC
|
||||
if ((tmpfile = open_direct(filename, O_RDWR | O_DSYNC | PG_BINARY, 0)) == -1)
|
||||
{
|
||||
printf(NA_FORMAT, _("n/a*"));
|
||||
@ -407,8 +407,8 @@ test_sync(int writes_per_op)
|
||||
printf(LABEL_FORMAT, "open_sync");
|
||||
fflush(stdout);
|
||||
|
||||
#ifdef OPEN_SYNC_FLAG
|
||||
if ((tmpfile = open_direct(filename, O_RDWR | OPEN_SYNC_FLAG | PG_BINARY, 0)) == -1)
|
||||
#ifdef O_SYNC
|
||||
if ((tmpfile = open_direct(filename, O_RDWR | O_SYNC | PG_BINARY, 0)) == -1)
|
||||
{
|
||||
printf(NA_FORMAT, _("n/a*"));
|
||||
fs_warning = true;
|
||||
@ -466,7 +466,7 @@ test_open_syncs(void)
|
||||
static void
|
||||
test_open_sync(const char *msg, int writes_size)
|
||||
{
|
||||
#ifdef OPEN_SYNC_FLAG
|
||||
#ifdef O_SYNC
|
||||
int tmpfile,
|
||||
ops,
|
||||
writes;
|
||||
@ -475,8 +475,8 @@ test_open_sync(const char *msg, int writes_size)
|
||||
printf(LABEL_FORMAT, msg);
|
||||
fflush(stdout);
|
||||
|
||||
#ifdef OPEN_SYNC_FLAG
|
||||
if ((tmpfile = open_direct(filename, O_RDWR | OPEN_SYNC_FLAG | PG_BINARY, 0)) == -1)
|
||||
#ifdef O_SYNC
|
||||
if ((tmpfile = open_direct(filename, O_RDWR | O_SYNC | PG_BINARY, 0)) == -1)
|
||||
printf(NA_FORMAT, _("n/a*"));
|
||||
else
|
||||
{
|
||||
|
@ -69,28 +69,12 @@ typedef uint16 RepOriginId;
|
||||
* are available on the current platform, and to choose an appropriate
|
||||
* default method. We assume that fsync() is always available, and that
|
||||
* configure determined whether fdatasync() is.
|
||||
*
|
||||
* Note that we define our own O_DSYNC on Windows, but not O_SYNC.
|
||||
*/
|
||||
#if defined(O_SYNC)
|
||||
#define OPEN_SYNC_FLAG O_SYNC
|
||||
#elif defined(O_FSYNC)
|
||||
#define OPEN_SYNC_FLAG O_FSYNC
|
||||
#endif
|
||||
|
||||
#if defined(O_DSYNC)
|
||||
#if defined(OPEN_SYNC_FLAG)
|
||||
/* O_DSYNC is distinct? */
|
||||
#if O_DSYNC != OPEN_SYNC_FLAG
|
||||
#define OPEN_DATASYNC_FLAG O_DSYNC
|
||||
#endif
|
||||
#else /* !defined(OPEN_SYNC_FLAG) */
|
||||
/* Win32 only has O_DSYNC */
|
||||
#define OPEN_DATASYNC_FLAG O_DSYNC
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(PLATFORM_DEFAULT_SYNC_METHOD)
|
||||
#define DEFAULT_SYNC_METHOD PLATFORM_DEFAULT_SYNC_METHOD
|
||||
#elif defined(OPEN_DATASYNC_FLAG)
|
||||
#elif defined(O_DSYNC) && (!defined(O_SYNC) || O_DSYNC != O_SYNC)
|
||||
#define DEFAULT_SYNC_METHOD SYNC_METHOD_OPEN_DSYNC
|
||||
#elif defined(HAVE_FDATASYNC)
|
||||
#define DEFAULT_SYNC_METHOD SYNC_METHOD_FDATASYNC
|
||||
|
Loading…
x
Reference in New Issue
Block a user