From db4d879819417cade323249d6f68a1bef635857e Mon Sep 17 00:00:00 2001 From: Fujii Masao Date: Wed, 3 Jul 2024 20:17:42 +0900 Subject: [PATCH v1] Prevent summarize_wal from enabling when wal_level is minimal. WAL summarization should not be enabled if wal_level is set to minimal. At startup, the postmaster checks these settings and exits with an error if they are not configured properly. However, previously, summarize_wal could be set to true after the server started with wal_level = minimal, causing issues. This commit adds a GUC check hook to ensure summarize_wal cannot be enabled when wal_level is minimal. --- src/backend/postmaster/walsummarizer.c | 16 +++++++++++++++- src/backend/utils/misc/guc_tables.c | 2 +- src/include/utils/guc_hooks.h | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/backend/postmaster/walsummarizer.c b/src/backend/postmaster/walsummarizer.c index 55dc2ea8f5..806daba5ea 100644 --- a/src/backend/postmaster/walsummarizer.c +++ b/src/backend/postmaster/walsummarizer.c @@ -44,7 +44,7 @@ #include "storage/proc.h" #include "storage/procsignal.h" #include "storage/shmem.h" -#include "utils/guc.h" +#include "utils/guc_hooks.h" #include "utils/memutils.h" #include "utils/wait_event.h" @@ -1536,3 +1536,17 @@ MaybeRemoveOldWalSummaries(void) } } } + +/* + * GUC check_hook for summarize_wal + */ +bool +check_summarize_wal(bool *newval, void **extra, GucSource source) +{ + if (*newval && wal_level == WAL_LEVEL_MINIMAL) + { + GUC_check_errmsg("WAL cannot be summarized when \"wal_level\" is \"minimal\""); + return false; + } + return true; +} diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.c index d28b0bcb40..607e9856de 100644 --- a/src/backend/utils/misc/guc_tables.c +++ b/src/backend/utils/misc/guc_tables.c @@ -1781,7 +1781,7 @@ struct config_bool ConfigureNamesBool[] = }, &summarize_wal, false, - NULL, NULL, NULL + check_summarize_wal, NULL, NULL }, { diff --git a/src/include/utils/guc_hooks.h b/src/include/utils/guc_hooks.h index 070d3f2a1a..83bf040ddf 100644 --- a/src/include/utils/guc_hooks.h +++ b/src/include/utils/guc_hooks.h @@ -138,6 +138,7 @@ extern bool check_ssl(bool *newval, void **extra, GucSource source); extern bool check_stage_log_stats(bool *newval, void **extra, GucSource source); extern bool check_subtrans_buffers(int *newval, void **extra, GucSource source); +extern bool check_summarize_wal(bool *newval, void **extra, GucSource source); extern bool check_synchronous_standby_names(char **newval, void **extra, GucSource source); extern void assign_synchronous_standby_names(const char *newval, void *extra); -- 2.45.1