1 /*------------------------------------------------------------------------- 2 * 3 * walsender.h 4 * Exports from replication/walsender.c. 5 * 6 * Portions Copyright (c) 2010-2020, PostgreSQL Global Development Group 7 * 8 * src/include/replication/walsender.h 9 * 10 *------------------------------------------------------------------------- 11 */ 12 #ifndef _WALSENDER_H 13 #define _WALSENDER_H 14 15 #include <signal.h> 16 17 /* 18 * What to do with a snapshot in create replication slot command. 19 */ 20 typedef enum 21 { 22 CRS_EXPORT_SNAPSHOT, 23 CRS_NOEXPORT_SNAPSHOT, 24 CRS_USE_SNAPSHOT 25 } CRSSnapshotAction; 26 27 /* global state */ 28 extern bool am_walsender; 29 extern bool am_cascading_walsender; 30 extern bool am_db_walsender; 31 extern bool wake_wal_senders; 32 33 /* user-settable parameters */ 34 extern int max_wal_senders; 35 extern int wal_sender_timeout; 36 extern bool log_replication_commands; 37 38 extern void InitWalSender(void); 39 extern bool exec_replication_command(const char *query_string); 40 extern void WalSndErrorCleanup(void); 41 extern void WalSndResourceCleanup(bool isCommit); 42 extern void WalSndSignals(void); 43 extern Size WalSndShmemSize(void); 44 extern void WalSndShmemInit(void); 45 extern void WalSndWakeup(void); 46 extern void WalSndInitStopping(void); 47 extern void WalSndWaitStopping(void); 48 extern void HandleWalSndInitStopping(void); 49 extern void WalSndRqstFileReload(void); 50 51 /* 52 * Remember that we want to wakeup walsenders later 53 * 54 * This is separated from doing the actual wakeup because the writeout is done 55 * while holding contended locks. 56 */ 57 #define WalSndWakeupRequest() \ 58 do { wake_wal_senders = true; } while (0) 59 60 /* 61 * wakeup walsenders if there is work to be done 62 */ 63 #define WalSndWakeupProcessRequests() \ 64 do \ 65 { \ 66 if (wake_wal_senders) \ 67 { \ 68 wake_wal_senders = false; \ 69 if (max_wal_senders > 0) \ 70 WalSndWakeup(); \ 71 } \ 72 } while (0) 73 74 #endif /* _WALSENDER_H */ 75