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