From 5286105800c7d5902f98f32e11b209c471c0c69c Mon Sep 17 00:00:00 2001 From: Simon Riggs Date: Tue, 19 Jul 2011 03:40:03 +0100 Subject: Cascading replication feature for streaming log-based replication. Standby servers can now have WALSender processes, which can work with either WALReceiver or archive_commands to pass data. Fully updated docs, including new conceptual terms of sending server, upstream and downstream servers. WALSenders terminated when promote to master. Fujii Masao, review, rework and doc rewrite by Simon Riggs --- src/include/access/xlog.h | 6 +++++- src/include/replication/walsender.h | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) (limited to 'src/include') diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index 7056fd6189..cdbf63fa76 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -221,6 +221,9 @@ extern int wal_level; /* Do we need to WAL-log information required only for Hot Standby? */ #define XLogStandbyInfoActive() (wal_level >= WAL_LEVEL_HOT_STANDBY) +/* Can we allow the standby to accept replication connection from another standby? */ +#define AllowCascadeReplication() (EnableHotStandby && max_wal_senders > 0) + #ifdef WAL_DEBUG extern bool XLOG_DEBUG; #endif @@ -292,7 +295,8 @@ extern bool RecoveryInProgress(void); extern bool HotStandbyActive(void); extern bool XLogInsertAllowed(void); extern void GetXLogReceiptTime(TimestampTz *rtime, bool *fromStream); -extern XLogRecPtr GetXLogReplayRecPtr(void); +extern XLogRecPtr GetXLogReplayRecPtr(XLogRecPtr *restoreLastRecPtr); +extern XLogRecPtr GetStandbyFlushRecPtr(void); extern void UpdateControlFile(void); extern uint64 GetSystemIdentifier(void); diff --git a/src/include/replication/walsender.h b/src/include/replication/walsender.h index 6ee8668d0a..cb8e70ef38 100644 --- a/src/include/replication/walsender.h +++ b/src/include/replication/walsender.h @@ -35,6 +35,7 @@ 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 @@ -92,6 +93,7 @@ extern WalSndCtlData *WalSndCtl; /* global state */ extern bool am_walsender; +extern bool am_cascading_walsender; extern volatile sig_atomic_t walsender_shutdown_requested; extern volatile sig_atomic_t walsender_ready_to_stop; @@ -106,7 +108,8 @@ extern Size WalSndShmemSize(void); extern void WalSndShmemInit(void); extern void WalSndWakeup(void); extern void WalSndSetState(WalSndState state); -extern void XLogRead(char *buf, XLogRecPtr recptr, Size nbytes); +extern void XLogRead(char *buf, XLogRecPtr startptr, Size count); +extern void WalSndRqstFileReload(void); extern Datum pg_stat_get_wal_senders(PG_FUNCTION_ARGS); -- cgit v1.2.3