From bcf744b93d31ae42ffb4122b8d16fddb3e5391d2 Mon Sep 17 00:00:00 2001 From: Maxim Orlov Date: Wed, 20 Sep 2023 14:57:46 +0300 Subject: [PATCH v10] Fix conflicting types for sync_method. Rename xlog's sync_method in order to: - avoid conflicting types error for sync_method if include order is changed; - be consistent with GUC name. See also: 3ed19567198ddb34ab32be6ebdf132148287abdf cccc6cdeb32f010f1cf777a9e9a85344a4317ab8 8c16ad3b43299695f203f9157a2b27c22b9ed634 --- src/backend/access/transam/xlog.c | 31 ++++++++++++++++------------- src/backend/storage/file/fd.c | 2 +- src/backend/utils/misc/guc_tables.c | 6 +++--- src/include/access/xlog.h | 2 +- 4 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index fcbde10529b..4ccb62e4c2a 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -130,7 +130,7 @@ bool *wal_consistency_checking = NULL; bool wal_init_zero = true; bool wal_recycle = true; bool log_checkpoints = true; -int sync_method = DEFAULT_SYNC_METHOD; +int wal_sync_method = DEFAULT_SYNC_METHOD; int wal_level = WAL_LEVEL_REPLICA; int CommitDelay = 0; /* precommit delay in microseconds */ int CommitSiblings = 5; /* # concurrent xacts needed to sleep */ @@ -171,7 +171,7 @@ static bool check_wal_consistency_checking_deferred = false; /* * GUC support */ -const struct config_enum_entry sync_method_options[] = { +const struct config_enum_entry wal_sync_method_options[] = { {"fsync", SYNC_METHOD_FSYNC, false}, #ifdef HAVE_FSYNC_WRITETHROUGH {"fsync_writethrough", SYNC_METHOD_FSYNC_WRITETHROUGH, false}, @@ -2328,8 +2328,8 @@ XLogWrite(XLogwrtRqst WriteRqst, TimeLineID tli, bool flexible) * have no open file or the wrong one. However, we do not need to * fsync more than one file. */ - if (sync_method != SYNC_METHOD_OPEN && - sync_method != SYNC_METHOD_OPEN_DSYNC) + if (wal_sync_method != SYNC_METHOD_OPEN && + wal_sync_method != SYNC_METHOD_OPEN_DSYNC) { if (openLogFile >= 0 && !XLByteInPrevSeg(LogwrtResult.Write, openLogSegNo, @@ -2959,7 +2959,7 @@ XLogFileInitInternal(XLogSegNo logsegno, TimeLineID logtli, */ *added = false; fd = BasicOpenFile(path, O_RDWR | PG_BINARY | O_CLOEXEC | - get_sync_bit(sync_method)); + get_sync_bit(wal_sync_method)); if (fd < 0) { if (errno != ENOENT) @@ -3124,7 +3124,7 @@ XLogFileInit(XLogSegNo logsegno, TimeLineID logtli) /* Now open original target segment (might not be file I just made) */ fd = BasicOpenFile(path, O_RDWR | PG_BINARY | O_CLOEXEC | - get_sync_bit(sync_method)); + get_sync_bit(wal_sync_method)); if (fd < 0) ereport(ERROR, (errcode_for_file_access(), @@ -3356,7 +3356,7 @@ XLogFileOpen(XLogSegNo segno, TimeLineID tli) XLogFilePath(path, tli, segno, wal_segment_size); fd = BasicOpenFile(path, O_RDWR | PG_BINARY | O_CLOEXEC | - get_sync_bit(sync_method)); + get_sync_bit(wal_sync_method)); if (fd < 0) ereport(PANIC, (errcode_for_file_access(), @@ -8141,9 +8141,9 @@ get_sync_bit(int method) * GUC support */ void -assign_xlog_sync_method(int new_sync_method, void *extra) +assign_xlog_sync_method(int new_wal_sync_method, void *extra) { - if (sync_method != new_sync_method) + if (wal_sync_method != new_wal_sync_method) { /* * To ensure that no blocks escape unsynced, force an fsync on the @@ -8169,8 +8169,11 @@ assign_xlog_sync_method(int new_sync_method, void *extra) } pgstat_report_wait_end(); - if (get_sync_bit(sync_method) != get_sync_bit(new_sync_method)) + if (get_sync_bit(wal_sync_method) != + get_sync_bit(new_wal_sync_method)) + { XLogFileClose(); + } } } } @@ -8195,8 +8198,8 @@ issue_xlog_fsync(int fd, XLogSegNo segno, TimeLineID tli) * file. */ if (!enableFsync || - sync_method == SYNC_METHOD_OPEN || - sync_method == SYNC_METHOD_OPEN_DSYNC) + wal_sync_method == SYNC_METHOD_OPEN || + wal_sync_method == SYNC_METHOD_OPEN_DSYNC) return; /* Measure I/O timing to sync the WAL file */ @@ -8206,7 +8209,7 @@ issue_xlog_fsync(int fd, XLogSegNo segno, TimeLineID tli) INSTR_TIME_SET_ZERO(start); pgstat_report_wait_start(WAIT_EVENT_WAL_SYNC); - switch (sync_method) + switch (wal_sync_method) { case SYNC_METHOD_FSYNC: if (pg_fsync_no_writethrough(fd) != 0) @@ -8228,7 +8231,7 @@ issue_xlog_fsync(int fd, XLogSegNo segno, TimeLineID tli) Assert(false); break; default: - elog(PANIC, "unrecognized wal_sync_method: %d", sync_method); + elog(PANIC, "unrecognized wal_sync_method: %d", wal_sync_method); break; } diff --git a/src/backend/storage/file/fd.c b/src/backend/storage/file/fd.c index 3fed475c381..2f8737fa426 100644 --- a/src/backend/storage/file/fd.c +++ b/src/backend/storage/file/fd.c @@ -400,7 +400,7 @@ pg_fsync(int fd) /* #if is to skip the sync_method test if there's no need for it */ #if defined(HAVE_FSYNC_WRITETHROUGH) - if (sync_method == SYNC_METHOD_FSYNC_WRITETHROUGH) + if (wal_sync_method == SYNC_METHOD_FSYNC_WRITETHROUGH) return pg_fsync_writethrough(fd); else #endif diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.c index bdb26e2b77d..12639a6cf6d 100644 --- a/src/backend/utils/misc/guc_tables.c +++ b/src/backend/utils/misc/guc_tables.c @@ -484,7 +484,7 @@ static const struct config_enum_entry wal_compression_options[] = { extern const struct config_enum_entry wal_level_options[]; extern const struct config_enum_entry archive_mode_options[]; extern const struct config_enum_entry recovery_target_action_options[]; -extern const struct config_enum_entry sync_method_options[]; +extern const struct config_enum_entry wal_sync_method_options[]; extern const struct config_enum_entry dynamic_shared_memory_options[]; /* @@ -4832,8 +4832,8 @@ struct config_enum ConfigureNamesEnum[] = gettext_noop("Selects the method used for forcing WAL updates to disk."), NULL }, - &sync_method, - DEFAULT_SYNC_METHOD, sync_method_options, + &wal_sync_method, + DEFAULT_SYNC_METHOD, wal_sync_method_options, NULL, assign_xlog_sync_method, NULL }, diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index 48ca8523810..4c3beea36c4 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -24,7 +24,7 @@ #define SYNC_METHOD_OPEN 2 /* for O_SYNC */ #define SYNC_METHOD_FSYNC_WRITETHROUGH 3 #define SYNC_METHOD_OPEN_DSYNC 4 /* for O_DSYNC */ -extern PGDLLIMPORT int sync_method; +extern PGDLLIMPORT int wal_sync_method; extern PGDLLIMPORT XLogRecPtr ProcLastRecPtr; extern PGDLLIMPORT XLogRecPtr XactLastRecEnd; -- 2.41.0