mirror of
https://github.com/postgres/postgres.git
synced 2025-09-02 04:21:28 +03:00
Improve replication connection timeouts.
Rename replication_timeout to wal_sender_timeout, and add a new setting called wal_receiver_timeout that does the same at the walreceiver side. There was previously no timeout in walreceiver, so if the network went down, for example, the walreceiver could take a long time to notice that the connection was lost. Now with the two settings, both sides of a replication connection will detect a broken connection similarly. It is no longer necessary to manually set wal_receiver_status_interval to a value smaller than the timeout. Both wal sender and receiver now automatically send a "ping" message if more than 1/2 of the configured timeout has elapsed, and it hasn't received any messages from the other end. Amit Kapila, heavily edited by me.
This commit is contained in:
@@ -27,6 +27,12 @@ typedef struct
|
||||
|
||||
/* Sender's system clock at the time of transmission */
|
||||
TimestampTz sendTime;
|
||||
|
||||
/*
|
||||
* If replyRequested is set, the client should reply immediately to this
|
||||
* message, to avoid a timeout disconnect.
|
||||
*/
|
||||
bool replyRequested;
|
||||
} WalSndrMessage;
|
||||
|
||||
|
||||
@@ -80,6 +86,12 @@ typedef struct
|
||||
|
||||
/* Sender's system clock at the time of transmission */
|
||||
TimestampTz sendTime;
|
||||
|
||||
/*
|
||||
* If replyRequested is set, the server should reply immediately to this
|
||||
* message, to avoid a timeout disconnect.
|
||||
*/
|
||||
bool replyRequested;
|
||||
} StandbyReplyMessage;
|
||||
|
||||
/*
|
||||
|
@@ -17,7 +17,9 @@
|
||||
#include "storage/spin.h"
|
||||
#include "pgtime.h"
|
||||
|
||||
/* user-settable parameters */
|
||||
extern int wal_receiver_status_interval;
|
||||
extern int wal_receiver_timeout;
|
||||
extern bool hot_standby_feedback;
|
||||
|
||||
/*
|
||||
|
@@ -24,7 +24,7 @@ extern bool wake_wal_senders;
|
||||
|
||||
/* user-settable parameters */
|
||||
extern int max_wal_senders;
|
||||
extern int replication_timeout;
|
||||
extern int wal_sender_timeout;
|
||||
|
||||
extern void InitWalSender(void);
|
||||
extern void exec_replication_command(const char *query_string);
|
||||
|
@@ -37,7 +37,6 @@ typedef struct WalSnd
|
||||
XLogRecPtr sentPtr; /* WAL has been sent up to this point */
|
||||
bool needreload; /* does currently-open file need to be
|
||||
* reloaded? */
|
||||
bool sendKeepalive; /* do we send keepalives on this connection? */
|
||||
|
||||
/*
|
||||
* The xlog locations that have been written, flushed, and applied by
|
||||
|
Reference in New Issue
Block a user