From d661580760899b522f909d142f919d7489354c5f Mon Sep 17 00:00:00 2001 From: Mats Kindahl Date: Thu, 7 Dec 2023 17:07:19 +0100 Subject: [PATCH] Change bgw_log_level to use PGC_SUSET Right now `bgw_log_level` requires `ALTER SYSTEM` since it is using `PGC_SIGHUP` but we want to make sure that it is possible to set the scheduler log level using `ALTER DATABASE` which allows it to be replicated. Since we want to allow configuration to be reloaded without restarting the server, we are limited to `PGC_SUSET` and `PGC_SIGHUP`. --- .unreleased/fix_6384 | 1 + src/guc.c | 2 +- tsl/test/expected/bgw_scheduler_control.out | 10 ++++++++-- tsl/test/sql/bgw_scheduler_control.sql | 12 ++++++++++-- 4 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 .unreleased/fix_6384 diff --git a/.unreleased/fix_6384 b/.unreleased/fix_6384 new file mode 100644 index 00000000000..c56f88caf3b --- /dev/null +++ b/.unreleased/fix_6384 @@ -0,0 +1 @@ +Fixes: #6384 Change bgw_log_level to use PGC_SUSET diff --git a/src/guc.c b/src/guc.c index f681eb8bada..e3d40e93ee3 100644 --- a/src/guc.c +++ b/src/guc.c @@ -742,7 +742,7 @@ _guc_init(void) /* valueAddr= */ &ts_guc_bgw_log_level, /* bootValue= */ WARNING, /* options= */ loglevel_options, - /* context= */ PGC_SIGHUP, + /* context= */ PGC_SUSET, 0, NULL, NULL, diff --git a/tsl/test/expected/bgw_scheduler_control.out b/tsl/test/expected/bgw_scheduler_control.out index 725077f7db0..ea59d4da74e 100644 --- a/tsl/test/expected/bgw_scheduler_control.out +++ b/tsl/test/expected/bgw_scheduler_control.out @@ -10,6 +10,7 @@ CREATE FUNCTION ts_bgw_params_destroy() RETURNS VOID AS :MODULE_PATHNAME LANGUAGE C VOLATILE; CREATE FUNCTION ts_bgw_params_reset_time(set_time BIGINT, wait BOOLEAN) RETURNS VOID AS :MODULE_PATHNAME LANGUAGE C VOLATILE; +ALTER DATABASE :TEST_DBNAME OWNER TO :ROLE_DEFAULT_PERM_USER; -- These are needed to set up the test scheduler CREATE TABLE public.bgw_dsm_handle_store(handle BIGINT); INSERT INTO public.bgw_dsm_handle_store VALUES (0); @@ -40,7 +41,7 @@ TRUNCATE _timescaledb_internal.bgw_job_stat; -- Debug messages should be in log now which it wasn't before. -- \c :TEST_DBNAME :ROLE_SUPERUSER -ALTER SYSTEM SET timescaledb.bgw_log_level = 'DEBUG1'; +ALTER DATABASE :TEST_DBNAME SET timescaledb.bgw_log_level = 'DEBUG1'; SELECT pg_reload_conf(); pg_reload_conf ---------------- @@ -94,7 +95,7 @@ SELECT * FROM cleaned_bgw_log; 4 | DB Scheduler | database scheduler for database (RANDOM) exiting (7 rows) -ALTER SYSTEM RESET timescaledb.bgw_log_level; +ALTER DATABASE :TEST_DBNAME RESET timescaledb.bgw_log_level; SELECT pg_reload_conf(); pg_reload_conf ---------------- @@ -126,3 +127,8 @@ SELECT delete_job(:job_id); (1 row) +-- Make sure we can set the variable using ALTER SYSTEM. We don't +-- bother about checking that it has an effect here since we already +-- knows it works from the above code. +ALTER SYSTEM SET timescaledb.bgw_log_level TO 'DEBUG2'; +ALTER SYSTEM RESET timescaledb.bgw_log_level; diff --git a/tsl/test/sql/bgw_scheduler_control.sql b/tsl/test/sql/bgw_scheduler_control.sql index 507877861fc..7fc40ce0a8b 100644 --- a/tsl/test/sql/bgw_scheduler_control.sql +++ b/tsl/test/sql/bgw_scheduler_control.sql @@ -15,6 +15,8 @@ AS :MODULE_PATHNAME LANGUAGE C VOLATILE; CREATE FUNCTION ts_bgw_params_reset_time(set_time BIGINT, wait BOOLEAN) RETURNS VOID AS :MODULE_PATHNAME LANGUAGE C VOLATILE; +ALTER DATABASE :TEST_DBNAME OWNER TO :ROLE_DEFAULT_PERM_USER; + -- These are needed to set up the test scheduler CREATE TABLE public.bgw_dsm_handle_store(handle BIGINT); INSERT INTO public.bgw_dsm_handle_store VALUES (0); @@ -44,7 +46,7 @@ TRUNCATE _timescaledb_internal.bgw_job_stat; -- Debug messages should be in log now which it wasn't before. -- \c :TEST_DBNAME :ROLE_SUPERUSER -ALTER SYSTEM SET timescaledb.bgw_log_level = 'DEBUG1'; +ALTER DATABASE :TEST_DBNAME SET timescaledb.bgw_log_level = 'DEBUG1'; SELECT pg_reload_conf(); SELECT ts_bgw_params_reset_time(0, false); @@ -75,7 +77,7 @@ INSERT INTO _timescaledb_config.bgw_job( SELECT ts_bgw_db_scheduler_test_run_and_wait_for_scheduler_finish(25, 0); SELECT * FROM cleaned_bgw_log; -ALTER SYSTEM RESET timescaledb.bgw_log_level; +ALTER DATABASE :TEST_DBNAME RESET timescaledb.bgw_log_level; SELECT pg_reload_conf(); TRUNCATE bgw_log; @@ -84,3 +86,9 @@ SELECT ts_bgw_db_scheduler_test_run_and_wait_for_scheduler_finish(25, 0); SELECT * FROM cleaned_bgw_log; SELECT delete_job(:job_id); + +-- Make sure we can set the variable using ALTER SYSTEM. We don't +-- bother about checking that it has an effect here since we already +-- knows it works from the above code. +ALTER SYSTEM SET timescaledb.bgw_log_level TO 'DEBUG2'; +ALTER SYSTEM RESET timescaledb.bgw_log_level;