mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-24 18:55:04 +08: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:
parent
e397d2ee64
commit
b8bb8dbf20
@ -62,7 +62,7 @@
|
||||
#include "utils/ps_status.h"
|
||||
|
||||
/* User-settable parameters for sync rep */
|
||||
bool sync_rep_mode = false; /* Only set in user backends */
|
||||
bool synchronous_replication = false; /* Only set in user backends */
|
||||
char *SyncRepStandbyNames;
|
||||
|
||||
static bool sync_standbys_defined = false; /* Is there at least one name? */
|
||||
|
@ -759,7 +759,7 @@ static struct config_bool ConfigureNamesBool[] =
|
||||
gettext_noop("Requests synchronous replication."),
|
||||
NULL
|
||||
},
|
||||
&sync_rep_mode,
|
||||
&synchronous_replication,
|
||||
false, NULL, NULL
|
||||
},
|
||||
{
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user