diff options
author | Robert Haas <rhaas@postgresql.org> | 2016-03-29 21:16:12 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2016-03-29 21:29:49 -0400 |
commit | 314cbfc5da988eff8998655158f84c9815ecfbcd (patch) | |
tree | 94415b7fed00b4a70f337e403c1d5fe7e811ec70 /src/include/replication/walreceiver.h | |
parent | a898b409f66f956e99694710f537829db02652c0 (diff) | |
download | postgresql-314cbfc5da988eff8998655158f84c9815ecfbcd.tar.gz postgresql-314cbfc5da988eff8998655158f84c9815ecfbcd.zip |
Add new replication mode synchronous_commit = 'remote_apply'.
In this mode, the master waits for the transaction to be applied on
the remote side, not just written to disk. That means that you can
count on a transaction started on the standby to see all commits
previously acknowledged by the master.
To make this work, the standby sends a reply after replaying each
commit record generated with synchronous_commit >= 'remote_apply'.
This introduces a small inefficiency: the extra replies will be sent
even by standbys that aren't the current synchronous standby. But
previously-existing synchronous_commit levels make no attempt at all
to optimize which replies are sent based on what the primary cares
about, so this is no worse, and at least avoids any extra replies for
people not using the feature at all.
Thomas Munro, reviewed by Michael Paquier and by me. Some additional
tweaks by me.
Diffstat (limited to 'src/include/replication/walreceiver.h')
-rw-r--r-- | src/include/replication/walreceiver.h | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/include/replication/walreceiver.h b/src/include/replication/walreceiver.h index 6eacb095d1b..36bcb471720 100644 --- a/src/include/replication/walreceiver.h +++ b/src/include/replication/walreceiver.h @@ -113,9 +113,16 @@ typedef struct slock_t mutex; /* locks shared variables shown above */ /* + * force walreceiver reply? This doesn't need to be locked; memory + * barriers for ordering are sufficient. + */ + bool force_reply; + + /* * Latch used by startup process to wake up walreceiver after telling it * where to start streaming (after setting receiveStart and - * receiveStartTLI). + * receiveStartTLI), and also to tell it to send apply feedback to the + * primary whenever specially marked commit records are applied. */ Latch latch; } WalRcvData; @@ -138,7 +145,7 @@ extern PGDLLIMPORT walrcv_startstreaming_type walrcv_startstreaming; typedef void (*walrcv_endstreaming_type) (TimeLineID *next_tli); extern PGDLLIMPORT walrcv_endstreaming_type walrcv_endstreaming; -typedef int (*walrcv_receive_type) (int timeout, char **buffer); +typedef int (*walrcv_receive_type) (char **buffer, int *wait_fd); extern PGDLLIMPORT walrcv_receive_type walrcv_receive; typedef void (*walrcv_send_type) (const char *buffer, int nbytes); @@ -162,5 +169,6 @@ extern void RequestXLogStreaming(TimeLineID tli, XLogRecPtr recptr, extern XLogRecPtr GetWalRcvWriteRecPtr(XLogRecPtr *latestChunkStart, TimeLineID *receiveTLI); extern int GetReplicationApplyDelay(void); extern int GetReplicationTransferLatency(void); +extern void WalRcvForceReply(void); #endif /* _WALRECEIVER_H */ |