mirror of
https://github.com/postgres/postgres.git
synced 2025-08-28 18:48:04 +03:00
More synchronous replication tweaks.
SyncRepRequested() must check not only the value of the synchronous_replication GUC but also whether max_wal_senders > 0. Otherwise, we might end up waiting for sync rep even when there's no possibility of a standby ever managing to connect. There are some existing cross-checks to prevent this, but they're not quite sufficient: the user can start the server with max_wal_senders=0, synchronous_standby_names='', and synchronous_replication=off and then subsequent make synchronous_standby_names not empty using pg_ctl reload, and then SET synchronous_standby=on, leading to an indefinite hang. Along the way, rename the global variable for the synchronous_replication GUC to match the name of the GUC itself, for clarity. Report by Fujii Masao, though I didn't use his patch.
This commit is contained in:
@@ -19,7 +19,8 @@
|
||||
#include "storage/spin.h"
|
||||
#include "utils/guc.h"
|
||||
|
||||
#define SyncRepRequested() (sync_rep_mode)
|
||||
#define SyncRepRequested() \
|
||||
(synchronous_replication && max_wal_senders > 0)
|
||||
|
||||
/* syncRepState */
|
||||
#define SYNC_REP_NOT_WAITING 0
|
||||
@@ -28,7 +29,7 @@
|
||||
#define SYNC_REP_MUST_DISCONNECT 3
|
||||
|
||||
/* user-settable parameters for synchronous replication */
|
||||
extern bool sync_rep_mode;
|
||||
extern bool synchronous_replication;
|
||||
extern char *SyncRepStandbyNames;
|
||||
|
||||
/* called by user backend */
|
||||
|
Reference in New Issue
Block a user