diff options
author | Alvaro Herrera | 2015-04-03 14:52:55 +0000 |
---|---|---|
committer | Alvaro Herrera | 2015-04-03 14:52:55 +0000 |
commit | a75fb9b335db0e063ece283ebd207530abe1b53b (patch) | |
tree | 367d81a70f9dee7651ab30f256b3e7ba7aafb9a7 /src/backend | |
parent | 6e4bf4ecd3c2a266870139462a079809dfe7ab8c (diff) |
Have autovacuum workers listen to SIGHUP, too
They have historically ignored it, but it's been said to be useful at
times to change their settings mid-flight.
Author: Michael Paquier
Diffstat (limited to 'src/backend')
-rw-r--r-- | src/backend/postmaster/autovacuum.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c index 080c3e62df8..b2d37e5d479 100644 --- a/src/backend/postmaster/autovacuum.c +++ b/src/backend/postmaster/autovacuum.c @@ -311,7 +311,7 @@ static PgStat_StatTabEntry *get_pgstat_tabentry_relid(Oid relid, bool isshared, PgStat_StatDBEntry *shared, PgStat_StatDBEntry *dbentry); static void autovac_report_activity(autovac_table *tab); -static void avl_sighup_handler(SIGNAL_ARGS); +static void av_sighup_handler(SIGNAL_ARGS); static void avl_sigusr2_handler(SIGNAL_ARGS); static void avl_sigterm_handler(SIGNAL_ARGS); static void autovac_refresh_stats(void); @@ -419,7 +419,7 @@ AutoVacLauncherMain(int argc, char *argv[]) * backend, so we use the same signal handling. See equivalent code in * tcop/postgres.c. */ - pqsignal(SIGHUP, avl_sighup_handler); + pqsignal(SIGHUP, av_sighup_handler); pqsignal(SIGINT, StatementCancelHandler); pqsignal(SIGTERM, avl_sigterm_handler); @@ -1329,7 +1329,7 @@ AutoVacWorkerFailed(void) /* SIGHUP: set flag to re-read config file at next convenient time */ static void -avl_sighup_handler(SIGNAL_ARGS) +av_sighup_handler(SIGNAL_ARGS) { int save_errno = errno; @@ -1460,11 +1460,8 @@ AutoVacWorkerMain(int argc, char *argv[]) * Set up signal handlers. We operate on databases much like a regular * backend, so we use the same signal handling. See equivalent code in * tcop/postgres.c. - * - * Currently, we don't pay attention to postgresql.conf changes that - * happen during a single daemon iteration, so we can ignore SIGHUP. */ - pqsignal(SIGHUP, SIG_IGN); + pqsignal(SIGHUP, av_sighup_handler); /* * SIGINT is used to signal canceling the current table's vacuum; SIGTERM @@ -2164,6 +2161,22 @@ do_autovacuum(void) CHECK_FOR_INTERRUPTS(); /* + * Check for config changes before processing each collected table. + */ + if (got_SIGHUP) + { + got_SIGHUP = false; + ProcessConfigFile(PGC_SIGHUP); + + /* + * You might be tempted to bail out if we see autovacuum is now + * disabled. Must resist that temptation -- this might be a + * for-wraparound emergency worker, in which case that would be + * entirely inappropriate. + */ + } + + /* * hold schedule lock from here until we're sure that this table still * needs vacuuming. We also need the AutovacuumLock to walk the * worker array, but we'll let go of that one quickly. |