mirror of
https://github.com/postgres/postgres.git
synced 2025-08-22 21:53:06 +03:00
Refactor per-page logic common to all redo routines to a new function.
Every redo routine uses the same idiom to determine what to do to a page: check if there's a backup block for it, and if not read, the buffer if the block exists, and check its LSN. Refactor that into a common function, XLogReadBufferForRedo, making all the redo routines shorter and more readable. This has no user-visible effect, and makes no changes to the WAL format. Reviewed by Andres Freund, Alvaro Herrera, Michael Paquier.
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* xlogutils.h
|
||||
*
|
||||
* PostgreSQL transaction log manager utility routines
|
||||
* Utilities for replaying WAL records.
|
||||
*
|
||||
* Portions Copyright (c) 1996-2014, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
@@ -11,6 +11,7 @@
|
||||
#ifndef XLOG_UTILS_H
|
||||
#define XLOG_UTILS_H
|
||||
|
||||
#include "access/xlog.h"
|
||||
#include "storage/bufmgr.h"
|
||||
|
||||
|
||||
@@ -22,6 +23,26 @@ extern void XLogDropDatabase(Oid dbid);
|
||||
extern void XLogTruncateRelation(RelFileNode rnode, ForkNumber forkNum,
|
||||
BlockNumber nblocks);
|
||||
|
||||
/* Result codes for XLogReadBufferForRedo[Extended] */
|
||||
typedef enum
|
||||
{
|
||||
BLK_NEEDS_REDO, /* changes from WAL record need to be applied */
|
||||
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;
|
||||
|
||||
extern XLogRedoAction XLogReadBufferForRedo(XLogRecPtr lsn, XLogRecord *record,
|
||||
int block_index, RelFileNode rnode, BlockNumber blkno,
|
||||
Buffer *buf);
|
||||
extern XLogRedoAction XLogReadBufferForRedoExtended(XLogRecPtr lsn,
|
||||
XLogRecord *record, int block_index,
|
||||
RelFileNode rnode, ForkNumber forkno,
|
||||
BlockNumber blkno,
|
||||
ReadBufferMode mode, bool get_cleanup_lock,
|
||||
Buffer *buf);
|
||||
|
||||
extern Buffer XLogReadBuffer(RelFileNode rnode, BlockNumber blkno, bool init);
|
||||
extern Buffer XLogReadBufferExtended(RelFileNode rnode, ForkNumber forknum,
|
||||
BlockNumber blkno, ReadBufferMode mode);
|
||||
|
Reference in New Issue
Block a user