123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- /*-------------------------------------------------------------------------
- *
- * walsender_private.h
- * Private definitions from replication/walsender.c.
- *
- * Portions Copyright (c) 2010-2016, PostgreSQL Global Development Group
- *
- * src/include/replication/walsender_private.h
- *
- *-------------------------------------------------------------------------
- */
- #ifndef _WALSENDER_PRIVATE_H
- #define _WALSENDER_PRIVATE_H
- #include "access/xlog.h"
- #include "nodes/nodes.h"
- #include "replication/syncrep.h"
- #include "storage/latch.h"
- #include "storage/shmem.h"
- #include "storage/spin.h"
- typedef enum WalSndState
- {
- WALSNDSTATE_STARTUP = 0,
- WALSNDSTATE_BACKUP,
- WALSNDSTATE_CATCHUP,
- WALSNDSTATE_STREAMING,
- WALSNDSTATE_STOPPING
- } WalSndState;
- /*
- * Each walsender has a WalSnd struct in shared memory.
- */
- typedef struct WalSnd
- {
- pid_t pid; /* this walsender's process id, or 0 */
- WalSndState state; /* this walsender's state */
- XLogRecPtr sentPtr; /* WAL has been sent up to this point */
- bool needreload; /* does currently-open file need to be
- * reloaded? */
- /*
- * The xlog locations that have been written, flushed, and applied by
- * standby-side. These may be invalid if the standby-side has not offered
- * values yet.
- */
- XLogRecPtr write;
- XLogRecPtr flush;
- XLogRecPtr apply;
- /* Protects shared variables shown above. */
- slock_t mutex;
- /*
- * Pointer to the walsender's latch. Used by backends to wake up this
- * walsender when it has work to do. NULL if the walsender isn't active.
- */
- Latch *latch;
- /*
- * The priority order of the standby managed by this WALSender, as listed
- * in synchronous_standby_names, or 0 if not-listed. Protected by
- * SyncRepLock.
- */
- int sync_standby_priority;
- } WalSnd;
- extern WalSnd *MyWalSnd;
- /* There is one WalSndCtl struct for the whole database cluster */
- typedef struct
- {
- /*
- * Synchronous replication queue with one queue per request type.
- * Protected by SyncRepLock.
- */
- SHM_QUEUE SyncRepQueue[NUM_SYNC_REP_WAIT_MODE];
- /*
- * Current location of the head of the queue. All waiters should have a
- * waitLSN that follows this value. Protected by SyncRepLock.
- */
- XLogRecPtr lsn[NUM_SYNC_REP_WAIT_MODE];
- /*
- * Are any sync standbys defined? Waiting backends can't reload the
- * config file safely, so checkpointer updates this value as needed.
- * Protected by SyncRepLock.
- */
- bool sync_standbys_defined;
- WalSnd walsnds[FLEXIBLE_ARRAY_MEMBER];
- } WalSndCtlData;
- extern WalSndCtlData *WalSndCtl;
- extern void WalSndSetState(WalSndState state);
- /*
- * Internal functions for parsing the replication grammar, in repl_gram.y and
- * repl_scanner.l
- */
- extern int replication_yyparse(void);
- extern int replication_yylex(void);
- extern void replication_yyerror(const char *str) pg_attribute_noreturn();
- extern void replication_scanner_init(const char *query_string);
- extern void replication_scanner_finish(void);
- extern Node *replication_parse_result;
- #endif /* _WALSENDER_PRIVATE_H */
|