aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2010-05-11 16:42:33 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2010-05-11 16:42:33 +0000
commitf6f32867affb5d442abca8e3de06806a6396330d (patch)
tree1f9cd389036cc7042ae1c7a994185ee1678c5170 /src
parent871a6086b1919512824f96c2278ed70de546dfc3 (diff)
downloadpostgresql-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.
Diffstat (limited to 'src')
-rw-r--r--src/backend/postmaster/pgarch.c29
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 */