mirror of
https://github.com/postgres/postgres.git
synced 2025-06-27 23:21:58 +03:00
Use the regular main processing loop also in walsenders.
The regular backend's main loop handles signal handling and error recovery better than the current WAL sender command loop does. For example, if the client hangs and a SIGTERM is received before starting streaming, the walsender will now terminate immediately, rather than hang until the connection times out.
This commit is contained in:
@ -22,6 +22,7 @@
|
||||
#include "lib/stringinfo.h"
|
||||
#include "libpq/libpq.h"
|
||||
#include "libpq/pqformat.h"
|
||||
#include "miscadmin.h"
|
||||
#include "nodes/pg_list.h"
|
||||
#include "replication/basebackup.h"
|
||||
#include "replication/walsender.h"
|
||||
@ -30,7 +31,6 @@
|
||||
#include "storage/ipc.h"
|
||||
#include "utils/builtins.h"
|
||||
#include "utils/elog.h"
|
||||
#include "utils/memutils.h"
|
||||
#include "utils/ps_status.h"
|
||||
|
||||
typedef struct
|
||||
@ -370,19 +370,10 @@ void
|
||||
SendBaseBackup(BaseBackupCmd *cmd)
|
||||
{
|
||||
DIR *dir;
|
||||
MemoryContext backup_context;
|
||||
MemoryContext old_context;
|
||||
basebackup_options opt;
|
||||
|
||||
parse_basebackup_options(cmd->options, &opt);
|
||||
|
||||
backup_context = AllocSetContextCreate(CurrentMemoryContext,
|
||||
"Streaming base backup context",
|
||||
ALLOCSET_DEFAULT_MINSIZE,
|
||||
ALLOCSET_DEFAULT_INITSIZE,
|
||||
ALLOCSET_DEFAULT_MAXSIZE);
|
||||
old_context = MemoryContextSwitchTo(backup_context);
|
||||
|
||||
WalSndSetState(WALSNDSTATE_BACKUP);
|
||||
|
||||
if (update_process_title)
|
||||
@ -403,9 +394,6 @@ SendBaseBackup(BaseBackupCmd *cmd)
|
||||
perform_base_backup(&opt, dir);
|
||||
|
||||
FreeDir(dir);
|
||||
|
||||
MemoryContextSwitchTo(old_context);
|
||||
MemoryContextDelete(backup_context);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -606,7 +594,7 @@ sendDir(char *path, int basepathlen, bool sizeonly)
|
||||
* error in that case. The error handler further up will call
|
||||
* do_pg_abort_backup() for us.
|
||||
*/
|
||||
if (walsender_shutdown_requested || walsender_ready_to_stop)
|
||||
if (ProcDiePending || walsender_ready_to_stop)
|
||||
ereport(ERROR,
|
||||
(errmsg("shutdown requested, aborting active base backup")));
|
||||
|
||||
|
Reference in New Issue
Block a user