Line data Source code
1 : /*------------------------------------------------------------------------- 2 : * 3 : * walsender.h 4 : * Exports from replication/walsender.c. 5 : * 6 : * Portions Copyright (c) 2010-2025, 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 "access/xlogdefs.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 PGDLLIMPORT bool am_walsender; 29 : extern PGDLLIMPORT bool am_cascading_walsender; 30 : extern PGDLLIMPORT bool am_db_walsender; 31 : extern PGDLLIMPORT bool wake_wal_senders; 32 : 33 : /* user-settable parameters */ 34 : extern PGDLLIMPORT int max_wal_senders; 35 : extern PGDLLIMPORT int wal_sender_timeout; 36 : extern PGDLLIMPORT bool log_replication_commands; 37 : 38 : extern void InitWalSender(void); 39 : extern bool exec_replication_command(const char *cmd_string); 40 : extern void WalSndErrorCleanup(void); 41 : extern void PhysicalWakeupLogicalWalSnd(void); 42 : extern XLogRecPtr GetStandbyFlushRecPtr(TimeLineID *tli); 43 : extern void WalSndSignals(void); 44 : extern Size WalSndShmemSize(void); 45 : extern void WalSndShmemInit(void); 46 : extern void WalSndWakeup(bool physical, bool logical); 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 : static inline void 65 260824 : WalSndWakeupProcessRequests(bool physical, bool logical) 66 : { 67 260824 : if (wake_wal_senders) 68 : { 69 241124 : wake_wal_senders = false; 70 241124 : if (max_wal_senders > 0) 71 187268 : WalSndWakeup(physical, logical); 72 : } 73 260824 : } 74 : 75 : #endif /* _WALSENDER_H */