ReadRecPtr = xlogreader->ReadRecPtr;
EndRecPtr = xlogreader->EndRecPtr;
Insert->PrevBytePos = XLogRecPtrToBytePos(LastRec);
Insert->CurrBytePos = XLogRecPtrToBytePos(EndOfLog);
XLogWrite
搜索 INSERT @ 可知道在执行 XLogInsertRecord
checkPoint.redo = XLogSegSize + SizeOfXLogLongPHD;
XLogInsert XLogInsertRecord ReserveXLogInsertLocation
{
startbytepos = Insert->CurrBytePos;
endbytepos = startbytepos + size;
prevbytepos = Insert->PrevBytePos;
Insert->CurrBytePos = endbytepos;
Insert->PrevBytePos = startbytepos;
SpinLockRelease(&Insert->insertpos_lck);
*StartPos = XLogBytePosToRecPtr(startbytepos);
*EndPos = XLogBytePosToEndRecPtr(endbytepos);
*PrevPtr = XLogBytePosToRecPtr(prevbytepos);
}
获取XLOG缓冲区
GetXLogBuffer
LogwrtResult.Write = LogwrtResult.Flush = EndOfLog;
XLogCtl->LogwrtRqst.Write = EndOfLog;
XLogCtl->LogwrtRqst.Flush = EndOfLog;
XLogWrite
XLogCtl->pages