|
|
|
@ -102,6 +102,7 @@ static bool pgarch_archiveXlog(char *xlog); |
|
|
|
|
static bool pgarch_readyXlog(char *xlog); |
|
|
|
|
static void pgarch_archiveDone(char *xlog); |
|
|
|
|
static void pgarch_die(int code, Datum arg); |
|
|
|
|
static void HandlePgArchInterrupts(void); |
|
|
|
|
|
|
|
|
|
/* Report shared memory space needed by PgArchShmemInit */ |
|
|
|
|
Size |
|
|
|
@ -257,12 +258,8 @@ pgarch_MainLoop(void) |
|
|
|
|
/* When we get SIGUSR2, we do one more archive cycle, then exit */ |
|
|
|
|
time_to_stop = ready_to_stop; |
|
|
|
|
|
|
|
|
|
/* Check for config update */ |
|
|
|
|
if (ConfigReloadPending) |
|
|
|
|
{ |
|
|
|
|
ConfigReloadPending = false; |
|
|
|
|
ProcessConfigFile(PGC_SIGHUP); |
|
|
|
|
} |
|
|
|
|
/* Check for barrier events and config update */ |
|
|
|
|
HandlePgArchInterrupts(); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* If we've gotten SIGTERM, we normally just sit and do nothing until |
|
|
|
@ -355,15 +352,11 @@ pgarch_ArchiverCopyLoop(void) |
|
|
|
|
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. |
|
|
|
|
* Check for barrier events and 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 (ConfigReloadPending) |
|
|
|
|
{ |
|
|
|
|
ConfigReloadPending = false; |
|
|
|
|
ProcessConfigFile(PGC_SIGHUP); |
|
|
|
|
} |
|
|
|
|
HandlePgArchInterrupts(); |
|
|
|
|
|
|
|
|
|
/* can't do anything if no command ... */ |
|
|
|
|
if (!XLogArchiveCommandSet()) |
|
|
|
@ -703,3 +696,23 @@ pgarch_die(int code, Datum arg) |
|
|
|
|
{ |
|
|
|
|
PgArch->pgprocno = INVALID_PGPROCNO; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Interrupt handler for WAL archiver process. |
|
|
|
|
* |
|
|
|
|
* This is called in the loops pgarch_MainLoop and pgarch_ArchiverCopyLoop. |
|
|
|
|
* It checks for barrier events and config update, but not shutdown request |
|
|
|
|
* because how to handle shutdown request is different between those loops. |
|
|
|
|
*/ |
|
|
|
|
static void |
|
|
|
|
HandlePgArchInterrupts(void) |
|
|
|
|
{ |
|
|
|
|
if (ProcSignalBarrierPending) |
|
|
|
|
ProcessProcSignalBarrier(); |
|
|
|
|
|
|
|
|
|
if (ConfigReloadPending) |
|
|
|
|
{ |
|
|
|
|
ConfigReloadPending = false; |
|
|
|
|
ProcessConfigFile(PGC_SIGHUP); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|