Commit 5ab3af46 authored by Alvaro Herrera's avatar Alvaro Herrera

Remove obsolete XLogRecPtr macros

This gets rid of XLByteLT, XLByteLE, XLByteEQ and XLByteAdvance.
These were useful for brevity when XLogRecPtrs were split in
xlogid/xrecoff; but now that they are simple uint64's, they are just
clutter.  The only downside to making this change would be ease of
backporting patches, but that has been negated by other substantive
changes to the involved code anyway.  The clarity of simpler expressions
makes the change worthwhile.

Most of the changes are mechanical, but in a couple of places, the patch
author chose to invert the operator sense, making the code flow more
logical (and more in line with preceding comments).

Author: Andres Freund
Eyeballed by Dimitri Fontaine and Alvaro Herrera
parent 24eca797
...@@ -177,7 +177,7 @@ ginRedoInsert(XLogRecPtr lsn, XLogRecord *record) ...@@ -177,7 +177,7 @@ ginRedoInsert(XLogRecPtr lsn, XLogRecord *record)
return; /* page was deleted, nothing to do */ return; /* page was deleted, nothing to do */
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
if (data->isData) if (data->isData)
{ {
...@@ -393,7 +393,7 @@ ginRedoVacuumPage(XLogRecPtr lsn, XLogRecord *record) ...@@ -393,7 +393,7 @@ ginRedoVacuumPage(XLogRecPtr lsn, XLogRecord *record)
return; return;
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
if (GinPageIsData(page)) if (GinPageIsData(page))
{ {
...@@ -448,7 +448,7 @@ ginRedoDeletePage(XLogRecPtr lsn, XLogRecord *record) ...@@ -448,7 +448,7 @@ ginRedoDeletePage(XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(dbuffer)) if (BufferIsValid(dbuffer))
{ {
page = BufferGetPage(dbuffer); page = BufferGetPage(dbuffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
Assert(GinPageIsData(page)); Assert(GinPageIsData(page));
GinPageGetOpaque(page)->flags = GIN_DELETED; GinPageGetOpaque(page)->flags = GIN_DELETED;
...@@ -467,7 +467,7 @@ ginRedoDeletePage(XLogRecPtr lsn, XLogRecord *record) ...@@ -467,7 +467,7 @@ ginRedoDeletePage(XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(pbuffer)) if (BufferIsValid(pbuffer))
{ {
page = BufferGetPage(pbuffer); page = BufferGetPage(pbuffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
Assert(GinPageIsData(page)); Assert(GinPageIsData(page));
Assert(!GinPageIsLeaf(page)); Assert(!GinPageIsLeaf(page));
...@@ -487,7 +487,7 @@ ginRedoDeletePage(XLogRecPtr lsn, XLogRecord *record) ...@@ -487,7 +487,7 @@ ginRedoDeletePage(XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(lbuffer)) if (BufferIsValid(lbuffer))
{ {
page = BufferGetPage(lbuffer); page = BufferGetPage(lbuffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
Assert(GinPageIsData(page)); Assert(GinPageIsData(page));
GinPageGetOpaque(page)->rightlink = data->rightLink; GinPageGetOpaque(page)->rightlink = data->rightLink;
...@@ -518,7 +518,7 @@ ginRedoUpdateMetapage(XLogRecPtr lsn, XLogRecord *record) ...@@ -518,7 +518,7 @@ ginRedoUpdateMetapage(XLogRecPtr lsn, XLogRecord *record)
return; /* assume index was deleted, nothing to do */ return; /* assume index was deleted, nothing to do */
metapage = BufferGetPage(metabuffer); metapage = BufferGetPage(metabuffer);
if (!XLByteLE(lsn, PageGetLSN(metapage))) if (lsn > PageGetLSN(metapage))
{ {
memcpy(GinPageGetMeta(metapage), &data->metadata, sizeof(GinMetaPageData)); memcpy(GinPageGetMeta(metapage), &data->metadata, sizeof(GinMetaPageData));
PageSetLSN(metapage, lsn); PageSetLSN(metapage, lsn);
...@@ -540,7 +540,7 @@ ginRedoUpdateMetapage(XLogRecPtr lsn, XLogRecord *record) ...@@ -540,7 +540,7 @@ ginRedoUpdateMetapage(XLogRecPtr lsn, XLogRecord *record)
{ {
Page page = BufferGetPage(buffer); Page page = BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
OffsetNumber l, OffsetNumber l,
off = (PageIsEmpty(page)) ? FirstOffsetNumber : off = (PageIsEmpty(page)) ? FirstOffsetNumber :
...@@ -590,7 +590,7 @@ ginRedoUpdateMetapage(XLogRecPtr lsn, XLogRecord *record) ...@@ -590,7 +590,7 @@ ginRedoUpdateMetapage(XLogRecPtr lsn, XLogRecord *record)
{ {
Page page = BufferGetPage(buffer); Page page = BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
GinPageGetOpaque(page)->rightlink = data->newRightlink; GinPageGetOpaque(page)->rightlink = data->newRightlink;
...@@ -677,7 +677,7 @@ ginRedoDeleteListPages(XLogRecPtr lsn, XLogRecord *record) ...@@ -677,7 +677,7 @@ ginRedoDeleteListPages(XLogRecPtr lsn, XLogRecord *record)
return; /* assume index was deleted, nothing to do */ return; /* assume index was deleted, nothing to do */
metapage = BufferGetPage(metabuffer); metapage = BufferGetPage(metabuffer);
if (!XLByteLE(lsn, PageGetLSN(metapage))) if (lsn > PageGetLSN(metapage))
{ {
memcpy(GinPageGetMeta(metapage), &data->metadata, sizeof(GinMetaPageData)); memcpy(GinPageGetMeta(metapage), &data->metadata, sizeof(GinMetaPageData));
PageSetLSN(metapage, lsn); PageSetLSN(metapage, lsn);
...@@ -703,7 +703,7 @@ ginRedoDeleteListPages(XLogRecPtr lsn, XLogRecord *record) ...@@ -703,7 +703,7 @@ ginRedoDeleteListPages(XLogRecPtr lsn, XLogRecord *record)
{ {
Page page = BufferGetPage(buffer); Page page = BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
GinPageGetOpaque(page)->flags = GIN_DELETED; GinPageGetOpaque(page)->flags = GIN_DELETED;
......
...@@ -561,8 +561,7 @@ gistdoinsert(Relation r, IndexTuple itup, Size freespace, GISTSTATE *giststate) ...@@ -561,8 +561,7 @@ gistdoinsert(Relation r, IndexTuple itup, Size freespace, GISTSTATE *giststate)
} }
if (stack->blkno != GIST_ROOT_BLKNO && if (stack->blkno != GIST_ROOT_BLKNO &&
XLByteLT(stack->parent->lsn, stack->parent->lsn < GistPageGetOpaque(stack->page)->nsn)
GistPageGetOpaque(stack->page)->nsn))
{ {
/* /*
* Concurrent split detected. There's no guarantee that the * Concurrent split detected. There's no guarantee that the
...@@ -620,7 +619,7 @@ gistdoinsert(Relation r, IndexTuple itup, Size freespace, GISTSTATE *giststate) ...@@ -620,7 +619,7 @@ gistdoinsert(Relation r, IndexTuple itup, Size freespace, GISTSTATE *giststate)
xlocked = true; xlocked = true;
stack->page = (Page) BufferGetPage(stack->buffer); stack->page = (Page) BufferGetPage(stack->buffer);
if (!XLByteEQ(PageGetLSN(stack->page), stack->lsn)) if (PageGetLSN(stack->page) != stack->lsn)
{ {
/* the page was changed while we unlocked it, retry */ /* the page was changed while we unlocked it, retry */
continue; continue;
...@@ -708,8 +707,8 @@ gistdoinsert(Relation r, IndexTuple itup, Size freespace, GISTSTATE *giststate) ...@@ -708,8 +707,8 @@ gistdoinsert(Relation r, IndexTuple itup, Size freespace, GISTSTATE *giststate)
*/ */
} }
else if (GistFollowRight(stack->page) || else if (GistFollowRight(stack->page) ||
XLByteLT(stack->parent->lsn, stack->parent->lsn <
GistPageGetOpaque(stack->page)->nsn)) GistPageGetOpaque(stack->page)->nsn)
{ {
/* /*
* The page was split while we momentarily unlocked the * The page was split while we momentarily unlocked the
...@@ -794,7 +793,7 @@ gistFindPath(Relation r, BlockNumber child, OffsetNumber *downlinkoffnum) ...@@ -794,7 +793,7 @@ gistFindPath(Relation r, BlockNumber child, OffsetNumber *downlinkoffnum)
if (GistFollowRight(page)) if (GistFollowRight(page))
elog(ERROR, "concurrent GiST page split was incomplete"); elog(ERROR, "concurrent GiST page split was incomplete");
if (top->parent && XLByteLT(top->parent->lsn, GistPageGetOpaque(page)->nsn) && if (top->parent && top->parent->lsn < GistPageGetOpaque(page)->nsn &&
GistPageGetOpaque(page)->rightlink != InvalidBlockNumber /* sanity check */ ) GistPageGetOpaque(page)->rightlink != InvalidBlockNumber /* sanity check */ )
{ {
/* /*
...@@ -864,7 +863,8 @@ gistFindCorrectParent(Relation r, GISTInsertStack *child) ...@@ -864,7 +863,8 @@ gistFindCorrectParent(Relation r, GISTInsertStack *child)
parent->page = (Page) BufferGetPage(parent->buffer); parent->page = (Page) BufferGetPage(parent->buffer);
/* here we don't need to distinguish between split and page update */ /* here we don't need to distinguish between split and page update */
if (child->downlinkoffnum == InvalidOffsetNumber || !XLByteEQ(parent->lsn, PageGetLSN(parent->page))) if (child->downlinkoffnum == InvalidOffsetNumber ||
parent->lsn != PageGetLSN(parent->page))
{ {
/* parent is changed, look child in right links until found */ /* parent is changed, look child in right links until found */
OffsetNumber i, OffsetNumber i,
......
...@@ -263,7 +263,7 @@ gistScanPage(IndexScanDesc scan, GISTSearchItem *pageItem, double *myDistances, ...@@ -263,7 +263,7 @@ gistScanPage(IndexScanDesc scan, GISTSearchItem *pageItem, double *myDistances,
*/ */
if (!XLogRecPtrIsInvalid(pageItem->data.parentlsn) && if (!XLogRecPtrIsInvalid(pageItem->data.parentlsn) &&
(GistFollowRight(page) || (GistFollowRight(page) ||
XLByteLT(pageItem->data.parentlsn, opaque->nsn)) && pageItem->data.parentlsn < opaque->nsn) &&
opaque->rightlink != InvalidBlockNumber /* sanity check */ ) opaque->rightlink != InvalidBlockNumber /* sanity check */ )
{ {
/* There was a page split, follow right link to add pages */ /* There was a page split, follow right link to add pages */
......
...@@ -114,7 +114,7 @@ pushStackIfSplited(Page page, GistBDItem *stack) ...@@ -114,7 +114,7 @@ pushStackIfSplited(Page page, GistBDItem *stack)
GISTPageOpaque opaque = GistPageGetOpaque(page); GISTPageOpaque opaque = GistPageGetOpaque(page);
if (stack->blkno != GIST_ROOT_BLKNO && !XLogRecPtrIsInvalid(stack->parentlsn) && if (stack->blkno != GIST_ROOT_BLKNO && !XLogRecPtrIsInvalid(stack->parentlsn) &&
(GistFollowRight(page) || XLByteLT(stack->parentlsn, opaque->nsn)) && (GistFollowRight(page) || stack->parentlsn < opaque->nsn) &&
opaque->rightlink != InvalidBlockNumber /* sanity check */ ) opaque->rightlink != InvalidBlockNumber /* sanity check */ )
{ {
/* split page detected, install right link to the stack */ /* split page detected, install right link to the stack */
......
...@@ -64,7 +64,7 @@ gistRedoClearFollowRight(XLogRecPtr lsn, XLogRecord *record, int block_index, ...@@ -64,7 +64,7 @@ gistRedoClearFollowRight(XLogRecPtr lsn, XLogRecord *record, int block_index,
* of this record, because the updated NSN is not included in the full * of this record, because the updated NSN is not included in the full
* page image. * page image.
*/ */
if (!XLByteLT(lsn, PageGetLSN(page))) if (lsn >= PageGetLSN(page))
{ {
GistPageGetOpaque(page)->nsn = lsn; GistPageGetOpaque(page)->nsn = lsn;
GistClearFollowRight(page); GistClearFollowRight(page);
...@@ -119,7 +119,7 @@ gistRedoPageUpdateRecord(XLogRecPtr lsn, XLogRecord *record) ...@@ -119,7 +119,7 @@ gistRedoPageUpdateRecord(XLogRecPtr lsn, XLogRecord *record)
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
/* nothing more to do if change already applied */ /* nothing more to do if change already applied */
if (XLByteLE(lsn, PageGetLSN(page))) if (lsn <= PageGetLSN(page))
{ {
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
return; return;
......
...@@ -4700,7 +4700,7 @@ heap_xlog_clean(XLogRecPtr lsn, XLogRecord *record) ...@@ -4700,7 +4700,7 @@ heap_xlog_clean(XLogRecPtr lsn, XLogRecord *record)
LockBufferForCleanup(buffer); LockBufferForCleanup(buffer);
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
if (XLByteLE(lsn, PageGetLSN(page))) if (lsn <= PageGetLSN(page))
{ {
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
return; return;
...@@ -4770,7 +4770,7 @@ heap_xlog_freeze(XLogRecPtr lsn, XLogRecord *record) ...@@ -4770,7 +4770,7 @@ heap_xlog_freeze(XLogRecPtr lsn, XLogRecord *record)
return; return;
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
if (XLByteLE(lsn, PageGetLSN(page))) if (lsn <= PageGetLSN(page))
{ {
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
return; return;
...@@ -4854,7 +4854,7 @@ heap_xlog_visible(XLogRecPtr lsn, XLogRecord *record) ...@@ -4854,7 +4854,7 @@ heap_xlog_visible(XLogRecPtr lsn, XLogRecord *record)
* XLOG record's LSN, we mustn't mark the page all-visible, because * XLOG record's LSN, we mustn't mark the page all-visible, because
* the subsequent update won't be replayed to clear the flag. * the subsequent update won't be replayed to clear the flag.
*/ */
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
PageSetAllVisible(page); PageSetAllVisible(page);
MarkBufferDirty(buffer); MarkBufferDirty(buffer);
...@@ -4891,7 +4891,7 @@ heap_xlog_visible(XLogRecPtr lsn, XLogRecord *record) ...@@ -4891,7 +4891,7 @@ heap_xlog_visible(XLogRecPtr lsn, XLogRecord *record)
* we did for the heap page. If this results in a dropped bit, no * we did for the heap page. If this results in a dropped bit, no
* real harm is done; and the next VACUUM will fix it. * real harm is done; and the next VACUUM will fix it.
*/ */
if (!XLByteLE(lsn, PageGetLSN(BufferGetPage(vmbuffer)))) if (lsn > PageGetLSN(BufferGetPage(vmbuffer)))
visibilitymap_set(reln, xlrec->block, lsn, vmbuffer, visibilitymap_set(reln, xlrec->block, lsn, vmbuffer,
xlrec->cutoff_xid); xlrec->cutoff_xid);
...@@ -4977,7 +4977,7 @@ heap_xlog_delete(XLogRecPtr lsn, XLogRecord *record) ...@@ -4977,7 +4977,7 @@ heap_xlog_delete(XLogRecPtr lsn, XLogRecord *record)
return; return;
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ if (lsn <= PageGetLSN(page)) /* changes are applied */
{ {
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
return; return;
...@@ -5072,7 +5072,7 @@ heap_xlog_insert(XLogRecPtr lsn, XLogRecord *record) ...@@ -5072,7 +5072,7 @@ heap_xlog_insert(XLogRecPtr lsn, XLogRecord *record)
return; return;
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ if (lsn <= PageGetLSN(page)) /* changes are applied */
{ {
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
return; return;
...@@ -5207,7 +5207,7 @@ heap_xlog_multi_insert(XLogRecPtr lsn, XLogRecord *record) ...@@ -5207,7 +5207,7 @@ heap_xlog_multi_insert(XLogRecPtr lsn, XLogRecord *record)
return; return;
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ if (lsn <= PageGetLSN(page)) /* changes are applied */
{ {
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
return; return;
...@@ -5349,7 +5349,7 @@ heap_xlog_update(XLogRecPtr lsn, XLogRecord *record, bool hot_update) ...@@ -5349,7 +5349,7 @@ heap_xlog_update(XLogRecPtr lsn, XLogRecord *record, bool hot_update)
goto newt; goto newt;
page = (Page) BufferGetPage(obuffer); page = (Page) BufferGetPage(obuffer);
if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ if (lsn <= PageGetLSN(page)) /* changes are applied */
{ {
if (samepage) if (samepage)
{ {
...@@ -5449,7 +5449,7 @@ newt:; ...@@ -5449,7 +5449,7 @@ newt:;
return; return;
page = (Page) BufferGetPage(nbuffer); page = (Page) BufferGetPage(nbuffer);
if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ if (lsn <= PageGetLSN(page)) /* changes are applied */
{ {
UnlockReleaseBuffer(nbuffer); UnlockReleaseBuffer(nbuffer);
if (BufferIsValid(obuffer)) if (BufferIsValid(obuffer))
...@@ -5549,7 +5549,7 @@ heap_xlog_lock(XLogRecPtr lsn, XLogRecord *record) ...@@ -5549,7 +5549,7 @@ heap_xlog_lock(XLogRecPtr lsn, XLogRecord *record)
return; return;
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ if (lsn <= PageGetLSN(page)) /* changes are applied */
{ {
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
return; return;
...@@ -5612,7 +5612,7 @@ heap_xlog_inplace(XLogRecPtr lsn, XLogRecord *record) ...@@ -5612,7 +5612,7 @@ heap_xlog_inplace(XLogRecPtr lsn, XLogRecord *record)
return; return;
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ if (lsn <= PageGetLSN(page)) /* changes are applied */
{ {
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
return; return;
......
...@@ -229,7 +229,7 @@ btree_xlog_insert(bool isleaf, bool ismeta, ...@@ -229,7 +229,7 @@ btree_xlog_insert(bool isleaf, bool ismeta,
{ {
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
if (XLByteLE(lsn, PageGetLSN(page))) if (lsn <= PageGetLSN(page))
{ {
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
} }
...@@ -381,7 +381,7 @@ btree_xlog_split(bool onleft, bool isroot, ...@@ -381,7 +381,7 @@ btree_xlog_split(bool onleft, bool isroot,
Page lpage = (Page) BufferGetPage(lbuf); Page lpage = (Page) BufferGetPage(lbuf);
BTPageOpaque lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage); BTPageOpaque lopaque = (BTPageOpaque) PageGetSpecialPointer(lpage);
if (!XLByteLE(lsn, PageGetLSN(lpage))) if (lsn > PageGetLSN(lpage))
{ {
OffsetNumber off; OffsetNumber off;
OffsetNumber maxoff = PageGetMaxOffsetNumber(lpage); OffsetNumber maxoff = PageGetMaxOffsetNumber(lpage);
...@@ -459,7 +459,7 @@ btree_xlog_split(bool onleft, bool isroot, ...@@ -459,7 +459,7 @@ btree_xlog_split(bool onleft, bool isroot,
{ {
Page page = (Page) BufferGetPage(buffer); Page page = (Page) BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
BTPageOpaque pageop = (BTPageOpaque) PageGetSpecialPointer(page); BTPageOpaque pageop = (BTPageOpaque) PageGetSpecialPointer(page);
...@@ -537,7 +537,7 @@ btree_xlog_vacuum(XLogRecPtr lsn, XLogRecord *record) ...@@ -537,7 +537,7 @@ btree_xlog_vacuum(XLogRecPtr lsn, XLogRecord *record)
LockBufferForCleanup(buffer); LockBufferForCleanup(buffer);
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
if (XLByteLE(lsn, PageGetLSN(page))) if (lsn <= PageGetLSN(page))
{ {
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
return; return;
...@@ -757,7 +757,7 @@ btree_xlog_delete(XLogRecPtr lsn, XLogRecord *record) ...@@ -757,7 +757,7 @@ btree_xlog_delete(XLogRecPtr lsn, XLogRecord *record)
return; return;
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
if (XLByteLE(lsn, PageGetLSN(page))) if (lsn <= PageGetLSN(page))
{ {
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
return; return;
...@@ -820,7 +820,7 @@ btree_xlog_delete_page(uint8 info, XLogRecPtr lsn, XLogRecord *record) ...@@ -820,7 +820,7 @@ btree_xlog_delete_page(uint8 info, XLogRecPtr lsn, XLogRecord *record)
{ {
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
pageop = (BTPageOpaque) PageGetSpecialPointer(page); pageop = (BTPageOpaque) PageGetSpecialPointer(page);
if (XLByteLE(lsn, PageGetLSN(page))) if (lsn <= PageGetLSN(page))
{ {
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
} }
...@@ -867,7 +867,7 @@ btree_xlog_delete_page(uint8 info, XLogRecPtr lsn, XLogRecord *record) ...@@ -867,7 +867,7 @@ btree_xlog_delete_page(uint8 info, XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(buffer)) if (BufferIsValid(buffer))
{ {
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
if (XLByteLE(lsn, PageGetLSN(page))) if (lsn <= PageGetLSN(page))
{ {
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
} }
...@@ -895,7 +895,7 @@ btree_xlog_delete_page(uint8 info, XLogRecPtr lsn, XLogRecord *record) ...@@ -895,7 +895,7 @@ btree_xlog_delete_page(uint8 info, XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(buffer)) if (BufferIsValid(buffer))
{ {
page = (Page) BufferGetPage(buffer); page = (Page) BufferGetPage(buffer);
if (XLByteLE(lsn, PageGetLSN(page))) if (lsn <= PageGetLSN(page))
{ {
UnlockReleaseBuffer(buffer); UnlockReleaseBuffer(buffer);
} }
......
...@@ -139,7 +139,7 @@ spgRedoAddLeaf(XLogRecPtr lsn, XLogRecord *record) ...@@ -139,7 +139,7 @@ spgRedoAddLeaf(XLogRecPtr lsn, XLogRecord *record)
SpGistInitBuffer(buffer, SpGistInitBuffer(buffer,
SPGIST_LEAF | (xldata->storesNulls ? SPGIST_NULLS : 0)); SPGIST_LEAF | (xldata->storesNulls ? SPGIST_NULLS : 0));
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
/* insert new tuple */ /* insert new tuple */
if (xldata->offnumLeaf != xldata->offnumHeadLeaf) if (xldata->offnumLeaf != xldata->offnumHeadLeaf)
...@@ -187,7 +187,7 @@ spgRedoAddLeaf(XLogRecPtr lsn, XLogRecord *record) ...@@ -187,7 +187,7 @@ spgRedoAddLeaf(XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(buffer)) if (BufferIsValid(buffer))
{ {
page = BufferGetPage(buffer); page = BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
SpGistInnerTuple tuple; SpGistInnerTuple tuple;
...@@ -251,7 +251,7 @@ spgRedoMoveLeafs(XLogRecPtr lsn, XLogRecord *record) ...@@ -251,7 +251,7 @@ spgRedoMoveLeafs(XLogRecPtr lsn, XLogRecord *record)
SpGistInitBuffer(buffer, SpGistInitBuffer(buffer,
SPGIST_LEAF | (xldata->storesNulls ? SPGIST_NULLS : 0)); SPGIST_LEAF | (xldata->storesNulls ? SPGIST_NULLS : 0));
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
int i; int i;
...@@ -280,7 +280,7 @@ spgRedoMoveLeafs(XLogRecPtr lsn, XLogRecord *record) ...@@ -280,7 +280,7 @@ spgRedoMoveLeafs(XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(buffer)) if (BufferIsValid(buffer))
{ {
page = BufferGetPage(buffer); page = BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
spgPageIndexMultiDelete(&state, page, toDelete, xldata->nMoves, spgPageIndexMultiDelete(&state, page, toDelete, xldata->nMoves,
state.isBuild ? SPGIST_PLACEHOLDER : SPGIST_REDIRECT, state.isBuild ? SPGIST_PLACEHOLDER : SPGIST_REDIRECT,
...@@ -305,7 +305,7 @@ spgRedoMoveLeafs(XLogRecPtr lsn, XLogRecord *record) ...@@ -305,7 +305,7 @@ spgRedoMoveLeafs(XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(buffer)) if (BufferIsValid(buffer))
{ {
page = BufferGetPage(buffer); page = BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
SpGistInnerTuple tuple; SpGistInnerTuple tuple;
...@@ -353,7 +353,7 @@ spgRedoAddNode(XLogRecPtr lsn, XLogRecord *record) ...@@ -353,7 +353,7 @@ spgRedoAddNode(XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(buffer)) if (BufferIsValid(buffer))
{ {
page = BufferGetPage(buffer); page = BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
PageIndexTupleDelete(page, xldata->offnum); PageIndexTupleDelete(page, xldata->offnum);
if (PageAddItem(page, (Item) innerTuple, innerTuple->size, if (PageAddItem(page, (Item) innerTuple, innerTuple->size,
...@@ -399,7 +399,7 @@ spgRedoAddNode(XLogRecPtr lsn, XLogRecord *record) ...@@ -399,7 +399,7 @@ spgRedoAddNode(XLogRecPtr lsn, XLogRecord *record)
if (xldata->newPage) if (xldata->newPage)
SpGistInitBuffer(buffer, 0); SpGistInitBuffer(buffer, 0);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
addOrReplaceTuple(page, (Item) innerTuple, addOrReplaceTuple(page, (Item) innerTuple,
innerTuple->size, xldata->offnumNew); innerTuple->size, xldata->offnumNew);
...@@ -430,7 +430,7 @@ spgRedoAddNode(XLogRecPtr lsn, XLogRecord *record) ...@@ -430,7 +430,7 @@ spgRedoAddNode(XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(buffer)) if (BufferIsValid(buffer))
{ {
page = BufferGetPage(buffer); page = BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
SpGistDeadTuple dt; SpGistDeadTuple dt;
...@@ -495,7 +495,7 @@ spgRedoAddNode(XLogRecPtr lsn, XLogRecord *record) ...@@ -495,7 +495,7 @@ spgRedoAddNode(XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(buffer)) if (BufferIsValid(buffer))
{ {
page = BufferGetPage(buffer); page = BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
SpGistInnerTuple innerTuple; SpGistInnerTuple innerTuple;
...@@ -552,7 +552,7 @@ spgRedoSplitTuple(XLogRecPtr lsn, XLogRecord *record) ...@@ -552,7 +552,7 @@ spgRedoSplitTuple(XLogRecPtr lsn, XLogRecord *record)
if (xldata->newPage) if (xldata->newPage)
SpGistInitBuffer(buffer, 0); SpGistInitBuffer(buffer, 0);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
addOrReplaceTuple(page, (Item) postfixTuple, addOrReplaceTuple(page, (Item) postfixTuple,
postfixTuple->size, xldata->offnumPostfix); postfixTuple->size, xldata->offnumPostfix);
...@@ -574,7 +574,7 @@ spgRedoSplitTuple(XLogRecPtr lsn, XLogRecord *record) ...@@ -574,7 +574,7 @@ spgRedoSplitTuple(XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(buffer)) if (BufferIsValid(buffer))
{ {
page = BufferGetPage(buffer); page = BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
PageIndexTupleDelete(page, xldata->offnumPrefix); PageIndexTupleDelete(page, xldata->offnumPrefix);
if (PageAddItem(page, (Item) prefixTuple, prefixTuple->size, if (PageAddItem(page, (Item) prefixTuple, prefixTuple->size,
...@@ -670,7 +670,7 @@ spgRedoPickSplit(XLogRecPtr lsn, XLogRecord *record) ...@@ -670,7 +670,7 @@ spgRedoPickSplit(XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(srcBuffer)) if (BufferIsValid(srcBuffer))
{ {
srcPage = BufferGetPage(srcBuffer); srcPage = BufferGetPage(srcBuffer);
if (!XLByteLE(lsn, PageGetLSN(srcPage))) if (lsn > PageGetLSN(srcPage))
{ {
/* /*
* We have it a bit easier here than in doPickSplit(), * We have it a bit easier here than in doPickSplit(),
...@@ -737,7 +737,7 @@ spgRedoPickSplit(XLogRecPtr lsn, XLogRecord *record) ...@@ -737,7 +737,7 @@ spgRedoPickSplit(XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(destBuffer)) if (BufferIsValid(destBuffer))
{ {
destPage = (Page) BufferGetPage(destBuffer); destPage = (Page) BufferGetPage(destBuffer);
if (XLByteLE(lsn, PageGetLSN(destPage))) if (lsn <= PageGetLSN(destPage))
destPage = NULL; /* don't do any page updates */ destPage = NULL; /* don't do any page updates */
} }
else else
...@@ -790,7 +790,7 @@ spgRedoPickSplit(XLogRecPtr lsn, XLogRecord *record) ...@@ -790,7 +790,7 @@ spgRedoPickSplit(XLogRecPtr lsn, XLogRecord *record)
SpGistInitBuffer(buffer, SpGistInitBuffer(buffer,
(xldata->storesNulls ? SPGIST_NULLS : 0)); (xldata->storesNulls ? SPGIST_NULLS : 0));
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
addOrReplaceTuple(page, (Item) innerTuple, innerTuple->size, addOrReplaceTuple(page, (Item) innerTuple, innerTuple->size,
xldata->offnumInner); xldata->offnumInner);
...@@ -842,7 +842,7 @@ spgRedoPickSplit(XLogRecPtr lsn, XLogRecord *record) ...@@ -842,7 +842,7 @@ spgRedoPickSplit(XLogRecPtr lsn, XLogRecord *record)
{ {
page = BufferGetPage(buffer); page = BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
SpGistInnerTuple parent; SpGistInnerTuple parent;
...@@ -900,7 +900,7 @@ spgRedoVacuumLeaf(XLogRecPtr lsn, XLogRecord *record) ...@@ -900,7 +900,7 @@ spgRedoVacuumLeaf(XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(buffer)) if (BufferIsValid(buffer))
{ {
page = BufferGetPage(buffer); page = BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
spgPageIndexMultiDelete(&state, page, spgPageIndexMultiDelete(&state, page,
toDead, xldata->nDead, toDead, xldata->nDead,
...@@ -971,7 +971,7 @@ spgRedoVacuumRoot(XLogRecPtr lsn, XLogRecord *record) ...@@ -971,7 +971,7 @@ spgRedoVacuumRoot(XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(buffer)) if (BufferIsValid(buffer))
{ {
page = BufferGetPage(buffer); page = BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
/* The tuple numbers are in order */ /* The tuple numbers are in order */
PageIndexMultiDelete(page, toDelete, xldata->nDelete); PageIndexMultiDelete(page, toDelete, xldata->nDelete);
...@@ -1017,7 +1017,7 @@ spgRedoVacuumRedirect(XLogRecPtr lsn, XLogRecord *record) ...@@ -1017,7 +1017,7 @@ spgRedoVacuumRedirect(XLogRecPtr lsn, XLogRecord *record)
if (BufferIsValid(buffer)) if (BufferIsValid(buffer))
{ {
page = BufferGetPage(buffer); page = BufferGetPage(buffer);
if (!XLByteLE(lsn, PageGetLSN(page))) if (lsn > PageGetLSN(page))
{ {
SpGistPageOpaque opaque = SpGistPageGetOpaque(page); SpGistPageOpaque opaque = SpGistPageGetOpaque(page);
int i; int i;
......
...@@ -365,7 +365,7 @@ TransactionIdSetStatusBit(TransactionId xid, XidStatus status, XLogRecPtr lsn, i ...@@ -365,7 +365,7 @@ TransactionIdSetStatusBit(TransactionId xid, XidStatus status, XLogRecPtr lsn, i
{ {
int lsnindex = GetLSNIndex(slotno, xid); int lsnindex = GetLSNIndex(slotno, xid);
if (XLByteLT(ClogCtl->shared->group_lsn[lsnindex], lsn)) if (ClogCtl->shared->group_lsn[lsnindex] < lsn)
ClogCtl->shared->group_lsn[lsnindex] = lsn; ClogCtl->shared->group_lsn[lsnindex] = lsn;
} }
} }
......
...@@ -685,7 +685,7 @@ SlruPhysicalWritePage(SlruCtl ctl, int pageno, int slotno, SlruFlush fdata) ...@@ -685,7 +685,7 @@ SlruPhysicalWritePage(SlruCtl ctl, int pageno, int slotno, SlruFlush fdata)
{ {
XLogRecPtr this_lsn = shared->group_lsn[lsnindex++]; XLogRecPtr this_lsn = shared->group_lsn[lsnindex++];
if (XLByteLT(max_lsn, this_lsn)) if (max_lsn < this_lsn)
max_lsn = this_lsn; max_lsn = this_lsn;
} }
......
...@@ -522,8 +522,8 @@ tliOfPointInHistory(XLogRecPtr ptr, List *history) ...@@ -522,8 +522,8 @@ tliOfPointInHistory(XLogRecPtr ptr, List *history)
foreach(cell, history) foreach(cell, history)
{ {
TimeLineHistoryEntry *tle = (TimeLineHistoryEntry *) lfirst(cell); TimeLineHistoryEntry *tle = (TimeLineHistoryEntry *) lfirst(cell);
if ((XLogRecPtrIsInvalid(tle->begin) || XLByteLE(tle->begin, ptr)) && if ((XLogRecPtrIsInvalid(tle->begin) || tle->begin <= ptr) &&
(XLogRecPtrIsInvalid(tle->end) || XLByteLT(ptr, tle->end))) (XLogRecPtrIsInvalid(tle->end) || ptr < tle->end))
{ {
/* found it */ /* found it */
return tle->tli; return tle->tli;
......
...@@ -1559,7 +1559,7 @@ CheckPointTwoPhase(XLogRecPtr redo_horizon) ...@@ -1559,7 +1559,7 @@ CheckPointTwoPhase(XLogRecPtr redo_horizon)
PGXACT *pgxact = &ProcGlobal->allPgXact[gxact->pgprocno]; PGXACT *pgxact = &ProcGlobal->allPgXact[gxact->pgprocno];
if (gxact->valid && if (gxact->valid &&
XLByteLE(gxact->prepare_lsn, redo_horizon)) gxact->prepare_lsn <= redo_horizon)
xids[nxids++] = pgxact->xid; xids[nxids++] = pgxact->xid;
} }
......
...@@ -926,9 +926,9 @@ begin:; ...@@ -926,9 +926,9 @@ begin:;
* affect the contents of the XLOG record, so we'll update our local copy * affect the contents of the XLOG record, so we'll update our local copy
* but not force a recomputation. * but not force a recomputation.
*/ */
if (!XLByteEQ(RedoRecPtr, Insert->RedoRecPtr)) if (RedoRecPtr != Insert->RedoRecPtr)
{ {
Assert(XLByteLT(RedoRecPtr, Insert->RedoRecPtr)); Assert(RedoRecPtr < Insert->RedoRecPtr);
RedoRecPtr = Insert->RedoRecPtr; RedoRecPtr = Insert->RedoRecPtr;
if (doPageWrites) if (doPageWrites)
...@@ -938,7 +938,7 @@ begin:; ...@@ -938,7 +938,7 @@ begin:;
if (dtbuf[i] == InvalidBuffer) if (dtbuf[i] == InvalidBuffer)
continue; continue;
if (dtbuf_bkp[i] == false && if (dtbuf_bkp[i] == false &&
XLByteLE(dtbuf_lsn[i], RedoRecPtr)) dtbuf_lsn[i] <= RedoRecPtr)
{ {
/* /*
* Oops, this buffer now needs to be backed up, but we * Oops, this buffer now needs to be backed up, but we
...@@ -1002,7 +1002,7 @@ begin:; ...@@ -1002,7 +1002,7 @@ begin:;
LWLockAcquire(WALWriteLock, LW_EXCLUSIVE); LWLockAcquire(WALWriteLock, LW_EXCLUSIVE);
LogwrtResult = XLogCtl->LogwrtResult; LogwrtResult = XLogCtl->LogwrtResult;
if (!XLByteLE(RecPtr, LogwrtResult.Flush)) if (LogwrtResult.Flush < RecPtr)
{ {
XLogwrtRqst FlushRqst; XLogwrtRqst FlushRqst;
...@@ -1150,9 +1150,9 @@ begin:; ...@@ -1150,9 +1150,9 @@ begin:;
SpinLockAcquire(&xlogctl->info_lck); SpinLockAcquire(&xlogctl->info_lck);
xlogctl->LogwrtResult = LogwrtResult; xlogctl->LogwrtResult = LogwrtResult;
if (XLByteLT(xlogctl->LogwrtRqst.Write, LogwrtResult.Write)) if (xlogctl->LogwrtRqst.Write < LogwrtResult.Write)
xlogctl->LogwrtRqst.Write = LogwrtResult.Write; xlogctl->LogwrtRqst.Write = LogwrtResult.Write;
if (XLByteLT(xlogctl->LogwrtRqst.Flush, LogwrtResult.Flush)) if (xlogctl->LogwrtRqst.Flush < LogwrtResult.Flush)
xlogctl->LogwrtRqst.Flush = LogwrtResult.Flush; xlogctl->LogwrtRqst.Flush = LogwrtResult.Flush;
SpinLockRelease(&xlogctl->info_lck); SpinLockRelease(&xlogctl->info_lck);
} }
...@@ -1188,7 +1188,7 @@ begin:; ...@@ -1188,7 +1188,7 @@ begin:;
SpinLockAcquire(&xlogctl->info_lck); SpinLockAcquire(&xlogctl->info_lck);
/* advance global request to include new block(s) */ /* advance global request to include new block(s) */
if (XLByteLT(xlogctl->LogwrtRqst.Write, WriteRqst)) if (xlogctl->LogwrtRqst.Write < WriteRqst)
xlogctl->LogwrtRqst.Write = WriteRqst; xlogctl->LogwrtRqst.Write = WriteRqst;
/* update local result copy while I have the chance */ /* update local result copy while I have the chance */
LogwrtResult = xlogctl->LogwrtResult; LogwrtResult = xlogctl->LogwrtResult;
...@@ -1227,7 +1227,7 @@ XLogCheckBuffer(XLogRecData *rdata, bool doPageWrites, ...@@ -1227,7 +1227,7 @@ XLogCheckBuffer(XLogRecData *rdata, bool doPageWrites,
*lsn = PageGetLSN(page); *lsn = PageGetLSN(page);
if (doPageWrites && if (doPageWrites &&
XLByteLE(PageGetLSN(page), RedoRecPtr)) PageGetLSN(page) <= RedoRecPtr)
{ {
/* /*
* The page needs to be backed up, so set up *bkpb * The page needs to be backed up, so set up *bkpb
...@@ -1300,7 +1300,7 @@ AdvanceXLInsertBuffer(bool new_segment) ...@@ -1300,7 +1300,7 @@ AdvanceXLInsertBuffer(bool new_segment)
* written out. * written out.
*/ */
OldPageRqstPtr = XLogCtl->xlblocks[nextidx]; OldPageRqstPtr = XLogCtl->xlblocks[nextidx];
if (!XLByteLE(OldPageRqstPtr, LogwrtResult.Write)) if (LogwrtResult.Write < OldPageRqstPtr)
{ {
/* nope, got work to do... */ /* nope, got work to do... */
XLogRecPtr FinishedPageRqstPtr; XLogRecPtr FinishedPageRqstPtr;
...@@ -1313,7 +1313,7 @@ AdvanceXLInsertBuffer(bool new_segment) ...@@ -1313,7 +1313,7 @@ AdvanceXLInsertBuffer(bool new_segment)
volatile XLogCtlData *xlogctl = XLogCtl; volatile XLogCtlData *xlogctl = XLogCtl;
SpinLockAcquire(&xlogctl->info_lck); SpinLockAcquire(&xlogctl->info_lck);
if (XLByteLT(xlogctl->LogwrtRqst.Write, FinishedPageRqstPtr)) if (xlogctl->LogwrtRqst.Write < FinishedPageRqstPtr)
xlogctl->LogwrtRqst.Write = FinishedPageRqstPtr; xlogctl->LogwrtRqst.Write = FinishedPageRqstPtr;
LogwrtResult = xlogctl->LogwrtResult; LogwrtResult = xlogctl->LogwrtResult;
SpinLockRelease(&xlogctl->info_lck); SpinLockRelease(&xlogctl->info_lck);
...@@ -1325,12 +1325,12 @@ AdvanceXLInsertBuffer(bool new_segment) ...@@ -1325,12 +1325,12 @@ AdvanceXLInsertBuffer(bool new_segment)
* Now that we have an up-to-date LogwrtResult value, see if we still * Now that we have an up-to-date LogwrtResult value, see if we still
* need to write it or if someone else already did. * need to write it or if someone else already did.
*/ */
if (!XLByteLE(OldPageRqstPtr, LogwrtResult.Write)) if (LogwrtResult.Write < OldPageRqstPtr)
{ {
/* Must acquire write lock */ /* Must acquire write lock */
LWLockAcquire(WALWriteLock, LW_EXCLUSIVE); LWLockAcquire(WALWriteLock, LW_EXCLUSIVE);
LogwrtResult = XLogCtl->LogwrtResult; LogwrtResult = XLogCtl->LogwrtResult;
if (XLByteLE(OldPageRqstPtr, LogwrtResult.Write)) if (LogwrtResult.Write >= OldPageRqstPtr)
{ {
/* OK, someone wrote it already */ /* OK, someone wrote it already */
LWLockRelease(WALWriteLock); LWLockRelease(WALWriteLock);
...@@ -1361,12 +1361,11 @@ AdvanceXLInsertBuffer(bool new_segment) ...@@ -1361,12 +1361,11 @@ AdvanceXLInsertBuffer(bool new_segment)
{ {
/* force it to a segment start point */ /* force it to a segment start point */
if (NewPageBeginPtr % XLogSegSize != 0) if (NewPageBeginPtr % XLogSegSize != 0)
XLByteAdvance(NewPageBeginPtr, NewPageBeginPtr += XLogSegSize - NewPageBeginPtr % XLogSegSize;
XLogSegSize - NewPageBeginPtr % XLogSegSize);
} }
NewPageEndPtr = NewPageBeginPtr; NewPageEndPtr = NewPageBeginPtr;
XLByteAdvance(NewPageEndPtr, XLOG_BLCKSZ); NewPageEndPtr += XLOG_BLCKSZ;
XLogCtl->xlblocks[nextidx] = NewPageEndPtr; XLogCtl->xlblocks[nextidx] = NewPageEndPtr;
NewPage = (XLogPageHeader) (XLogCtl->pages + nextidx * (Size) XLOG_BLCKSZ); NewPage = (XLogPageHeader) (XLogCtl->pages + nextidx * (Size) XLOG_BLCKSZ);
...@@ -1503,14 +1502,14 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible, bool xlog_switch) ...@@ -1503,14 +1502,14 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible, bool xlog_switch)
*/ */
curridx = Write->curridx; curridx = Write->curridx;
while (XLByteLT(LogwrtResult.Write, WriteRqst.Write)) while (LogwrtResult.Write < WriteRqst.Write)
{ {
/* /*
* Make sure we're not ahead of the insert process. This could happen * Make sure we're not ahead of the insert process. This could happen
* if we're passed a bogus WriteRqst.Write that is past the end of the * if we're passed a bogus WriteRqst.Write that is past the end of the
* last page that's been initialized by AdvanceXLInsertBuffer. * last page that's been initialized by AdvanceXLInsertBuffer.
*/ */
if (!XLByteLT(LogwrtResult.Write, XLogCtl->xlblocks[curridx])) if (LogwrtResult.Write >= XLogCtl->xlblocks[curridx])
elog(PANIC, "xlog write request %X/%X is past end of log %X/%X", elog(PANIC, "xlog write request %X/%X is past end of log %X/%X",
(uint32) (LogwrtResult.Write >> 32), (uint32) LogwrtResult.Write, (uint32) (LogwrtResult.Write >> 32), (uint32) LogwrtResult.Write,
(uint32) (XLogCtl->xlblocks[curridx] >> 32), (uint32) (XLogCtl->xlblocks[curridx] >> 32),
...@@ -1518,7 +1517,7 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible, bool xlog_switch) ...@@ -1518,7 +1517,7 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible, bool xlog_switch)
/* Advance LogwrtResult.Write to end of current buffer page */ /* Advance LogwrtResult.Write to end of current buffer page */
LogwrtResult.Write = XLogCtl->xlblocks[curridx]; LogwrtResult.Write = XLogCtl->xlblocks[curridx];
ispartialpage = XLByteLT(WriteRqst.Write, LogwrtResult.Write); ispartialpage = WriteRqst.Write < LogwrtResult.Write;
if (!XLByteInPrevSeg(LogwrtResult.Write, openLogSegNo)) if (!XLByteInPrevSeg(LogwrtResult.Write, openLogSegNo))
{ {
...@@ -1560,7 +1559,7 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible, bool xlog_switch) ...@@ -1560,7 +1559,7 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible, bool xlog_switch)
* contiguous in memory), or if we are at the end of the logfile * contiguous in memory), or if we are at the end of the logfile
* segment. * segment.
*/ */
last_iteration = !XLByteLT(LogwrtResult.Write, WriteRqst.Write); last_iteration = WriteRqst.Write <= LogwrtResult.Write;
finishing_seg = !ispartialpage && finishing_seg = !ispartialpage &&
(startoffset + npages * XLOG_BLCKSZ) >= XLogSegSize; (startoffset + npages * XLOG_BLCKSZ) >= XLogSegSize;
...@@ -1671,8 +1670,9 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible, bool xlog_switch) ...@@ -1671,8 +1670,9 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible, bool xlog_switch)
/* /*
* If asked to flush, do so * If asked to flush, do so
*/ */
if (XLByteLT(LogwrtResult.Flush, WriteRqst.Flush) && if (LogwrtResult.Flush < WriteRqst.Flush &&
XLByteLT(LogwrtResult.Flush, LogwrtResult.Write)) LogwrtResult.Flush < LogwrtResult.Write)
{ {
/* /*
* Could get here without iterating above loop, in which case we might * Could get here without iterating above loop, in which case we might
...@@ -1714,9 +1714,9 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible, bool xlog_switch) ...@@ -1714,9 +1714,9 @@ XLogWrite(XLogwrtRqst WriteRqst, bool flexible, bool xlog_switch)
SpinLockAcquire(&xlogctl->info_lck); SpinLockAcquire(&xlogctl->info_lck);
xlogctl->LogwrtResult = LogwrtResult; xlogctl->LogwrtResult = LogwrtResult;
if (XLByteLT(xlogctl->LogwrtRqst.Write, LogwrtResult.Write)) if (xlogctl->LogwrtRqst.Write < LogwrtResult.Write)
xlogctl->LogwrtRqst.Write = LogwrtResult.Write; xlogctl->LogwrtRqst.Write = LogwrtResult.Write;
if (XLByteLT(xlogctl->LogwrtRqst.Flush, LogwrtResult.Flush)) if (xlogctl->LogwrtRqst.Flush < LogwrtResult.Flush)
xlogctl->LogwrtRqst.Flush = LogwrtResult.Flush; xlogctl->LogwrtRqst.Flush = LogwrtResult.Flush;
SpinLockRelease(&xlogctl->info_lck); SpinLockRelease(&xlogctl->info_lck);
} }
...@@ -1739,7 +1739,7 @@ XLogSetAsyncXactLSN(XLogRecPtr asyncXactLSN) ...@@ -1739,7 +1739,7 @@ XLogSetAsyncXactLSN(XLogRecPtr asyncXactLSN)
SpinLockAcquire(&xlogctl->info_lck); SpinLockAcquire(&xlogctl->info_lck);
LogwrtResult = xlogctl->LogwrtResult; LogwrtResult = xlogctl->LogwrtResult;
sleeping = xlogctl->WalWriterSleeping; sleeping = xlogctl->WalWriterSleeping;
if (XLByteLT(xlogctl->asyncXactLSN, asyncXactLSN)) if (xlogctl->asyncXactLSN < asyncXactLSN)
xlogctl->asyncXactLSN = asyncXactLSN; xlogctl->asyncXactLSN = asyncXactLSN;
SpinLockRelease(&xlogctl->info_lck); SpinLockRelease(&xlogctl->info_lck);
...@@ -1754,7 +1754,7 @@ XLogSetAsyncXactLSN(XLogRecPtr asyncXactLSN) ...@@ -1754,7 +1754,7 @@ XLogSetAsyncXactLSN(XLogRecPtr asyncXactLSN)
WriteRqstPtr -= WriteRqstPtr % XLOG_BLCKSZ; WriteRqstPtr -= WriteRqstPtr % XLOG_BLCKSZ;
/* if we have already flushed that far, we're done */ /* if we have already flushed that far, we're done */
if (XLByteLE(WriteRqstPtr, LogwrtResult.Flush)) if (WriteRqstPtr <= LogwrtResult.Flush)
return; return;
} }
...@@ -1780,7 +1780,7 @@ static void ...@@ -1780,7 +1780,7 @@ static void
UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force) UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force)
{ {
/* Quick check using our local copy of the variable */ /* Quick check using our local copy of the variable */
if (!updateMinRecoveryPoint || (!force && XLByteLE(lsn, minRecoveryPoint))) if (!updateMinRecoveryPoint || (!force && lsn <= minRecoveryPoint))
return; return;
LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); LWLockAcquire(ControlFileLock, LW_EXCLUSIVE);
...@@ -1796,7 +1796,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force) ...@@ -1796,7 +1796,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force)
*/ */
if (minRecoveryPoint == 0) if (minRecoveryPoint == 0)
updateMinRecoveryPoint = false; updateMinRecoveryPoint = false;
else if (force || XLByteLT(minRecoveryPoint, lsn)) else if (force || minRecoveryPoint < lsn)
{ {
/* use volatile pointer to prevent code rearrangement */ /* use volatile pointer to prevent code rearrangement */
volatile XLogCtlData *xlogctl = XLogCtl; volatile XLogCtlData *xlogctl = XLogCtl;
...@@ -1821,7 +1821,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force) ...@@ -1821,7 +1821,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force)
newMinRecoveryPointTLI = xlogctl->replayEndTLI; newMinRecoveryPointTLI = xlogctl->replayEndTLI;
SpinLockRelease(&xlogctl->info_lck); SpinLockRelease(&xlogctl->info_lck);
if (!force && XLByteLT(newMinRecoveryPoint, lsn)) if (!force && newMinRecoveryPoint < lsn)
elog(WARNING, elog(WARNING,
"xlog min recovery request %X/%X is past current point %X/%X", "xlog min recovery request %X/%X is past current point %X/%X",
(uint32) (lsn >> 32) , (uint32) lsn, (uint32) (lsn >> 32) , (uint32) lsn,
...@@ -1829,7 +1829,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force) ...@@ -1829,7 +1829,7 @@ UpdateMinRecoveryPoint(XLogRecPtr lsn, bool force)
(uint32) newMinRecoveryPoint); (uint32) newMinRecoveryPoint);
/* update control file */ /* update control file */
if (XLByteLT(ControlFile->minRecoveryPoint, newMinRecoveryPoint)) if (ControlFile->minRecoveryPoint < newMinRecoveryPoint)
{ {
ControlFile->minRecoveryPoint = newMinRecoveryPoint; ControlFile->minRecoveryPoint = newMinRecoveryPoint;
ControlFile->minRecoveryPointTLI = newMinRecoveryPointTLI; ControlFile->minRecoveryPointTLI = newMinRecoveryPointTLI;
...@@ -1873,7 +1873,7 @@ XLogFlush(XLogRecPtr record) ...@@ -1873,7 +1873,7 @@ XLogFlush(XLogRecPtr record)
} }
/* Quick exit if already known flushed */ /* Quick exit if already known flushed */
if (XLByteLE(record, LogwrtResult.Flush)) if (record <= LogwrtResult.Flush)
return; return;
#ifdef WAL_DEBUG #ifdef WAL_DEBUG
...@@ -1908,13 +1908,13 @@ XLogFlush(XLogRecPtr record) ...@@ -1908,13 +1908,13 @@ XLogFlush(XLogRecPtr record)
/* read LogwrtResult and update local state */ /* read LogwrtResult and update local state */
SpinLockAcquire(&xlogctl->info_lck); SpinLockAcquire(&xlogctl->info_lck);
if (XLByteLT(WriteRqstPtr, xlogctl->LogwrtRqst.Write)) if (WriteRqstPtr < xlogctl->LogwrtRqst.Write)
WriteRqstPtr = xlogctl->LogwrtRqst.Write; WriteRqstPtr = xlogctl->LogwrtRqst.Write;
LogwrtResult = xlogctl->LogwrtResult; LogwrtResult = xlogctl->LogwrtResult;
SpinLockRelease(&xlogctl->info_lck); SpinLockRelease(&xlogctl->info_lck);
/* done already? */ /* done already? */
if (XLByteLE(record, LogwrtResult.Flush)) if (record <= LogwrtResult.Flush)
break; break;
/* /*
...@@ -1936,7 +1936,7 @@ XLogFlush(XLogRecPtr record) ...@@ -1936,7 +1936,7 @@ XLogFlush(XLogRecPtr record)
/* Got the lock; recheck whether request is satisfied */ /* Got the lock; recheck whether request is satisfied */
LogwrtResult = XLogCtl->LogwrtResult; LogwrtResult = XLogCtl->LogwrtResult;
if (XLByteLE(record, LogwrtResult.Flush)) if (record <= LogwrtResult.Flush)
{ {
LWLockRelease(WALWriteLock); LWLockRelease(WALWriteLock);
break; break;
...@@ -2010,7 +2010,7 @@ XLogFlush(XLogRecPtr record) ...@@ -2010,7 +2010,7 @@ XLogFlush(XLogRecPtr record)
* calls from bufmgr.c are not within critical sections and so we will not * calls from bufmgr.c are not within critical sections and so we will not
* force a restart for a bad LSN on a data page. * force a restart for a bad LSN on a data page.
*/ */
if (XLByteLT(LogwrtResult.Flush, record)) if (LogwrtResult.Flush < record)
elog(ERROR, elog(ERROR,
"xlog flush request %X/%X is not satisfied --- flushed only to %X/%X", "xlog flush request %X/%X is not satisfied --- flushed only to %X/%X",
(uint32) (record >> 32), (uint32) record, (uint32) (record >> 32), (uint32) record,
...@@ -2060,7 +2060,7 @@ XLogBackgroundFlush(void) ...@@ -2060,7 +2060,7 @@ XLogBackgroundFlush(void)
WriteRqstPtr -= WriteRqstPtr % XLOG_BLCKSZ; WriteRqstPtr -= WriteRqstPtr % XLOG_BLCKSZ;
/* if we have already flushed that far, consider async commit records */ /* if we have already flushed that far, consider async commit records */
if (XLByteLE(WriteRqstPtr, LogwrtResult.Flush)) if (WriteRqstPtr <= LogwrtResult.Flush)
{ {
/* use volatile pointer to prevent code rearrangement */ /* use volatile pointer to prevent code rearrangement */
volatile XLogCtlData *xlogctl = XLogCtl; volatile XLogCtlData *xlogctl = XLogCtl;
...@@ -2076,7 +2076,7 @@ XLogBackgroundFlush(void) ...@@ -2076,7 +2076,7 @@ XLogBackgroundFlush(void)
* holding an open file handle to a logfile that's no longer in use, * holding an open file handle to a logfile that's no longer in use,
* preventing the file from being deleted. * preventing the file from being deleted.
*/ */
if (XLByteLE(WriteRqstPtr, LogwrtResult.Flush)) if (WriteRqstPtr <= LogwrtResult.Flush)
{ {
if (openLogFile >= 0) if (openLogFile >= 0)
{ {
...@@ -2101,7 +2101,7 @@ XLogBackgroundFlush(void) ...@@ -2101,7 +2101,7 @@ XLogBackgroundFlush(void)
/* now wait for the write lock */ /* now wait for the write lock */
LWLockAcquire(WALWriteLock, LW_EXCLUSIVE); LWLockAcquire(WALWriteLock, LW_EXCLUSIVE);
LogwrtResult = XLogCtl->LogwrtResult; LogwrtResult = XLogCtl->LogwrtResult;
if (!XLByteLE(WriteRqstPtr, LogwrtResult.Flush)) if (WriteRqstPtr > LogwrtResult.Flush)
{ {
XLogwrtRqst WriteRqst; XLogwrtRqst WriteRqst;
...@@ -2137,7 +2137,7 @@ XLogNeedsFlush(XLogRecPtr record) ...@@ -2137,7 +2137,7 @@ XLogNeedsFlush(XLogRecPtr record)
if (RecoveryInProgress()) if (RecoveryInProgress())
{ {
/* Quick exit if already known updated */ /* Quick exit if already known updated */
if (XLByteLE(record, minRecoveryPoint) || !updateMinRecoveryPoint) if (record <= minRecoveryPoint || !updateMinRecoveryPoint)
return false; return false;
/* /*
...@@ -2160,14 +2160,14 @@ XLogNeedsFlush(XLogRecPtr record) ...@@ -2160,14 +2160,14 @@ XLogNeedsFlush(XLogRecPtr record)
updateMinRecoveryPoint = false; updateMinRecoveryPoint = false;
/* check again */ /* check again */
if (XLByteLE(record, minRecoveryPoint) || !updateMinRecoveryPoint) if (record <= minRecoveryPoint || !updateMinRecoveryPoint)
return false; return false;
else else
return true; return true;
} }
/* Quick exit if already known flushed */ /* Quick exit if already known flushed */
if (XLByteLE(record, LogwrtResult.Flush)) if (record <= LogwrtResult.Flush)
return false; return false;
/* read LogwrtResult and update local state */ /* read LogwrtResult and update local state */
...@@ -2181,7 +2181,7 @@ XLogNeedsFlush(XLogRecPtr record) ...@@ -2181,7 +2181,7 @@ XLogNeedsFlush(XLogRecPtr record)
} }
/* check again */ /* check again */
if (XLByteLE(record, LogwrtResult.Flush)) if (record <= LogwrtResult.Flush)
return false; return false;
return true; return true;
...@@ -3489,7 +3489,7 @@ retry: ...@@ -3489,7 +3489,7 @@ retry:
do do
{ {
/* Calculate pointer to beginning of next page */ /* Calculate pointer to beginning of next page */
XLByteAdvance(pagelsn, XLOG_BLCKSZ); pagelsn += XLOG_BLCKSZ;
/* Wait for the next page to become available */ /* Wait for the next page to become available */
if (!XLogPageRead(&pagelsn, emode, false, false)) if (!XLogPageRead(&pagelsn, emode, false, false))
return NULL; return NULL;
...@@ -3674,7 +3674,7 @@ ValidXLogPageHeader(XLogPageHeader hdr, int emode, bool segmentonly) ...@@ -3674,7 +3674,7 @@ ValidXLogPageHeader(XLogPageHeader hdr, int emode, bool segmentonly)
return false; return false;
} }
if (!XLByteEQ(hdr->xlp_pageaddr, recaddr)) if (hdr->xlp_pageaddr != recaddr)
{ {
ereport(emode_for_corrupt_record(emode, recaddr), ereport(emode_for_corrupt_record(emode, recaddr),
(errmsg("unexpected pageaddr %X/%X in log segment %s, offset %u", (errmsg("unexpected pageaddr %X/%X in log segment %s, offset %u",
...@@ -3785,7 +3785,7 @@ ValidXLogRecordHeader(XLogRecPtr *RecPtr, XLogRecord *record, int emode, ...@@ -3785,7 +3785,7 @@ ValidXLogRecordHeader(XLogRecPtr *RecPtr, XLogRecord *record, int emode,
* We can't exactly verify the prev-link, but surely it should be less * We can't exactly verify the prev-link, but surely it should be less
* than the record's own address. * than the record's own address.
*/ */
if (!XLByteLT(record->xl_prev, *RecPtr)) if (!(record->xl_prev < *RecPtr))
{ {
ereport(emode_for_corrupt_record(emode, *RecPtr), ereport(emode_for_corrupt_record(emode, *RecPtr),
(errmsg("record with incorrect prev-link %X/%X at %X/%X", (errmsg("record with incorrect prev-link %X/%X at %X/%X",
...@@ -3801,7 +3801,7 @@ ValidXLogRecordHeader(XLogRecPtr *RecPtr, XLogRecord *record, int emode, ...@@ -3801,7 +3801,7 @@ ValidXLogRecordHeader(XLogRecPtr *RecPtr, XLogRecord *record, int emode,
* check guards against torn WAL pages where a stale but valid-looking * check guards against torn WAL pages where a stale but valid-looking
* WAL record starts on a sector boundary. * WAL record starts on a sector boundary.
*/ */
if (!XLByteEQ(record->xl_prev, ReadRecPtr)) if (record->xl_prev != ReadRecPtr)
{ {
ereport(emode_for_corrupt_record(emode, *RecPtr), ereport(emode_for_corrupt_record(emode, *RecPtr),
(errmsg("record with incorrect prev-link %X/%X at %X/%X", (errmsg("record with incorrect prev-link %X/%X at %X/%X",
...@@ -3873,7 +3873,7 @@ rescanLatestTimeLine(void) ...@@ -3873,7 +3873,7 @@ rescanLatestTimeLine(void)
* next timeline was forked off from it *after* the current recovery * next timeline was forked off from it *after* the current recovery
* location. * location.
*/ */
if (XLByteLT(currentTle->end, EndRecPtr)) if (currentTle->end < EndRecPtr)
{ {
ereport(LOG, ereport(LOG,
(errmsg("new timeline %u forked off current database system timeline %u before current recovery point %X/%X", (errmsg("new timeline %u forked off current database system timeline %u before current recovery point %X/%X",
...@@ -5438,7 +5438,7 @@ StartupXLOG(void) ...@@ -5438,7 +5438,7 @@ StartupXLOG(void)
* backup_label around that references a WAL segment that's * backup_label around that references a WAL segment that's
* already been archived. * already been archived.
*/ */
if (XLByteLT(checkPoint.redo, checkPointLoc)) if (checkPoint.redo < checkPointLoc)
{ {
if (!ReadRecord(&(checkPoint.redo), LOG, false)) if (!ReadRecord(&(checkPoint.redo), LOG, false))
ereport(FATAL, ereport(FATAL,
...@@ -5539,7 +5539,7 @@ StartupXLOG(void) ...@@ -5539,7 +5539,7 @@ StartupXLOG(void)
RedoRecPtr = XLogCtl->Insert.RedoRecPtr = checkPoint.redo; RedoRecPtr = XLogCtl->Insert.RedoRecPtr = checkPoint.redo;
if (XLByteLT(RecPtr, checkPoint.redo)) if (RecPtr < checkPoint.redo)
ereport(PANIC, ereport(PANIC,
(errmsg("invalid redo in checkpoint record"))); (errmsg("invalid redo in checkpoint record")));
...@@ -5548,7 +5548,7 @@ StartupXLOG(void) ...@@ -5548,7 +5548,7 @@ StartupXLOG(void)
* have been a clean shutdown and we did not have a recovery.conf file, * have been a clean shutdown and we did not have a recovery.conf file,
* then assume no recovery needed. * then assume no recovery needed.
*/ */
if (XLByteLT(checkPoint.redo, RecPtr)) if (checkPoint.redo < RecPtr)
{ {
if (wasShutdown) if (wasShutdown)
ereport(PANIC, ereport(PANIC,
...@@ -5593,7 +5593,7 @@ StartupXLOG(void) ...@@ -5593,7 +5593,7 @@ StartupXLOG(void)
if (InArchiveRecovery) if (InArchiveRecovery)
{ {
/* initialize minRecoveryPoint if not set yet */ /* initialize minRecoveryPoint if not set yet */
if (XLByteLT(ControlFile->minRecoveryPoint, checkPoint.redo)) if (ControlFile->minRecoveryPoint < checkPoint.redo)
{ {
ControlFile->minRecoveryPoint = checkPoint.redo; ControlFile->minRecoveryPoint = checkPoint.redo;
ControlFile->minRecoveryPointTLI = checkPoint.ThisTimeLineID; ControlFile->minRecoveryPointTLI = checkPoint.ThisTimeLineID;
...@@ -5797,7 +5797,7 @@ StartupXLOG(void) ...@@ -5797,7 +5797,7 @@ StartupXLOG(void)
* Find the first record that logically follows the checkpoint --- it * Find the first record that logically follows the checkpoint --- it
* might physically precede it, though. * might physically precede it, though.
*/ */
if (XLByteLT(checkPoint.redo, RecPtr)) if (checkPoint.redo < RecPtr)
{ {
/* back up to find the record */ /* back up to find the record */
record = ReadRecord(&(checkPoint.redo), PANIC, false); record = ReadRecord(&(checkPoint.redo), PANIC, false);
...@@ -6048,7 +6048,7 @@ StartupXLOG(void) ...@@ -6048,7 +6048,7 @@ StartupXLOG(void)
* advanced beyond the WAL we processed. * advanced beyond the WAL we processed.
*/ */
if (InRecovery && if (InRecovery &&
(XLByteLT(EndOfLog, minRecoveryPoint) || (EndOfLog < minRecoveryPoint ||
!XLogRecPtrIsInvalid(ControlFile->backupStartPoint))) !XLogRecPtrIsInvalid(ControlFile->backupStartPoint)))
{ {
if (reachedStopPoint) if (reachedStopPoint)
...@@ -6377,7 +6377,7 @@ CheckRecoveryConsistency(void) ...@@ -6377,7 +6377,7 @@ CheckRecoveryConsistency(void)
* Have we reached the point where our base backup was completed? * Have we reached the point where our base backup was completed?
*/ */
if (!XLogRecPtrIsInvalid(ControlFile->backupEndPoint) && if (!XLogRecPtrIsInvalid(ControlFile->backupEndPoint) &&
XLByteLE(ControlFile->backupEndPoint, EndRecPtr)) ControlFile->backupEndPoint <= EndRecPtr)
{ {
/* /*
* We have reached the end of base backup, as indicated by pg_control. * We have reached the end of base backup, as indicated by pg_control.
...@@ -6390,7 +6390,7 @@ CheckRecoveryConsistency(void) ...@@ -6390,7 +6390,7 @@ CheckRecoveryConsistency(void)
LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); LWLockAcquire(ControlFileLock, LW_EXCLUSIVE);
if (XLByteLT(ControlFile->minRecoveryPoint, EndRecPtr)) if (ControlFile->minRecoveryPoint < EndRecPtr)
ControlFile->minRecoveryPoint = EndRecPtr; ControlFile->minRecoveryPoint = EndRecPtr;
ControlFile->backupStartPoint = InvalidXLogRecPtr; ControlFile->backupStartPoint = InvalidXLogRecPtr;
...@@ -6409,7 +6409,7 @@ CheckRecoveryConsistency(void) ...@@ -6409,7 +6409,7 @@ CheckRecoveryConsistency(void)
* consistent yet. * consistent yet.
*/ */
if (!reachedConsistency && !ControlFile->backupEndRequired && if (!reachedConsistency && !ControlFile->backupEndRequired &&
XLByteLE(minRecoveryPoint, XLogCtl->lastReplayedEndRecPtr) && minRecoveryPoint <= XLogCtl->lastReplayedEndRecPtr &&
XLogRecPtrIsInvalid(ControlFile->backupStartPoint)) XLogRecPtrIsInvalid(ControlFile->backupStartPoint))
{ {
/* /*
...@@ -6717,7 +6717,7 @@ GetRedoRecPtr(void) ...@@ -6717,7 +6717,7 @@ GetRedoRecPtr(void)
volatile XLogCtlData *xlogctl = XLogCtl; volatile XLogCtlData *xlogctl = XLogCtl;
SpinLockAcquire(&xlogctl->info_lck); SpinLockAcquire(&xlogctl->info_lck);
Assert(XLByteLE(RedoRecPtr, xlogctl->Insert.RedoRecPtr)); Assert(RedoRecPtr <= xlogctl->Insert.RedoRecPtr);
RedoRecPtr = xlogctl->Insert.RedoRecPtr; RedoRecPtr = xlogctl->Insert.RedoRecPtr;
SpinLockRelease(&xlogctl->info_lck); SpinLockRelease(&xlogctl->info_lck);
...@@ -7309,7 +7309,7 @@ CreateCheckPoint(int flags) ...@@ -7309,7 +7309,7 @@ CreateCheckPoint(int flags)
* We now have ProcLastRecPtr = start of actual checkpoint record, recptr * We now have ProcLastRecPtr = start of actual checkpoint record, recptr
* = end of actual checkpoint record. * = end of actual checkpoint record.
*/ */
if (shutdown && !XLByteEQ(checkPoint.redo, ProcLastRecPtr)) if (shutdown && checkPoint.redo != ProcLastRecPtr)
ereport(PANIC, ereport(PANIC,
(errmsg("concurrent transaction log activity while database system is shutting down"))); (errmsg("concurrent transaction log activity while database system is shutting down")));
...@@ -7542,7 +7542,7 @@ CreateRestartPoint(int flags) ...@@ -7542,7 +7542,7 @@ CreateRestartPoint(int flags)
* side-effect. * side-effect.
*/ */
if (XLogRecPtrIsInvalid(lastCheckPointRecPtr) || if (XLogRecPtrIsInvalid(lastCheckPointRecPtr) ||
XLByteLE(lastCheckPoint.redo, ControlFile->checkPointCopy.redo)) lastCheckPoint.redo <= ControlFile->checkPointCopy.redo)
{ {
ereport(DEBUG2, ereport(DEBUG2,
(errmsg("skipping restartpoint, already performed at %X/%X", (errmsg("skipping restartpoint, already performed at %X/%X",
...@@ -7605,7 +7605,7 @@ CreateRestartPoint(int flags) ...@@ -7605,7 +7605,7 @@ CreateRestartPoint(int flags)
*/ */
LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); LWLockAcquire(ControlFileLock, LW_EXCLUSIVE);
if (ControlFile->state == DB_IN_ARCHIVE_RECOVERY && if (ControlFile->state == DB_IN_ARCHIVE_RECOVERY &&
XLByteLT(ControlFile->checkPointCopy.redo, lastCheckPoint.redo)) ControlFile->checkPointCopy.redo < lastCheckPoint.redo)
{ {
ControlFile->prevCheckPoint = ControlFile->checkPoint; ControlFile->prevCheckPoint = ControlFile->checkPoint;
ControlFile->checkPoint = lastCheckPointRecPtr; ControlFile->checkPoint = lastCheckPointRecPtr;
...@@ -7944,7 +7944,7 @@ checkTimeLineSwitch(XLogRecPtr lsn, TimeLineID newTLI) ...@@ -7944,7 +7944,7 @@ checkTimeLineSwitch(XLogRecPtr lsn, TimeLineID newTLI)
* new timeline. * new timeline.
*/ */
if (!XLogRecPtrIsInvalid(minRecoveryPoint) && if (!XLogRecPtrIsInvalid(minRecoveryPoint) &&
XLByteLT(lsn, minRecoveryPoint) && lsn < minRecoveryPoint &&
newTLI > minRecoveryPointTLI) newTLI > minRecoveryPointTLI)
ereport(PANIC, ereport(PANIC,
(errmsg("unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u", (errmsg("unexpected timeline ID %u in checkpoint record, before reaching minimum recovery point %X/%X on timeline %u",
...@@ -8143,7 +8143,7 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record) ...@@ -8143,7 +8143,7 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record)
memcpy(&startpoint, XLogRecGetData(record), sizeof(startpoint)); memcpy(&startpoint, XLogRecGetData(record), sizeof(startpoint));
if (XLByteEQ(ControlFile->backupStartPoint, startpoint)) if (ControlFile->backupStartPoint == startpoint)
{ {
/* /*
* We have reached the end of base backup, the point where * We have reached the end of base backup, the point where
...@@ -8156,7 +8156,7 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record) ...@@ -8156,7 +8156,7 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record)
LWLockAcquire(ControlFileLock, LW_EXCLUSIVE); LWLockAcquire(ControlFileLock, LW_EXCLUSIVE);
if (XLByteLT(ControlFile->minRecoveryPoint, lsn)) if (ControlFile->minRecoveryPoint < lsn)
{ {
ControlFile->minRecoveryPoint = lsn; ControlFile->minRecoveryPoint = lsn;
ControlFile->minRecoveryPointTLI = ThisTimeLineID; ControlFile->minRecoveryPointTLI = ThisTimeLineID;
...@@ -8191,7 +8191,7 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record) ...@@ -8191,7 +8191,7 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record)
*/ */
minRecoveryPoint = ControlFile->minRecoveryPoint; minRecoveryPoint = ControlFile->minRecoveryPoint;
minRecoveryPointTLI = ControlFile->minRecoveryPointTLI; minRecoveryPointTLI = ControlFile->minRecoveryPointTLI;
if (minRecoveryPoint != 0 && XLByteLT(minRecoveryPoint, lsn)) if (minRecoveryPoint != 0 && minRecoveryPoint < lsn)
{ {
ControlFile->minRecoveryPoint = lsn; ControlFile->minRecoveryPoint = lsn;
ControlFile->minRecoveryPointTLI = ThisTimeLineID; ControlFile->minRecoveryPointTLI = ThisTimeLineID;
...@@ -8219,7 +8219,7 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record) ...@@ -8219,7 +8219,7 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record)
if (!fpw) if (!fpw)
{ {
SpinLockAcquire(&xlogctl->info_lck); SpinLockAcquire(&xlogctl->info_lck);
if (XLByteLT(xlogctl->lastFpwDisableRecPtr, ReadRecPtr)) if (xlogctl->lastFpwDisableRecPtr < ReadRecPtr)
xlogctl->lastFpwDisableRecPtr = ReadRecPtr; xlogctl->lastFpwDisableRecPtr = ReadRecPtr;
SpinLockRelease(&xlogctl->info_lck); SpinLockRelease(&xlogctl->info_lck);
} }
...@@ -8584,7 +8584,7 @@ do_pg_start_backup(const char *backupidstr, bool fast, char **labelfile) ...@@ -8584,7 +8584,7 @@ do_pg_start_backup(const char *backupidstr, bool fast, char **labelfile)
recptr = xlogctl->lastFpwDisableRecPtr; recptr = xlogctl->lastFpwDisableRecPtr;
SpinLockRelease(&xlogctl->info_lck); SpinLockRelease(&xlogctl->info_lck);
if (!checkpointfpw || XLByteLE(startpoint, recptr)) if (!checkpointfpw || startpoint <= recptr)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("WAL generated with full_page_writes=off was replayed " errmsg("WAL generated with full_page_writes=off was replayed "
...@@ -8616,7 +8616,7 @@ do_pg_start_backup(const char *backupidstr, bool fast, char **labelfile) ...@@ -8616,7 +8616,7 @@ do_pg_start_backup(const char *backupidstr, bool fast, char **labelfile)
* either because only few buffers have been dirtied yet. * either because only few buffers have been dirtied yet.
*/ */
LWLockAcquire(WALInsertLock, LW_SHARED); LWLockAcquire(WALInsertLock, LW_SHARED);
if (XLByteLT(XLogCtl->Insert.lastBackupStart, startpoint)) if (XLogCtl->Insert.lastBackupStart < startpoint)
{ {
XLogCtl->Insert.lastBackupStart = startpoint; XLogCtl->Insert.lastBackupStart = startpoint;
gotUniqueStartpoint = true; gotUniqueStartpoint = true;
...@@ -8933,7 +8933,7 @@ do_pg_stop_backup(char *labelfile, bool waitforarchive) ...@@ -8933,7 +8933,7 @@ do_pg_stop_backup(char *labelfile, bool waitforarchive)
recptr = xlogctl->lastFpwDisableRecPtr; recptr = xlogctl->lastFpwDisableRecPtr;
SpinLockRelease(&xlogctl->info_lck); SpinLockRelease(&xlogctl->info_lck);
if (XLByteLE(startpoint, recptr)) if (startpoint <= recptr)
ereport(ERROR, ereport(ERROR,
(errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE), (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
errmsg("WAL generated with full_page_writes=off was replayed " errmsg("WAL generated with full_page_writes=off was replayed "
...@@ -9402,7 +9402,7 @@ XLogPageRead(XLogRecPtr *RecPtr, int emode, bool fetching_ckpt, ...@@ -9402,7 +9402,7 @@ XLogPageRead(XLogRecPtr *RecPtr, int emode, bool fetching_ckpt,
retry: retry:
/* See if we need to retrieve more data */ /* See if we need to retrieve more data */
if (readFile < 0 || if (readFile < 0 ||
(readSource == XLOG_FROM_STREAM && !XLByteLT(*RecPtr, receivedUpto))) (readSource == XLOG_FROM_STREAM && receivedUpto <= *RecPtr))
{ {
if (StandbyMode) if (StandbyMode)
{ {
...@@ -9772,17 +9772,17 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess, ...@@ -9772,17 +9772,17 @@ WaitForWALToBecomeAvailable(XLogRecPtr RecPtr, bool randAccess,
* When we are behind, XLogReceiptTime will not advance, so the * When we are behind, XLogReceiptTime will not advance, so the
* grace time allotted to conflicting queries will decrease. * grace time allotted to conflicting queries will decrease.
*/ */
if (XLByteLT(RecPtr, receivedUpto)) if (RecPtr < receivedUpto)
havedata = true; havedata = true;
else else
{ {
XLogRecPtr latestChunkStart; XLogRecPtr latestChunkStart;
receivedUpto = GetWalRcvWriteRecPtr(&latestChunkStart, &receiveTLI); receivedUpto = GetWalRcvWriteRecPtr(&latestChunkStart, &receiveTLI);
if (XLByteLT(RecPtr, receivedUpto) && receiveTLI == curFileTLI) if (RecPtr < receivedUpto && receiveTLI == curFileTLI)
{ {
havedata = true; havedata = true;
if (!XLByteLT(RecPtr, latestChunkStart)) if (latestChunkStart <= RecPtr)
{ {
XLogReceiptTime = GetCurrentTimestamp(); XLogReceiptTime = GetCurrentTimestamp();
SetCurrentChunkStartTime(XLogReceiptTime); SetCurrentChunkStartTime(XLogReceiptTime);
...@@ -9884,7 +9884,7 @@ emode_for_corrupt_record(int emode, XLogRecPtr RecPtr) ...@@ -9884,7 +9884,7 @@ emode_for_corrupt_record(int emode, XLogRecPtr RecPtr)
if (readSource == XLOG_FROM_PG_XLOG && emode == LOG) if (readSource == XLOG_FROM_PG_XLOG && emode == LOG)
{ {
if (XLByteEQ(RecPtr, lastComplaint)) if (RecPtr == lastComplaint)
emode = DEBUG1; emode = DEBUG1;
else else
lastComplaint = RecPtr; lastComplaint = RecPtr;
......
...@@ -607,7 +607,7 @@ nextval_internal(Oid relid) ...@@ -607,7 +607,7 @@ nextval_internal(Oid relid)
{ {
XLogRecPtr redoptr = GetRedoRecPtr(); XLogRecPtr redoptr = GetRedoRecPtr();
if (XLByteLE(PageGetLSN(page), redoptr)) if (PageGetLSN(page) <= redoptr)
{ {
/* last update of seq was before checkpoint */ /* last update of seq was before checkpoint */
fetch = log = fetch + SEQ_LOG_VALS; fetch = log = fetch + SEQ_LOG_VALS;
......
...@@ -120,7 +120,7 @@ SyncRepWaitForLSN(XLogRecPtr XactCommitLSN) ...@@ -120,7 +120,7 @@ SyncRepWaitForLSN(XLogRecPtr XactCommitLSN)
* be a low cost check. * be a low cost check.
*/ */
if (!WalSndCtl->sync_standbys_defined || if (!WalSndCtl->sync_standbys_defined ||
XLByteLE(XactCommitLSN, WalSndCtl->lsn[mode])) XactCommitLSN <= WalSndCtl->lsn[mode])
{ {
LWLockRelease(SyncRepLock); LWLockRelease(SyncRepLock);
return; return;
...@@ -287,7 +287,7 @@ SyncRepQueueInsert(int mode) ...@@ -287,7 +287,7 @@ SyncRepQueueInsert(int mode)
* Stop at the queue element that we should after to ensure the queue * Stop at the queue element that we should after to ensure the queue
* is ordered by LSN. * is ordered by LSN.
*/ */
if (XLByteLT(proc->waitLSN, MyProc->waitLSN)) if (proc->waitLSN < MyProc->waitLSN)
break; break;
proc = (PGPROC *) SHMQueuePrev(&(WalSndCtl->SyncRepQueue[mode]), proc = (PGPROC *) SHMQueuePrev(&(WalSndCtl->SyncRepQueue[mode]),
...@@ -428,12 +428,12 @@ SyncRepReleaseWaiters(void) ...@@ -428,12 +428,12 @@ SyncRepReleaseWaiters(void)
* Set the lsn first so that when we wake backends they will release up to * Set the lsn first so that when we wake backends they will release up to
* this location. * this location.
*/ */
if (XLByteLT(walsndctl->lsn[SYNC_REP_WAIT_WRITE], MyWalSnd->write)) if (walsndctl->lsn[SYNC_REP_WAIT_WRITE] < MyWalSnd->write)
{ {
walsndctl->lsn[SYNC_REP_WAIT_WRITE] = MyWalSnd->write; walsndctl->lsn[SYNC_REP_WAIT_WRITE] = MyWalSnd->write;
numwrite = SyncRepWakeQueue(false, SYNC_REP_WAIT_WRITE); numwrite = SyncRepWakeQueue(false, SYNC_REP_WAIT_WRITE);
} }
if (XLByteLT(walsndctl->lsn[SYNC_REP_WAIT_FLUSH], MyWalSnd->flush)) if (walsndctl->lsn[SYNC_REP_WAIT_FLUSH] < MyWalSnd->flush)
{ {
walsndctl->lsn[SYNC_REP_WAIT_FLUSH] = MyWalSnd->flush; walsndctl->lsn[SYNC_REP_WAIT_FLUSH] = MyWalSnd->flush;
numflush = SyncRepWakeQueue(false, SYNC_REP_WAIT_FLUSH); numflush = SyncRepWakeQueue(false, SYNC_REP_WAIT_FLUSH);
...@@ -543,7 +543,7 @@ SyncRepWakeQueue(bool all, int mode) ...@@ -543,7 +543,7 @@ SyncRepWakeQueue(bool all, int mode)
/* /*
* Assume the queue is ordered by LSN * Assume the queue is ordered by LSN
*/ */
if (!all && XLByteLT(walsndctl->lsn[mode], proc->waitLSN)) if (!all && walsndctl->lsn[mode] < proc->waitLSN)
return numprocs; return numprocs;
/* /*
...@@ -640,7 +640,7 @@ SyncRepQueueIsOrderedByLSN(int mode) ...@@ -640,7 +640,7 @@ SyncRepQueueIsOrderedByLSN(int mode)
* Check the queue is ordered by LSN and that multiple procs don't * Check the queue is ordered by LSN and that multiple procs don't
* have matching LSNs * have matching LSNs
*/ */
if (XLByteLE(proc->waitLSN, lastLSN)) if (proc->waitLSN <= lastLSN)
return false; return false;
lastLSN = proc->waitLSN; lastLSN = proc->waitLSN;
......
...@@ -914,7 +914,7 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr) ...@@ -914,7 +914,7 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr)
} }
/* Update state for write */ /* Update state for write */
XLByteAdvance(recptr, byteswritten); recptr += byteswritten;
recvOff += byteswritten; recvOff += byteswritten;
nbytes -= byteswritten; nbytes -= byteswritten;
...@@ -933,7 +933,7 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr) ...@@ -933,7 +933,7 @@ XLogWalRcvWrite(char *buf, Size nbytes, XLogRecPtr recptr)
static void static void
XLogWalRcvFlush(bool dying) XLogWalRcvFlush(bool dying)
{ {
if (XLByteLT(LogstreamResult.Flush, LogstreamResult.Write)) if (LogstreamResult.Flush < LogstreamResult.Write)
{ {
/* use volatile pointer to prevent code rearrangement */ /* use volatile pointer to prevent code rearrangement */
volatile WalRcvData *walrcv = WalRcv; volatile WalRcvData *walrcv = WalRcv;
...@@ -944,7 +944,7 @@ XLogWalRcvFlush(bool dying) ...@@ -944,7 +944,7 @@ XLogWalRcvFlush(bool dying)
/* Update shared-memory status */ /* Update shared-memory status */
SpinLockAcquire(&walrcv->mutex); SpinLockAcquire(&walrcv->mutex);
if (XLByteLT(walrcv->receivedUpto, LogstreamResult.Flush)) if (walrcv->receivedUpto < LogstreamResult.Flush)
{ {
walrcv->latestChunkStart = walrcv->receivedUpto; walrcv->latestChunkStart = walrcv->receivedUpto;
walrcv->receivedUpto = LogstreamResult.Flush; walrcv->receivedUpto = LogstreamResult.Flush;
...@@ -1016,8 +1016,8 @@ XLogWalRcvSendReply(bool force, bool requestReply) ...@@ -1016,8 +1016,8 @@ XLogWalRcvSendReply(bool force, bool requestReply)
* probably OK. * probably OK.
*/ */
if (!force if (!force
&& XLByteEQ(writePtr, LogstreamResult.Write) && writePtr == LogstreamResult.Write
&& XLByteEQ(flushPtr, LogstreamResult.Flush) && flushPtr == LogstreamResult.Flush
&& !TimestampDifferenceExceeds(sendTime, now, && !TimestampDifferenceExceeds(sendTime, now,
wal_receiver_status_interval * 1000)) wal_receiver_status_interval * 1000))
return; return;
...@@ -1126,7 +1126,7 @@ ProcessWalSndrMessage(XLogRecPtr walEnd, TimestampTz sendTime) ...@@ -1126,7 +1126,7 @@ ProcessWalSndrMessage(XLogRecPtr walEnd, TimestampTz sendTime)
/* Update shared-memory status */ /* Update shared-memory status */
SpinLockAcquire(&walrcv->mutex); SpinLockAcquire(&walrcv->mutex);
if (XLByteLT(walrcv->latestWalEnd, walEnd)) if (walrcv->latestWalEnd < walEnd)
walrcv->latestWalEndTime = sendTime; walrcv->latestWalEndTime = sendTime;
walrcv->latestWalEnd = walEnd; walrcv->latestWalEnd = walEnd;
walrcv->lastMsgSendTime = sendTime; walrcv->lastMsgSendTime = sendTime;
......
...@@ -326,7 +326,7 @@ GetReplicationApplyDelay(void) ...@@ -326,7 +326,7 @@ GetReplicationApplyDelay(void)
replayPtr = GetXLogReplayRecPtr(NULL); replayPtr = GetXLogReplayRecPtr(NULL);
if (XLByteEQ(receivePtr, replayPtr)) if (receivePtr == replayPtr)
return 0; return 0;
TimestampDifference(GetCurrentChunkReplayStartTime(), TimestampDifference(GetCurrentChunkReplayStartTime(),
......
...@@ -471,7 +471,7 @@ StartReplication(StartReplicationCmd *cmd) ...@@ -471,7 +471,7 @@ StartReplication(StartReplicationCmd *cmd)
* WAL segment. * WAL segment.
*/ */
if (!XLogRecPtrIsInvalid(switchpoint) && if (!XLogRecPtrIsInvalid(switchpoint) &&
XLByteLT(switchpoint, cmd->startpoint)) switchpoint < cmd->startpoint)
{ {
ereport(ERROR, ereport(ERROR,
(errmsg("requested starting point %X/%X on timeline %u is not in this server's history", (errmsg("requested starting point %X/%X on timeline %u is not in this server's history",
...@@ -497,7 +497,7 @@ StartReplication(StartReplicationCmd *cmd) ...@@ -497,7 +497,7 @@ StartReplication(StartReplicationCmd *cmd)
/* If there is nothing to stream, don't even enter COPY mode */ /* If there is nothing to stream, don't even enter COPY mode */
if (!sendTimeLineIsHistoric || if (!sendTimeLineIsHistoric ||
XLByteLT(cmd->startpoint, sendTimeLineValidUpto)) cmd->startpoint < sendTimeLineValidUpto)
{ {
/* /*
* When we first start replication the standby will be behind the primary. * When we first start replication the standby will be behind the primary.
...@@ -520,7 +520,7 @@ StartReplication(StartReplicationCmd *cmd) ...@@ -520,7 +520,7 @@ StartReplication(StartReplicationCmd *cmd)
* Don't allow a request to stream from a future point in WAL that * Don't allow a request to stream from a future point in WAL that
* hasn't been flushed to disk in this server yet. * hasn't been flushed to disk in this server yet.
*/ */
if (XLByteLT(FlushPtr, cmd->startpoint)) if (FlushPtr < cmd->startpoint)
{ {
ereport(ERROR, ereport(ERROR,
(errmsg("requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X", (errmsg("requested starting point %X/%X is ahead of the WAL flush position of this server %X/%X",
...@@ -1249,7 +1249,7 @@ retry: ...@@ -1249,7 +1249,7 @@ retry:
} }
/* Update state for read */ /* Update state for read */
XLByteAdvance(recptr, readbytes); recptr += readbytes;
sendOff += readbytes; sendOff += readbytes;
nbytes -= readbytes; nbytes -= readbytes;
...@@ -1384,11 +1384,11 @@ XLogSend(bool *caughtup) ...@@ -1384,11 +1384,11 @@ XLogSend(bool *caughtup)
history = readTimeLineHistory(ThisTimeLineID); history = readTimeLineHistory(ThisTimeLineID);
sendTimeLineValidUpto = tliSwitchPoint(sendTimeLine, history); sendTimeLineValidUpto = tliSwitchPoint(sendTimeLine, history);
Assert(XLByteLE(sentPtr, sendTimeLineValidUpto)); Assert(sentPtr <= sendTimeLineValidUpto);
list_free_deep(history); list_free_deep(history);
/* the switchpoint should be >= current send pointer */ /* the current send pointer should be <= the switchpoint */
if (!XLByteLE(sentPtr, sendTimeLineValidUpto)) if (!(sentPtr <= sendTimeLineValidUpto))
elog(ERROR, "server switched off timeline %u at %X/%X, but walsender already streamed up to %X/%X", elog(ERROR, "server switched off timeline %u at %X/%X, but walsender already streamed up to %X/%X",
sendTimeLine, sendTimeLine,
(uint32) (sendTimeLineValidUpto >> 32), (uint32) (sendTimeLineValidUpto >> 32),
...@@ -1420,7 +1420,7 @@ XLogSend(bool *caughtup) ...@@ -1420,7 +1420,7 @@ XLogSend(bool *caughtup)
* If this is a historic timeline and we've reached the point where we * If this is a historic timeline and we've reached the point where we
* forked to the next timeline, stop streaming. * forked to the next timeline, stop streaming.
*/ */
if (sendTimeLineIsHistoric && XLByteLE(sendTimeLineValidUpto, sentPtr)) if (sendTimeLineIsHistoric && sendTimeLineValidUpto <= sentPtr)
{ {
/* close the current file. */ /* close the current file. */
if (sendFile >= 0) if (sendFile >= 0)
...@@ -1436,8 +1436,8 @@ XLogSend(bool *caughtup) ...@@ -1436,8 +1436,8 @@ XLogSend(bool *caughtup)
} }
/* Do we have any work to do? */ /* Do we have any work to do? */
Assert(XLByteLE(sentPtr, SendRqstPtr)); Assert(sentPtr <= SendRqstPtr);
if (XLByteLE(SendRqstPtr, sentPtr)) if (SendRqstPtr <= sentPtr)
{ {
*caughtup = true; *caughtup = true;
return; return;
...@@ -1456,10 +1456,10 @@ XLogSend(bool *caughtup) ...@@ -1456,10 +1456,10 @@ XLogSend(bool *caughtup)
*/ */
startptr = sentPtr; startptr = sentPtr;
endptr = startptr; endptr = startptr;
XLByteAdvance(endptr, MAX_SEND_SIZE); endptr += MAX_SEND_SIZE;
/* if we went beyond SendRqstPtr, back off */ /* if we went beyond SendRqstPtr, back off */
if (XLByteLE(SendRqstPtr, endptr)) if (SendRqstPtr <= endptr)
{ {
endptr = SendRqstPtr; endptr = SendRqstPtr;
if (sendTimeLineIsHistoric) if (sendTimeLineIsHistoric)
...@@ -1968,7 +1968,7 @@ GetOldestWALSendPointer(void) ...@@ -1968,7 +1968,7 @@ GetOldestWALSendPointer(void)
if (recptr.xlogid == 0 && recptr.xrecoff == 0) if (recptr.xlogid == 0 && recptr.xrecoff == 0)
continue; continue;
if (!found || XLByteLT(recptr, oldest)) if (!found || recptr < oldest)
oldest = recptr; oldest = recptr;
found = true; found = true;
} }
......
...@@ -636,7 +636,7 @@ ReceiveXlogStream(PGconn *conn, XLogRecPtr startpos, uint32 timeline, ...@@ -636,7 +636,7 @@ ReceiveXlogStream(PGconn *conn, XLogRecPtr startpos, uint32 timeline,
/* Write was successful, advance our position */ /* Write was successful, advance our position */
bytes_written += bytes_to_write; bytes_written += bytes_to_write;
bytes_left -= bytes_to_write; bytes_left -= bytes_to_write;
XLByteAdvance(blockpos, bytes_to_write); blockpos += bytes_to_write;
xlogoff += bytes_to_write; xlogoff += bytes_to_write;
/* Did we reach the end of a WAL segment? */ /* Did we reach the end of a WAL segment? */
......
...@@ -28,20 +28,6 @@ typedef uint64 XLogRecPtr; ...@@ -28,20 +28,6 @@ typedef uint64 XLogRecPtr;
#define InvalidXLogRecPtr 0 #define InvalidXLogRecPtr 0
#define XLogRecPtrIsInvalid(r) ((r) == InvalidXLogRecPtr) #define XLogRecPtrIsInvalid(r) ((r) == InvalidXLogRecPtr)
/*
* Macros for comparing XLogRecPtrs
*/
#define XLByteLT(a, b) ((a) < (b))
#define XLByteLE(a, b) ((a) <= (b))
#define XLByteEQ(a, b) ((a) == (b))
/*
* Macro for advancing a record pointer by the specified number of bytes.
*/
#define XLByteAdvance(recptr, nbytes) \
(recptr) += nbytes \
/* /*
* XLogSegNo - physical log file sequence number. * XLogSegNo - physical log file sequence number.
*/ */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment