diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2010-05-11 16:42:33 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2010-05-11 16:42:33 +0000 |
commit | f6f32867affb5d442abca8e3de06806a6396330d (patch) | |
tree | 1f9cd389036cc7042ae1c7a994185ee1678c5170 | |
parent | 871a6086b1919512824f96c2278ed70de546dfc3 (diff) | |
download | postgresql-f6f32867affb5d442abca8e3de06806a6396330d.tar.gz postgresql-f6f32867affb5d442abca8e3de06806a6396330d.zip |
Cause the archiver process to adopt new postgresql.conf settings (particularly
archive_command) as soon as possible, namely just before issuing a new call
of archive_command, even when there is a backlog of files to be archived.
The original coding would only absorb new settings after clearing the backlog
and returning to the outer loop. Per discussion.
Back-patch to 8.3. The logic in prior versions is a bit different and it
doesn't seem worth taking any risks of breaking it.
-rw-r--r-- | src/backend/postmaster/pgarch.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/src/backend/postmaster/pgarch.c b/src/backend/postmaster/pgarch.c index 28306729acd..45f90fd058c 100644 --- a/src/backend/postmaster/pgarch.c +++ b/src/backend/postmaster/pgarch.c @@ -19,7 +19,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/postmaster/pgarch.c,v 1.40 2009/06/11 14:49:01 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/postmaster/pgarch.c,v 1.40.2.1 2010/05/11 16:42:33 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -410,14 +410,6 @@ pgarch_ArchiverCopyLoop(void) { char xlog[MAX_XFN_CHARS + 1]; - if (!XLogArchiveCommandSet()) - { - ereport(WARNING, - (errmsg("archive_mode enabled, yet archive_command is not set"))); - /* can't do anything if no command ... */ - return; - } - /* * loop through all xlogs with archive_status of .ready and archive * them...mostly we expect this to be a single file, though it is possible @@ -440,6 +432,25 @@ pgarch_ArchiverCopyLoop(void) if (got_SIGTERM || !PostmasterIsAlive(true)) return; + /* + * Check for config update. This is so that we'll adopt a new + * setting for archive_command as soon as possible, even if there + * is a backlog of files to be archived. + */ + if (got_SIGHUP) + { + got_SIGHUP = false; + ProcessConfigFile(PGC_SIGHUP); + } + + /* can't do anything if no command ... */ + if (!XLogArchiveCommandSet()) + { + ereport(WARNING, + (errmsg("archive_mode enabled, yet archive_command is not set"))); + return; + } + if (pgarch_archiveXlog(xlog)) { /* successful */ |