mirror of https://github.com/postgres/postgres
This moves the functions related to performing WAL recovery into the new xlogrecovery.c source file, leaving xlog.c responsible for maintaining the WAL buffers, coordinating the startup and switch from recovery to normal operations, and other miscellaneous stuff that have always been in xlog.c. Reviewed-by: Andres Freund, Kyotaro Horiguchi, Robert Haas Discussion: https://www.postgresql.org/message-id/a31f27b4-a31d-f976-6217-2b03be646ffa%40iki.fipull/77/head
parent
be1c00ab13
commit
70e81861fa
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,157 @@ |
|||||||
|
/*
|
||||||
|
* xlogrecovery.h |
||||||
|
* |
||||||
|
* Functions for WAL recovery and standby mode |
||||||
|
* |
||||||
|
* Portions Copyright (c) 1996-2022, PostgreSQL Global Development Group |
||||||
|
* Portions Copyright (c) 1994, Regents of the University of California |
||||||
|
* |
||||||
|
* src/include/access/xlogrecovery.h |
||||||
|
*/ |
||||||
|
#ifndef XLOGRECOVERY_H |
||||||
|
#define XLOGRECOVERY_H |
||||||
|
|
||||||
|
#include "access/xlogreader.h" |
||||||
|
#include "catalog/pg_control.h" |
||||||
|
#include "lib/stringinfo.h" |
||||||
|
#include "utils/timestamp.h" |
||||||
|
|
||||||
|
/*
|
||||||
|
* Recovery target type. |
||||||
|
* Only set during a Point in Time recovery, not when in standby mode. |
||||||
|
*/ |
||||||
|
typedef enum |
||||||
|
{ |
||||||
|
RECOVERY_TARGET_UNSET, |
||||||
|
RECOVERY_TARGET_XID, |
||||||
|
RECOVERY_TARGET_TIME, |
||||||
|
RECOVERY_TARGET_NAME, |
||||||
|
RECOVERY_TARGET_LSN, |
||||||
|
RECOVERY_TARGET_IMMEDIATE |
||||||
|
} RecoveryTargetType; |
||||||
|
|
||||||
|
/*
|
||||||
|
* Recovery target TimeLine goal |
||||||
|
*/ |
||||||
|
typedef enum |
||||||
|
{ |
||||||
|
RECOVERY_TARGET_TIMELINE_CONTROLFILE, |
||||||
|
RECOVERY_TARGET_TIMELINE_LATEST, |
||||||
|
RECOVERY_TARGET_TIMELINE_NUMERIC |
||||||
|
} RecoveryTargetTimeLineGoal; |
||||||
|
|
||||||
|
/* Recovery pause states */ |
||||||
|
typedef enum RecoveryPauseState |
||||||
|
{ |
||||||
|
RECOVERY_NOT_PAUSED, /* pause not requested */ |
||||||
|
RECOVERY_PAUSE_REQUESTED, /* pause requested, but not yet paused */ |
||||||
|
RECOVERY_PAUSED /* recovery is paused */ |
||||||
|
} RecoveryPauseState; |
||||||
|
|
||||||
|
/* User-settable GUC parameters */ |
||||||
|
extern bool recoveryTargetInclusive; |
||||||
|
extern int recoveryTargetAction; |
||||||
|
extern int recovery_min_apply_delay; |
||||||
|
extern char *PrimaryConnInfo; |
||||||
|
extern char *PrimarySlotName; |
||||||
|
extern char *recoveryRestoreCommand; |
||||||
|
extern char *recoveryEndCommand; |
||||||
|
extern char *archiveCleanupCommand; |
||||||
|
|
||||||
|
/* indirectly set via GUC system */ |
||||||
|
extern TransactionId recoveryTargetXid; |
||||||
|
extern char *recovery_target_time_string; |
||||||
|
extern TimestampTz recoveryTargetTime; |
||||||
|
extern const char *recoveryTargetName; |
||||||
|
extern XLogRecPtr recoveryTargetLSN; |
||||||
|
extern RecoveryTargetType recoveryTarget; |
||||||
|
extern char *PromoteTriggerFile; |
||||||
|
extern bool wal_receiver_create_temp_slot; |
||||||
|
extern RecoveryTargetTimeLineGoal recoveryTargetTimeLineGoal; |
||||||
|
extern TimeLineID recoveryTargetTLIRequested; |
||||||
|
extern TimeLineID recoveryTargetTLI; |
||||||
|
|
||||||
|
/* Have we already reached a consistent database state? */ |
||||||
|
extern bool reachedConsistency; |
||||||
|
|
||||||
|
/* Are we currently in standby mode? */ |
||||||
|
extern bool StandbyMode; |
||||||
|
|
||||||
|
extern Size XLogRecoveryShmemSize(void); |
||||||
|
extern void XLogRecoveryShmemInit(void); |
||||||
|
|
||||||
|
extern void InitWalRecovery(ControlFileData *ControlFile, bool *wasShutdownPtr, bool *haveBackupLabel, bool *haveTblspcMap); |
||||||
|
extern void PerformWalRecovery(void); |
||||||
|
|
||||||
|
/*
|
||||||
|
* FinishWalRecovery() returns this. It contains information about the point |
||||||
|
* where recovery ended, and why it ended. |
||||||
|
*/ |
||||||
|
typedef struct |
||||||
|
{ |
||||||
|
/*
|
||||||
|
* Information about the last valid or applied record, after which new WAL |
||||||
|
* can be appended. 'lastRec' is the position where the last record |
||||||
|
* starts, and 'endOfLog' is its end. 'lastPage' is a copy of the last |
||||||
|
* partial page that contains endOfLog (or NULL if endOfLog is exactly at |
||||||
|
* page boundary). 'lastPageBeginPtr' is the position where the last page |
||||||
|
* begins. |
||||||
|
* |
||||||
|
* endOfLogTLI is the TLI in the filename of the XLOG segment containing |
||||||
|
* the last applied record. It could be different from lastRecTLI, if |
||||||
|
* there was a timeline switch in that segment, and we were reading the |
||||||
|
* old WAL from a segment belonging to a higher timeline. |
||||||
|
*/ |
||||||
|
XLogRecPtr lastRec; /* start of last valid or applied record */ |
||||||
|
TimeLineID lastRecTLI; |
||||||
|
XLogRecPtr endOfLog; /* end of last valid or applied record */ |
||||||
|
TimeLineID endOfLogTLI; |
||||||
|
|
||||||
|
XLogRecPtr lastPageBeginPtr; /* LSN of page that contains endOfLog */ |
||||||
|
char *lastPage; /* copy of the last page, up to endOfLog */ |
||||||
|
|
||||||
|
/*
|
||||||
|
* abortedRecPtr is the start pointer of a broken record at end of WAL |
||||||
|
* when recovery completes; missingContrecPtr is the location of the first |
||||||
|
* contrecord that went missing. See CreateOverwriteContrecordRecord for |
||||||
|
* details. |
||||||
|
*/ |
||||||
|
XLogRecPtr abortedRecPtr; |
||||||
|
XLogRecPtr missingContrecPtr; |
||||||
|
|
||||||
|
/* short human-readable string describing why recovery ended */ |
||||||
|
char *recoveryStopReason; |
||||||
|
|
||||||
|
/*
|
||||||
|
* If standby or recovery signal file was found, these flags are set |
||||||
|
* accordingly. |
||||||
|
*/ |
||||||
|
bool standby_signal_file_found; |
||||||
|
bool recovery_signal_file_found; |
||||||
|
} EndOfWalRecoveryInfo; |
||||||
|
|
||||||
|
extern EndOfWalRecoveryInfo *FinishWalRecovery(void); |
||||||
|
extern void ShutdownWalRecovery(void); |
||||||
|
extern void RemovePromoteSignalFiles(void); |
||||||
|
|
||||||
|
extern bool HotStandbyActive(void); |
||||||
|
extern XLogRecPtr GetXLogReplayRecPtr(TimeLineID *replayTLI); |
||||||
|
extern RecoveryPauseState GetRecoveryPauseState(void); |
||||||
|
extern void SetRecoveryPause(bool recoveryPause); |
||||||
|
extern void GetXLogReceiptTime(TimestampTz *rtime, bool *fromStream); |
||||||
|
extern TimestampTz GetLatestXTime(void); |
||||||
|
extern TimestampTz GetCurrentChunkReplayStartTime(void); |
||||||
|
extern XLogRecPtr GetCurrentReplayRecPtr(TimeLineID *replayEndTLI); |
||||||
|
|
||||||
|
extern bool PromoteIsTriggered(void); |
||||||
|
extern bool CheckPromoteSignal(void); |
||||||
|
extern void WakeupRecovery(void); |
||||||
|
|
||||||
|
extern void StartupRequestWalReceiverRestart(void); |
||||||
|
extern void XLogRequestWalReceiverReply(void); |
||||||
|
|
||||||
|
extern void RecoveryRequiresIntParameter(const char *param_name, int currValue, int minValue); |
||||||
|
|
||||||
|
extern void xlog_outdesc(StringInfo buf, XLogReaderState *record); |
||||||
|
|
||||||
|
#endif /* XLOGRECOVERY_H */ |
Loading…
Reference in new issue