117#define XL_ROUTINE(...) &(XLogReaderRoutine){__VA_ARGS__}
326 return (
state->decode_queue_head != NULL) ||
state->errormsg_deferred;
407#define XLogRecGetTotalLen(decoder) ((decoder)->record->header.xl_tot_len)
408#define XLogRecGetPrev(decoder) ((decoder)->record->header.xl_prev)
409#define XLogRecGetInfo(decoder) ((decoder)->record->header.xl_info)
410#define XLogRecGetRmid(decoder) ((decoder)->record->header.xl_rmid)
411#define XLogRecGetXid(decoder) ((decoder)->record->header.xl_xid)
412#define XLogRecGetOrigin(decoder) ((decoder)->record->record_origin)
413#define XLogRecGetTopXid(decoder) ((decoder)->record->toplevel_xid)
414#define XLogRecGetData(decoder) ((decoder)->record->main_data)
415#define XLogRecGetDataLen(decoder) ((decoder)->record->main_data_len)
416#define XLogRecHasAnyBlockRefs(decoder) ((decoder)->record->max_block_id >= 0)
417#define XLogRecMaxBlockId(decoder) ((decoder)->record->max_block_id)
418#define XLogRecGetBlock(decoder, i) (&(decoder)->record->blocks[(i)])
419#define XLogRecHasBlockRef(decoder, block_id) \
420 (((decoder)->record->max_block_id >= (block_id)) && \
421 ((decoder)->record->blocks[block_id].in_use))
422#define XLogRecHasBlockImage(decoder, block_id) \
423 ((decoder)->record->blocks[block_id].has_image)
424#define XLogRecBlockImageApply(decoder, block_id) \
425 ((decoder)->record->blocks[block_id].apply_image)
426#define XLogRecHasBlockData(decoder, block_id) \
427 ((decoder)->record->blocks[block_id].has_data)
#define FLEXIBLE_ARRAY_MEMBER
struct DecodedXLogRecord * next
TransactionId toplevel_xid
RepOriginId record_origin
DecodedBkpBlock blocks[FLEXIBLE_ARRAY_MEMBER]
WALSegmentCloseCB segment_close
WALSegmentOpenCB segment_open
XLogRecPtr missingContrecPtr
DecodedXLogRecord * record
size_t decode_buffer_size
DecodedXLogRecord * decode_queue_head
XLogRecPtr currTLIValidUntil
DecodedXLogRecord * decode_queue_tail
XLogReaderRoutine routine
char * decode_buffer_head
XLogRecPtr overwrittenRecPtr
char * decode_buffer_tail
bool XLogRecGetBlockTagExtended(XLogReaderState *record, uint8 block_id, RelFileLocator *rlocator, ForkNumber *forknum, BlockNumber *blknum, Buffer *prefetch_buffer)
XLogReaderState * XLogReaderAllocate(int wal_segment_size, const char *waldir, XLogReaderRoutine *routine, void *private_data)
struct XLogRecord * XLogReadRecord(XLogReaderState *state, char **errormsg)
void XLogReaderSetDecodeBuffer(XLogReaderState *state, void *buffer, size_t size)
DecodedXLogRecord * XLogReadAhead(XLogReaderState *state, bool nonblocking)
char * XLogRecGetBlockData(XLogReaderState *record, uint8 block_id, Size *len)
DecodedXLogRecord * XLogNextRecord(XLogReaderState *state, char **errormsg)
static bool XLogReaderHasQueuedRecordOrError(XLogReaderState *state)
struct DecodedXLogRecord DecodedXLogRecord
bool WALRead(XLogReaderState *state, char *buf, XLogRecPtr startptr, Size count, TimeLineID tli, WALReadError *errinfo)
struct WALReadError WALReadError
void(* WALSegmentCloseCB)(XLogReaderState *xlogreader)
void XLogReaderResetError(XLogReaderState *state)
bool XLogReaderValidatePageHeader(XLogReaderState *state, XLogRecPtr recptr, char *phdr)
FullTransactionId XLogRecGetFullXid(XLogReaderState *record)
void XLogReaderFree(XLogReaderState *state)
void XLogRecGetBlockTag(XLogReaderState *record, uint8 block_id, RelFileLocator *rlocator, ForkNumber *forknum, BlockNumber *blknum)
bool DecodeXLogRecord(XLogReaderState *state, DecodedXLogRecord *decoded, XLogRecord *record, XLogRecPtr lsn, char **errormsg)
struct WALOpenSegment WALOpenSegment
size_t DecodeXLogRecordRequiredSpace(size_t xl_tot_len)
XLogRecPtr XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr)
void XLogBeginRead(XLogReaderState *state, XLogRecPtr RecPtr)
struct WALSegmentContext WALSegmentContext
bool RestoreBlockImage(XLogReaderState *record, uint8 block_id, char *page)
void(* WALSegmentOpenCB)(XLogReaderState *xlogreader, XLogSegNo nextSegNo, TimeLineID *tli_p)
int(* XLogPageReadCB)(XLogReaderState *xlogreader, XLogRecPtr targetPagePtr, int reqLen, XLogRecPtr targetRecPtr, char *readBuf)
struct XLogReaderRoutine XLogReaderRoutine
XLogRecPtr XLogReleasePreviousRecord(XLogReaderState *state)
static XLogReaderState * xlogreader