90 lines
3.7 KiB
C
90 lines
3.7 KiB
C
/*
|
|
* xlogutils.h
|
|
*
|
|
* Utilities for replaying WAL records.
|
|
*
|
|
* openGauss transaction log manager utility routines
|
|
*
|
|
* Portions Copyright (c) 2020 Huawei Technologies Co.,Ltd.
|
|
* Portions Copyright (c) 1996-2012, PostgreSQL Global Development Group
|
|
* Portions Copyright (c) 1994, Regents of the University of California
|
|
*
|
|
* src/include/access/xlogutils.h
|
|
*/
|
|
#ifndef XLOG_UTILS_H
|
|
#define XLOG_UTILS_H
|
|
|
|
#include "access/xlogreader.h"
|
|
#include "storage/buf/bufmgr.h"
|
|
#include "postmaster/pagerepair.h"
|
|
|
|
/* Result codes for XLogReadBufferForRedo[Extended] */
|
|
typedef enum {
|
|
BLK_NEEDS_REDO, /* changes from WAL record need to be applied */
|
|
NO_BLK, /* ddl no need get block */
|
|
BLK_DONE, /* block is already up-to-date */
|
|
BLK_RESTORED, /* block was restored from a full-page image */
|
|
BLK_NOTFOUND /* block was not found (and hence does not need to be
|
|
* replayed) */
|
|
} XLogRedoAction;
|
|
|
|
typedef enum {
|
|
NOT_PRESENT,
|
|
NOT_INITIALIZED,
|
|
LSN_CHECK_ERROR,
|
|
CRC_CHECK_ERROR,
|
|
SEGPAGE_LSN_CHECK_ERROR,
|
|
}InvalidPageType;
|
|
|
|
extern bool XLogHaveInvalidPages(void);
|
|
extern void* XLogGetInvalidPages();
|
|
|
|
extern void XLogCheckInvalidPages(void);
|
|
|
|
extern void XLogDropRelation(const RelFileNode& rnode, ForkNumber forknum);
|
|
extern void XlogDropRowReation(RelFileNode rnode);
|
|
extern void XLogDropDatabase(Oid dbid);
|
|
extern void XLogTruncateRelation(RelFileNode rnode, ForkNumber forkNum, BlockNumber nblocks);
|
|
extern void XLogTruncateSegmentSpace(RelFileNode rnode, ForkNumber forkNum, BlockNumber nblocks);
|
|
extern void XLogDropSegmentSpace(Oid spcNode, Oid dbNode);
|
|
|
|
extern Buffer XLogReadBufferExtended(const RelFileNode& rnode, ForkNumber forknum, BlockNumber blkno,
|
|
ReadBufferMode mode, const XLogPhyBlock *pblk, bool tde = false);
|
|
|
|
extern Buffer XLogReadBufferExtendedForHeapDisk(const RelFileNode &rnode, ForkNumber forknum, BlockNumber blkno,
|
|
ReadBufferMode mode, const XLogPhyBlock *pblk, bool tde = false);
|
|
extern Buffer XLogReadBufferExtendedForSegpage(const RelFileNode& rnode, ForkNumber forknum, BlockNumber blkno, ReadBufferMode mode);
|
|
|
|
extern XLogRedoAction XLogReadBufferForRedo(XLogReaderState* record, uint8 buffer_id, Buffer* buf);
|
|
extern Relation CreateFakeRelcacheEntry(const RelFileNode& rnode);
|
|
extern Relation CreateCUReplicationRelation(const RelFileNode& rnode, int BackendId, char relpersistence, const char* relname);
|
|
extern void FreeFakeRelcacheEntry(Relation fakerel);
|
|
extern void log_invalid_page(const RelFileNode &node, ForkNumber forkno, BlockNumber blkno, InvalidPageType type,
|
|
const XLogPhyBlock *pblk);
|
|
extern int read_local_xlog_page(XLogReaderState* state, XLogRecPtr targetPagePtr, int reqLen, XLogRecPtr targetRecPtr,
|
|
char* cur_page, TimeLineID* pageTLI, char* xlog_path = NULL);
|
|
extern void closeXLogRead();
|
|
extern bool IsDataBaseDrop(XLogReaderState* record);
|
|
extern bool IsTableSpaceDrop(XLogReaderState* record);
|
|
extern bool IsTableSpaceCreate(XLogReaderState* record);
|
|
extern bool IsBarrierRelated(XLogReaderState *record);
|
|
extern bool IsDataBaseCreate(XLogReaderState* record);
|
|
extern bool IsSegPageShrink(XLogReaderState *record);
|
|
extern bool IsSegPageDropSpace(XLogReaderState *record);
|
|
|
|
extern Buffer XLogReadBufferExtendedWithoutBuffer(
|
|
RelFileNode rnode, ForkNumber forknum, BlockNumber blkno, ReadBufferMode mode);
|
|
|
|
extern Buffer XLogReadBufferExtendedWithLocalBuffer(
|
|
RelFileNode rnode, ForkNumber forknum, BlockNumber blkno, ReadBufferMode mode);
|
|
|
|
extern void XlogUpdateFullPageWriteLsn(Page page, XLogRecPtr lsn);
|
|
void XLogSynAllBuffer();
|
|
bool ParseStateUseShareBuf();
|
|
bool ParseStateUseLocalBuf();
|
|
bool ParseStateWithoutCache();
|
|
|
|
extern void forget_specified_invalid_pages(RepairBlockKey key);
|
|
extern void forget_range_invalid_pages(void *pageinfo);
|
|
#endif
|