1 /*-------------------------------------------------------------------------
4 * Exports from replication/syncrep.c.
6 * Portions Copyright (c) 2010-2017, PostgreSQL Global Development Group
9 * src/include/replication/syncrep.h
11 *-------------------------------------------------------------------------
16 #include "access/xlogdefs.h"
17 #include "utils/guc.h"
19 #define SyncRepRequested() \
20 (max_wal_senders > 0 && synchronous_commit > SYNCHRONOUS_COMMIT_LOCAL_FLUSH)
23 #define SYNC_REP_NO_WAIT (-1)
24 #define SYNC_REP_WAIT_WRITE 0
25 #define SYNC_REP_WAIT_FLUSH 1
26 #define SYNC_REP_WAIT_APPLY 2
28 #define NUM_SYNC_REP_WAIT_MODE 3
31 #define SYNC_REP_NOT_WAITING 0
32 #define SYNC_REP_WAITING 1
33 #define SYNC_REP_WAIT_COMPLETE 2
35 /* syncrep_method of SyncRepConfigData */
36 #define SYNC_REP_PRIORITY 0
37 #define SYNC_REP_QUORUM 1
40 * Struct for the configuration of synchronous replication.
42 * Note: this must be a flat representation that can be held in a single
43 * chunk of malloc'd memory, so that it can be stored as the "extra" data
44 * for the synchronous_standby_names GUC.
46 typedef struct SyncRepConfigData
48 int config_size; /* total size of this struct, in bytes */
49 int num_sync; /* number of sync standbys that we need to
51 uint8 syncrep_method; /* method to choose sync standbys */
52 int nmembers; /* number of members in the following list */
53 /* member_names contains nmembers consecutive nul-terminated C strings */
54 char member_names[FLEXIBLE_ARRAY_MEMBER];
57 extern SyncRepConfigData *SyncRepConfig;
59 /* communication variables for parsing synchronous_standby_names GUC */
60 extern SyncRepConfigData *syncrep_parse_result;
61 extern char *syncrep_parse_error_msg;
63 /* user-settable parameters for synchronous replication */
64 extern char *SyncRepStandbyNames;
66 /* called by user backend */
67 extern void SyncRepWaitForLSN(XLogRecPtr lsn, bool commit);
69 /* called at backend exit */
70 extern void SyncRepCleanupAtProcExit(void);
72 /* called by wal sender */
73 extern void SyncRepInitConfig(void);
74 extern void SyncRepReleaseWaiters(void);
76 /* called by wal sender and user backend */
77 extern List *SyncRepGetSyncStandbys(bool *am_sync);
79 /* called by checkpointer */
80 extern void SyncRepUpdateSyncStandbysDefined(void);
82 /* GUC infrastructure */
83 extern bool check_synchronous_standby_names(char **newval, void **extra, GucSource source);
84 extern void assign_synchronous_standby_names(const char *newval, void *extra);
85 extern void assign_synchronous_commit(int newval, void *extra);
88 * Internal functions for parsing synchronous_standby_names grammar,
89 * in syncrep_gram.y and syncrep_scanner.l
91 extern int syncrep_yyparse(void);
92 extern int syncrep_yylex(void);
93 extern void syncrep_yyerror(const char *str);
94 extern void syncrep_scanner_init(const char *query_string);
95 extern void syncrep_scanner_finish(void);
97 #endif /* _SYNCREP_H */