1/*
2 * xlogutils.h
3 *
4 * Utilities for replaying WAL records.
5 *
6 * Portions Copyright (c) 1996-2019, PostgreSQL Global Development Group
7 * Portions Copyright (c) 1994, Regents of the University of California
8 *
9 * src/include/access/xlogutils.h
10 */
11#ifndef XLOG_UTILS_H
12#define XLOG_UTILS_H
13
14#include "access/xlogreader.h"
15#include "storage/bufmgr.h"
16
17
18extern bool XLogHaveInvalidPages(void);
19extern void XLogCheckInvalidPages(void);
20
21extern void XLogDropRelation(RelFileNode rnode, ForkNumber forknum);
22extern void XLogDropDatabase(Oid dbid);
23extern void XLogTruncateRelation(RelFileNode rnode, ForkNumber forkNum,
24 BlockNumber nblocks);
25
26/* Result codes for XLogReadBufferForRedo[Extended] */
27typedef enum
28{
29 BLK_NEEDS_REDO, /* changes from WAL record need to be applied */
30 BLK_DONE, /* block is already up-to-date */
31 BLK_RESTORED, /* block was restored from a full-page image */
32 BLK_NOTFOUND /* block was not found (and hence does not
33 * need to be replayed) */
34} XLogRedoAction;
35
36extern XLogRedoAction XLogReadBufferForRedo(XLogReaderState *record,
37 uint8 buffer_id, Buffer *buf);
38extern Buffer XLogInitBufferForRedo(XLogReaderState *record, uint8 block_id);
39extern XLogRedoAction XLogReadBufferForRedoExtended(XLogReaderState *record,
40 uint8 buffer_id,
41 ReadBufferMode mode, bool get_cleanup_lock,
42 Buffer *buf);
43
44extern Buffer XLogReadBufferExtended(RelFileNode rnode, ForkNumber forknum,
45 BlockNumber blkno, ReadBufferMode mode);
46
47extern Relation CreateFakeRelcacheEntry(RelFileNode rnode);
48extern void FreeFakeRelcacheEntry(Relation fakerel);
49
50extern int read_local_xlog_page(XLogReaderState *state,
51 XLogRecPtr targetPagePtr, int reqLen,
52 XLogRecPtr targetRecPtr, char *cur_page,
53 TimeLineID *pageTLI);
54
55extern void XLogReadDetermineTimeline(XLogReaderState *state,
56 XLogRecPtr wantPage, uint32 wantLength);
57
58#endif
59