mirror of
https://github.com/postgres/postgres.git
synced 2025-10-24 01:29:19 +03:00
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.
This commit is contained in:
@@ -60,7 +60,9 @@ typedef enum
|
||||
SYNCHRONOUS_COMMIT_LOCAL_FLUSH, /* wait for local flush only */
|
||||
SYNCHRONOUS_COMMIT_REMOTE_WRITE, /* wait for local flush and remote
|
||||
* write */
|
||||
SYNCHRONOUS_COMMIT_REMOTE_FLUSH /* wait for local and remote flush */
|
||||
SYNCHRONOUS_COMMIT_REMOTE_FLUSH, /* wait for local and remote flush */
|
||||
SYNCHRONOUS_COMMIT_REMOTE_APPLY /* wait for local flush and remote
|
||||
* apply */
|
||||
} SyncCommitLevel;
|
||||
|
||||
/* Define the default setting for synchonous_commit */
|
||||
@@ -144,10 +146,13 @@ typedef void (*SubXactCallback) (SubXactEvent event, SubTransactionId mySubid,
|
||||
* EOXact... routines which run at the end of the original transaction
|
||||
* completion.
|
||||
*/
|
||||
#define XACT_COMPLETION_APPLY_FEEDBACK (1U << 29)
|
||||
#define XACT_COMPLETION_UPDATE_RELCACHE_FILE (1U << 30)
|
||||
#define XACT_COMPLETION_FORCE_SYNC_COMMIT (1U << 31)
|
||||
|
||||
/* Access macros for above flags */
|
||||
#define XactCompletionApplyFeedback(xinfo) \
|
||||
((xinfo & XACT_COMPLETION_APPLY_FEEDBACK) != 0)
|
||||
#define XactCompletionRelcacheInitFileInval(xinfo) \
|
||||
((xinfo & XACT_COMPLETION_UPDATE_RELCACHE_FILE) != 0)
|
||||
#define XactCompletionForceSyncCommit(xinfo) \
|
||||
|
||||
Reference in New Issue
Block a user