提交 626df6b4 编写于 作者: S Simon Riggs 提交者: Xin Zhang

Remove PageSetTLI and rename pd_tli to pd_checksum

Remove use of PageSetTLI() from all page manipulation functions
and adjust README to indicate change in the way we make changes
to pages. Repurpose those bytes into the pd_checksum field and
explain how that works in comments about page header.

Refactoring ahead of actual feature patch which would make use
of the checksum field, arriving later.

Jeff Davis, with comments and doc changes by Simon Riggs
Direction suggested by Robert Haas; many others providing
review comments.

(cherry picked from bb7cc262)
上级 71752344
......@@ -164,7 +164,7 @@ page_header(PG_FUNCTION_ARGS)
snprintf(lsnchar, sizeof(lsnchar), "%X/%X", lsn.xlogid, lsn.xrecoff);
values[0] = DirectFunctionCall1(textin, CStringGetDatum(lsnchar));
values[1] = UInt16GetDatum(PageGetTLI(page));
values[1] = UInt16GetDatum(page->pd_checksum);
values[2] = UInt16GetDatum(page->pd_flags);
values[3] = UInt16GetDatum(page->pd_lower);
values[4] = UInt16GetDatum(page->pd_upper);
......
......@@ -823,7 +823,6 @@ _bitmap_log_newpage(Relation rel, uint8 info, Buffer buf)
recptr = XLogInsert(RM_BITMAP_ID, info, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
/*
......@@ -857,7 +856,6 @@ _bitmap_log_metapage(Relation rel, Page page)
recptr = XLogInsert(RM_BITMAP_ID, XLOG_BITMAP_INSERT_META, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
pfree(xlMeta);
}
......@@ -894,7 +892,6 @@ _bitmap_log_bitmap_lastwords(Relation rel, Buffer lovBuffer,
rdata);
PageSetLSN(BufferGetPage(lovBuffer), recptr);
PageSetTLI(BufferGetPage(lovBuffer), ThisTimeLineID);
}
/*
......@@ -935,11 +932,9 @@ _bitmap_log_lovitem(Relation rel, Buffer lovBuffer, OffsetNumber offset,
Page metapage = BufferGetPage(metabuf);
PageSetLSN(metapage, recptr);
PageSetTLI(metapage, ThisTimeLineID);
}
PageSetLSN(lovPage, recptr);
PageSetTLI(lovPage, ThisTimeLineID);
elog(DEBUG1, "Insert a new lovItem at (blockno, offset): (%d,%d)",
BufferGetBlockNumber(lovBuffer), offset);
......@@ -1023,10 +1018,8 @@ _bitmap_log_bitmapwords(Relation rel, Buffer bitmapBuffer, Buffer lovBuffer,
recptr = XLogInsert(RM_BITMAP_ID, XLOG_BITMAP_INSERT_WORDS, rdata);
PageSetLSN(bitmapPage, recptr);
PageSetTLI(bitmapPage, ThisTimeLineID);
PageSetLSN(lovPage, recptr);
PageSetTLI(lovPage, ThisTimeLineID);
pfree(xlBitmapWords);
}
......@@ -1070,7 +1063,6 @@ _bitmap_log_updateword(Relation rel, Buffer bitmapBuffer, int word_no)
recptr = XLogInsert(RM_BITMAP_ID, XLOG_BITMAP_UPDATEWORD, rdata);
PageSetLSN(bitmapPage, recptr);
PageSetTLI(bitmapPage, ThisTimeLineID);
}
......@@ -1153,12 +1145,10 @@ _bitmap_log_updatewords(Relation rel,
recptr = XLogInsert(RM_BITMAP_ID, XLOG_BITMAP_UPDATEWORDS, rdata);
PageSetLSN(firstPage, recptr);
PageSetTLI(firstPage, ThisTimeLineID);
if (BufferIsValid(secondBuffer))
{
PageSetLSN(secondPage, recptr);
PageSetTLI(secondPage, ThisTimeLineID);
}
if (new_lastpage)
......@@ -1166,7 +1156,6 @@ _bitmap_log_updatewords(Relation rel,
Page lovPage = BufferGetPage(lovBuffer);
PageSetLSN(lovPage, recptr);
PageSetTLI(lovPage, ThisTimeLineID);
}
}
......
......@@ -133,7 +133,6 @@ _bitmap_xlog_newpage(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
_bitmap_wrtbuf(buffer);
}
else
......@@ -230,7 +229,6 @@ _bitmap_xlog_insert_lovitem(XLogRecPtr lsn, XLogRecord *record)
RelationGetRelationName(reln))));
PageSetLSN(lovPage, lsn);
PageSetTLI(lovPage, ThisTimeLineID);
_bitmap_wrtbuf(lovBuffer);
}
......@@ -259,7 +257,6 @@ _bitmap_xlog_insert_lovitem(XLogRecPtr lsn, XLogRecord *record)
metapage->bm_lov_lastpage = xlrec->bm_lov_blkno;
PageSetLSN(BufferGetPage(metabuf), lsn);
PageSetTLI(BufferGetPage(metabuf), ThisTimeLineID);
_bitmap_wrtbuf(metabuf);
}
......@@ -313,7 +310,6 @@ _bitmap_xlog_insert_meta(XLogRecPtr lsn, XLogRecord *record)
metapage->bm_lov_lastpage = xlrec->bm_lov_lastpage;
PageSetLSN(mp, lsn);
PageSetTLI(mp, ThisTimeLineID);
_bitmap_wrtbuf(metabuf);
}
else
......@@ -372,7 +368,6 @@ _bitmap_xlog_insert_bitmap_lastwords(XLogRecPtr lsn,
lovItem->bm_last_tid_location = xlrec->bm_last_tid_location;
PageSetLSN(lovPage, lsn);
PageSetTLI(lovPage, ThisTimeLineID);
_bitmap_wrtbuf(lovBuffer);
}
......@@ -495,7 +490,6 @@ _bitmap_xlog_insert_bitmapwords(XLogRecPtr lsn, XLogRecord *record)
_bitmap_init_bitmappage(reln, nextBuffer);
PageSetLSN(nextPage, lsn);
PageSetTLI(nextPage, ThisTimeLineID);
_bitmap_wrtbuf(nextBuffer);
......@@ -503,7 +497,6 @@ _bitmap_xlog_insert_bitmapwords(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(bitmapPage, lsn);
PageSetTLI(bitmapPage, ThisTimeLineID);
_bitmap_wrtbuf(bitmapBuffer);
......@@ -543,7 +536,6 @@ _bitmap_xlog_insert_bitmapwords(XLogRecPtr lsn, XLogRecord *record)
lovItem->bm_lov_head = lovItem->bm_lov_tail;
PageSetLSN(lovPage, lsn);
PageSetTLI(lovPage, ThisTimeLineID);
_bitmap_wrtbuf(lovBuffer);
......@@ -555,7 +547,6 @@ _bitmap_xlog_insert_bitmapwords(XLogRecPtr lsn, XLogRecord *record)
lovItem->bm_lov_tail = lovItem->bm_lov_head;
PageSetLSN(lovPage, lsn);
PageSetTLI(lovPage, ThisTimeLineID);
_bitmap_wrtbuf(lovBuffer);
}
......@@ -614,7 +605,6 @@ _bitmap_xlog_updateword(XLogRecPtr lsn, XLogRecord *record)
bitmap->hwords[xlrec->bm_word_no/BM_HRL_WORD_SIZE] = xlrec->bm_hword;
PageSetLSN(bitmapPage, lsn);
PageSetTLI(bitmapPage, ThisTimeLineID);
_bitmap_wrtbuf(bitmapBuffer);
}
......@@ -684,7 +674,6 @@ _bitmap_xlog_updatewords(XLogRecPtr lsn, XLogRecord *record)
firstOpaque->bm_bitmap_next = xlrec->bm_next_blkno;
PageSetLSN(firstPage, lsn);
PageSetTLI(firstPage, ThisTimeLineID);
_bitmap_wrtbuf(firstBuffer);
}
else
......@@ -714,7 +703,6 @@ _bitmap_xlog_updatewords(XLogRecPtr lsn, XLogRecord *record)
secondOpaque->bm_bitmap_next = xlrec->bm_next_blkno;
PageSetLSN(secondPage, lsn);
PageSetTLI(secondPage, ThisTimeLineID);
_bitmap_wrtbuf(secondBuffer);
}
......@@ -751,7 +739,6 @@ _bitmap_xlog_updatewords(XLogRecPtr lsn, XLogRecord *record)
lovItem->bm_lov_tail = xlrec->bm_second_blkno;
PageSetLSN(lovPage, lsn);
PageSetTLI(lovPage, ThisTimeLineID);
_bitmap_wrtbuf(lovBuffer);
}
......
......@@ -313,7 +313,6 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack)
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_INSERT, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
UnlockReleaseBuffer(stack->buffer);
......@@ -374,11 +373,8 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack)
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_SPLIT, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
PageSetLSN(lpage, recptr);
PageSetTLI(lpage, ThisTimeLineID);
PageSetLSN(rpage, recptr);
PageSetTLI(rpage, ThisTimeLineID);
}
UnlockReleaseBuffer(rbuffer);
......@@ -413,9 +409,7 @@ ginInsertValue(GinBtree btree, GinBtreeStack *stack)
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_SPLIT, rdata);
PageSetLSN(lpage, recptr);
PageSetTLI(lpage, ThisTimeLineID);
PageSetLSN(rpage, recptr);
PageSetTLI(rpage, ThisTimeLineID);
}
UnlockReleaseBuffer(rbuffer);
END_CRIT_SECTION();
......
......@@ -81,8 +81,6 @@ createPostingTree(Relation index, ItemPointerData *items, uint32 nitems)
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_CREATE_PTREE, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
UnlockReleaseBuffer(buffer);
......@@ -301,11 +299,8 @@ ginbuild(PG_FUNCTION_ARGS)
page = BufferGetPage(buffer);
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_CREATE_INDEX, &rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
UnlockReleaseBuffer(buffer);
......
......@@ -149,7 +149,6 @@ xlogVacuumPage(Relation index, Buffer buffer)
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_VACUUM_PAGE, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
static bool
......@@ -349,14 +348,11 @@ ginDeletePage(GinVacuumState *gvs, BlockNumber deleteBlkno, BlockNumber leftBlkn
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_DELETE_PAGE, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
PageSetLSN(parentPage, recptr);
PageSetTLI(parentPage, ThisTimeLineID);
if (leftBlkno != InvalidBlockNumber)
{
page = BufferGetPage(lBuffer);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
}
......
......@@ -92,7 +92,6 @@ ginRedoCreateIndex(XLogRecPtr lsn, XLogRecord *record)
GinInitBuffer(buffer, GIN_LEAF);
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -127,7 +126,6 @@ ginRedoCreatePTree(XLogRecPtr lsn, XLogRecord *record)
GinPageGetOpaque(page)->maxoff = data->nitem;
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -255,7 +253,6 @@ ginRedoInsert(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
......@@ -355,11 +352,9 @@ ginRedoSplit(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(rpage, lsn);
PageSetTLI(rpage, ThisTimeLineID);
MarkBufferDirty(rbuffer);
PageSetLSN(lpage, lsn);
PageSetTLI(lpage, ThisTimeLineID);
MarkBufferDirty(lbuffer);
if (!data->isLeaf && data->updateBlkno != InvalidBlockNumber)
......@@ -384,7 +379,6 @@ ginRedoSplit(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(rootPage, lsn);
PageSetTLI(rootPage, ThisTimeLineID);
MarkBufferDirty(rootBuf);
UnlockReleaseBuffer(rootBuf);
......@@ -454,8 +448,6 @@ ginRedoVacuumPage(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
......@@ -492,7 +484,6 @@ ginRedoDeletePage(XLogRecPtr lsn, XLogRecord *record)
Assert(GinPageIsData(page));
GinPageGetOpaque(page)->flags = GIN_DELETED;
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
......@@ -511,7 +502,6 @@ ginRedoDeletePage(XLogRecPtr lsn, XLogRecord *record)
Assert(!GinPageIsLeaf(page));
PageDeletePostingItem(page, data->parentOffset);
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
......@@ -529,7 +519,6 @@ ginRedoDeletePage(XLogRecPtr lsn, XLogRecord *record)
Assert(GinPageIsData(page));
GinPageGetOpaque(page)->rightlink = data->rightLink;
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
......
......@@ -128,7 +128,6 @@ gistbuild(PG_FUNCTION_ARGS)
recptr = XLogInsert(RM_GIST_ID, XLOG_GIST_CREATE_INDEX, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
else
PageSetLSN(page, GetXLogRecPtrForTemp());
......@@ -429,7 +428,6 @@ gistplacetopage(GISTInsertState *state, GISTSTATE *giststate)
for (ptr = dist; ptr; ptr = ptr->next)
{
PageSetLSN(ptr->page, recptr);
PageSetTLI(ptr->page, ThisTimeLineID);
}
}
else
......@@ -501,7 +499,6 @@ gistplacetopage(GISTInsertState *state, GISTSTATE *giststate)
recptr = XLogInsert(RM_GIST_ID, XLOG_GIST_PAGE_UPDATE, rdata);
PageSetLSN(state->stack->page, recptr);
PageSetTLI(state->stack->page, ThisTimeLineID);
}
else
PageSetLSN(state->stack->page, GetXLogRecPtrForTemp());
......@@ -1060,7 +1057,6 @@ gistnewroot(Relation r, Buffer buffer, IndexTuple *itup, int len, ItemPointer ke
recptr = XLogInsert(RM_GIST_ID, XLOG_GIST_NEW_ROOT, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
else
PageSetLSN(page, GetXLogRecPtrForTemp());
......
......@@ -137,7 +137,6 @@ gistDeleteSubtree(GistVacuum *gv, BlockNumber blkno)
recptr = XLogInsert(RM_GIST_ID, XLOG_GIST_PAGE_DELETE, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
else
PageSetLSN(page, GetXLogRecPtrForTemp());
......@@ -255,7 +254,6 @@ vacuumSplitPage(GistVacuum *gv, Page tempPage, Buffer buffer, IndexTuple *addon,
for (ptr = dist; ptr; ptr = ptr->next)
{
PageSetLSN(BufferGetPage(ptr->buffer), recptr);
PageSetTLI(BufferGetPage(ptr->buffer), ThisTimeLineID);
}
pfree(xlinfo);
......@@ -477,7 +475,6 @@ gistVacuumUpdate(GistVacuum *gv, BlockNumber blkno, bool needunion)
recptr = XLogInsert(RM_GIST_ID, XLOG_GIST_PAGE_UPDATE, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
pfree(xlinfo);
pfree(rdata);
......@@ -823,7 +820,6 @@ gistbulkdelete(PG_FUNCTION_ARGS)
recptr = XLogInsert(RM_GIST_ID, XLOG_GIST_PAGE_UPDATE, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
pfree(xlinfo);
pfree(rdata);
......
......@@ -270,7 +270,6 @@ gistRedoPageUpdateRecord(XLogRecPtr lsn, XLogRecord *record, bool isnewroot)
GistPageGetOpaque(page)->rightlink = InvalidBlockNumber;
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -307,7 +306,6 @@ gistRedoPageDeleteRecord(XLogRecPtr lsn, XLogRecord *record)
GistPageSetDeleted(page);
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -382,7 +380,6 @@ gistRedoPageSplitRecord(XLogRecPtr lsn, XLogRecord *record)
gistfillbuffer(reln, page, newpage->itup, newpage->header->num, FirstOffsetNumber);
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -422,7 +419,6 @@ gistRedoCreateIndex(XLogRecPtr lsn, XLogRecord *record)
GISTInitBuffer(buffer, F_LEAF);
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -835,7 +831,6 @@ gistContinueInsert(gistIncompleteInsert *insert)
for (j = 0; j < numbuffer; j++)
{
PageSetLSN(pages[j], recptr);
PageSetTLI(pages[j], ThisTimeLineID);
}
END_CRIT_SECTION();
......
......@@ -2434,7 +2434,6 @@ heap_insert(Relation relation, HeapTuple tup, CommandId cid,
recptr = XLogInsert_OverrideXid(RM_HEAP_ID, info, rdata, FrozenTransactionId);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
......@@ -2837,7 +2836,6 @@ l1:
recptr = XLogInsert_OverrideXid(RM_HEAP_ID, XLOG_HEAP_DELETE, rdata, xid);
PageSetLSN(dp, recptr);
PageSetTLI(dp, ThisTimeLineID);
}
END_CRIT_SECTION();
......@@ -3459,10 +3457,8 @@ l2:
if (newbuf != buffer)
{
PageSetLSN(BufferGetPage(newbuf), recptr);
PageSetTLI(BufferGetPage(newbuf), ThisTimeLineID);
}
PageSetLSN(BufferGetPage(buffer), recptr);
PageSetTLI(BufferGetPage(buffer), ThisTimeLineID);
}
END_CRIT_SECTION();
......@@ -4172,7 +4168,6 @@ l3:
recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_LOCK, rdata);
PageSetLSN(dp, recptr);
PageSetTLI(dp, ThisTimeLineID);
}
END_CRIT_SECTION();
......@@ -4283,7 +4278,6 @@ heap_inplace_update_internal(Relation relation, HeapTuple tuple, bool freeze)
recptr = XLogInsert_OverrideXid(RM_HEAP_ID, XLOG_HEAP_INPLACE, rdata, FrozenTransactionId);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
......@@ -4660,7 +4654,6 @@ log_heap_newpage(Relation rel,
recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_NEWPAGE, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
END_CRIT_SECTION();
}
......@@ -4970,7 +4963,6 @@ log_newpage_internal(xl_heap_newpage *xlrec, Page page)
if (!PageIsNew(page))
{
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
......@@ -5085,7 +5077,6 @@ heap_xlog_clean(XLogRecPtr lsn, XLogRecord *record, bool clean_move)
*/
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -5156,7 +5147,6 @@ heap_xlog_freeze(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -5192,13 +5182,12 @@ heap_xlog_newpage(XLogRecPtr lsn, XLogRecord *record)
memcpy(page, (char *) xlrec + SizeOfHeapNewpage, BLCKSZ);
/*
* The page may be uninitialized. If so, we can't set the LSN
* and TLI because that would corrupt the page.
* The page may be uninitialized. If so, we can't set the LSN because that
* would corrupt the page.
*/
if (!PageIsNew(page))
{
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
}
MarkBufferDirty(buffer);
......@@ -5292,7 +5281,6 @@ heap_xlog_delete(XLogRecPtr lsn, XLogRecord *record)
/* Make sure there is no forward chain link in t_ctid */
htup->t_ctid = xlrec->target.tid;
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -5404,7 +5392,6 @@ heap_xlog_insert(XLogRecPtr lsn, XLogRecord *record)
if (offnum == InvalidOffsetNumber)
elog(PANIC, "heap_insert_redo: failed to add tuple");
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -5525,7 +5512,6 @@ heap_xlog_update(XLogRecPtr lsn, XLogRecord *record, bool move, bool hot_update)
if (samepage)
goto newsame;
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -5627,7 +5613,6 @@ newsame:;
if (offnum == InvalidOffsetNumber)
elog(PANIC, "heap_update_redo: failed to add tuple");
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -5708,7 +5693,6 @@ heap_xlog_lock(XLogRecPtr lsn, XLogRecord *record)
/* Make sure there is no forward chain link in t_ctid */
htup->t_ctid = xlrec->target.tid;
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -5782,7 +5766,6 @@ heap_xlog_inplace(XLogRecPtr lsn, XLogRecord *record)
newlen);
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......
......@@ -271,7 +271,6 @@ heap_page_prune(Relation relation, Buffer buffer, TransactionId OldestXmin,
redirect_move);
PageSetLSN(BufferGetPage(buffer), recptr);
PageSetTLI(BufferGetPage(buffer), ThisTimeLineID);
}
}
else
......
......@@ -875,11 +875,9 @@ _bt_insertonpg(Relation rel,
if (BufferIsValid(metabuf))
{
PageSetLSN(metapg, recptr);
PageSetTLI(metapg, ThisTimeLineID);
}
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
......@@ -971,7 +969,6 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
* examine these fields and possibly dump them in a page image.
*/
PageSetLSN(leftpage, PageGetLSN(origpage));
PageSetTLI(leftpage, PageGetTLI(origpage));
/* init btree private data */
oopaque = (BTPageOpaque) PageGetSpecialPointer(origpage);
......@@ -1356,13 +1353,10 @@ _bt_split(Relation rel, Buffer buf, OffsetNumber firstright,
recptr = XLogInsert(RM_BTREE_ID, xlinfo, rdata);
PageSetLSN(origpage, recptr);
PageSetTLI(origpage, ThisTimeLineID);
PageSetLSN(rightpage, recptr);
PageSetTLI(rightpage, ThisTimeLineID);
if (!P_RIGHTMOST(ropaque))
{
PageSetLSN(spage, recptr);
PageSetTLI(spage, ThisTimeLineID);
}
}
......@@ -2014,9 +2008,7 @@ _bt_newroot(Relation rel, Buffer lbuf, Buffer rbuf)
recptr = XLogInsert(RM_BTREE_ID, XLOG_BTREE_NEWROOT, rdata);
PageSetLSN(rootpage, recptr);
PageSetTLI(rootpage, ThisTimeLineID);
PageSetLSN(metapg, recptr);
PageSetTLI(metapg, ThisTimeLineID);
}
END_CRIT_SECTION();
......
......@@ -246,9 +246,7 @@ _bt_getroot(Relation rel, int access)
recptr = XLogInsert(RM_BTREE_ID, XLOG_BTREE_NEWROOT, &rdata);
PageSetLSN(rootpage, recptr);
PageSetTLI(rootpage, ThisTimeLineID);
PageSetLSN(metapg, recptr);
PageSetTLI(metapg, ThisTimeLineID);
}
END_CRIT_SECTION();
......@@ -741,7 +739,6 @@ _bt_delitems(Relation rel, Buffer buf,
recptr = XLogInsert(RM_BTREE_ID, XLOG_BTREE_DELETE, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
......@@ -1317,22 +1314,17 @@ _bt_pagedel(Relation rel, Buffer buf, BTStack stack, bool vacuum_full)
if (BufferIsValid(metabuf))
{
PageSetLSN(metapg, recptr);
PageSetTLI(metapg, ThisTimeLineID);
}
page = BufferGetPage(pbuf);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
page = BufferGetPage(rbuf);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
page = BufferGetPage(buf);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
if (BufferIsValid(lbuf))
{
page = BufferGetPage(lbuf);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
}
......
......@@ -293,12 +293,6 @@ _bt_blwritepage(BTWriteState *wstate, Page page, BlockNumber blkno)
log_newpage_rel(wstate->index, blkno, page);
}
else
{
/* Leave the page LSN zero if not WAL-logged, but set TLI anyway */
PageSetTLI(page, ThisTimeLineID);
}
/*
* If we have to write pages nonsequentially, fill in the space with
* zeroes until we come back and overwrite. This is not logically
......
......@@ -189,7 +189,6 @@ _bt_restore_meta(Relation reln, XLogRecPtr lsn,
((char *) md + sizeof(BTMetaPageData)) - (char *) metapg;
PageSetLSN(metapg, lsn);
PageSetTLI(metapg, ThisTimeLineID);
MarkBufferDirty(metabuf);
UnlockReleaseBuffer(metabuf);
}
......@@ -255,7 +254,6 @@ btree_xlog_insert(bool isleaf, bool ismeta,
elog(PANIC, "btree_insert_redo: failed to add item");
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
......@@ -376,7 +374,6 @@ btree_xlog_split(bool onleft, bool isroot,
}
PageSetLSN(rpage, lsn);
PageSetTLI(rpage, ThisTimeLineID);
MarkBufferDirty(rbuf);
/* don't release the buffer yet; we touch right page's first item below */
......@@ -445,7 +442,6 @@ btree_xlog_split(bool onleft, bool isroot,
lopaque->btpo_cycleid = 0;
PageSetLSN(lpage, lsn);
PageSetTLI(lpage, ThisTimeLineID);
MarkBufferDirty(lbuf);
}
......@@ -472,7 +468,6 @@ btree_xlog_split(bool onleft, bool isroot,
pageop->btpo_prev = xlrec->rightsib;
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
}
UnlockReleaseBuffer(buffer);
......@@ -545,7 +540,6 @@ btree_xlog_delete(XLogRecPtr lsn, XLogRecord *record)
opaque->btpo_flags &= ~BTP_HAS_GARBAGE;
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -619,7 +613,6 @@ btree_xlog_delete_page(uint8 info, XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
......@@ -645,7 +638,6 @@ btree_xlog_delete_page(uint8 info, XLogRecPtr lsn, XLogRecord *record)
pageop->btpo_prev = leftsib;
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
......@@ -673,7 +665,6 @@ btree_xlog_delete_page(uint8 info, XLogRecPtr lsn, XLogRecord *record)
pageop->btpo_next = rightsib;
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
}
......@@ -696,7 +687,6 @@ btree_xlog_delete_page(uint8 info, XLogRecPtr lsn, XLogRecord *record)
pageop->btpo_cycleid = 0;
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -768,7 +758,6 @@ btree_xlog_newroot(XLogRecPtr lsn, XLogRecord *record)
}
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......
......@@ -438,13 +438,15 @@ critical section.)
4. Mark the shared buffer(s) as dirty with MarkBufferDirty(). (This must
happen before the WAL record is inserted; see notes in SyncOneBuffer().)
5. Build a WAL log record and pass it to XLogInsert(); then update the page's
LSN and TLI using the returned XLOG location. For instance,
5. If the relation requires WAL-logging, build a WAL log record and pass it
to XLogInsert(); then update the page's LSN using the returned XLOG
location. For instance,
recptr = XLogInsert(rmgr_id, info, rdata);
PageSetLSN(dp, recptr);
PageSetTLI(dp, ThisTimeLineID);
// Note that we no longer do PageSetTLI() from 9.3 onwards
// since that field on a page has now changed its meaning.
6. END_CRIT_SECTION()
......@@ -489,7 +491,6 @@ standard replay-routine pattern for this case is
... initialize the page ...
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......@@ -517,7 +518,6 @@ The standard replay-routine pattern for this case is
... apply the change ...
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......
......@@ -3407,7 +3407,6 @@ RestoreBkpBlocks(XLogRecord *record, XLogRecPtr lsn)
}
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......
......@@ -318,7 +318,6 @@ static void copy_buffer_pool_files(
recptr = XLogInsert(RM_HEAP_ID, XLOG_HEAP_NEWPAGE, rdata);
PageSetLSN(buffer, recptr);
PageSetTLI(buffer, ThisTimeLineID);
END_CRIT_SECTION();
......
......@@ -587,7 +587,6 @@ DefineSequence(CreateSeqStmt *seq)
recptr = XLogInsert(RM_SEQ_ID, XLOG_SEQ_LOG, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
......@@ -716,7 +715,6 @@ AlterSequence(AlterSeqStmt *stmt)
recptr = XLogInsert(RM_SEQ_ID, XLOG_SEQ_LOG, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
......@@ -1065,7 +1063,6 @@ cdb_sequence_nextval(SeqTable elm,
recptr = XLogInsert(RM_SEQ_ID, XLOG_SEQ_LOG, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
/* need to update where we've inserted to into shmem so that the QD can flush it
* when necessary
......@@ -1291,7 +1288,6 @@ do_setval(Oid relid, int64 next, bool iscalled)
recptr = XLogInsert(RM_SEQ_ID, XLOG_SEQ_LOG, rdata);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
......@@ -1864,7 +1860,6 @@ seq_redo(XLogRecPtr beginLoc, XLogRecPtr lsn, XLogRecord *record)
elog(PANIC, "seq_redo: failed to add item to page");
PageSetLSN(page, lsn);
PageSetTLI(page, ThisTimeLineID);
MarkBufferDirty(buffer);
UnlockReleaseBuffer(buffer);
......
......@@ -3332,7 +3332,6 @@ scan_heap(VRelStats *vacrelstats, Relation onerel,
recptr = log_heap_freeze(onerel, buf, FreezeLimit,
frozen, nfrozen);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
}
......@@ -4482,10 +4481,8 @@ move_chain_tuple(Relation rel,
if (old_buf != dst_buf)
{
PageSetLSN(old_page, recptr);
PageSetTLI(old_page, ThisTimeLineID);
}
PageSetLSN(dst_page, recptr);
PageSetTLI(dst_page, ThisTimeLineID);
}
END_CRIT_SECTION();
......@@ -4590,9 +4587,7 @@ move_plain_tuple(Relation rel,
dst_buf, &newtup);
PageSetLSN(old_page, recptr);
PageSetTLI(old_page, ThisTimeLineID);
PageSetLSN(dst_page, recptr);
PageSetTLI(dst_page, ThisTimeLineID);
}
END_CRIT_SECTION();
......@@ -4698,7 +4693,6 @@ vacuum_page(Relation onerel, Buffer buffer, VacPage vacpage)
vacpage->offsets, vacpage->offsets_free,
false);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
......
......@@ -751,7 +751,6 @@ lazy_scan_heap(Relation onerel, LVRelStats *vacrelstats,
recptr = log_heap_freeze(onerel, buf, FreezeLimit,
frozen, nfrozen);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
}
......@@ -955,7 +954,6 @@ lazy_vacuum_page(Relation onerel, BlockNumber blkno, Buffer buffer,
unused, uncnt,
false);
PageSetLSN(page, recptr);
PageSetTLI(page, ThisTimeLineID);
}
END_CRIT_SECTION();
......
......@@ -89,7 +89,7 @@ typedef uint16 LocationIndex;
* space management information generic to any page
*
* pd_lsn - identifies xlog record for last change to this page.
* pd_tli - ditto.
* pd_checksum - page checksum, if set.
* pd_flags - flag bits.
* pd_lower - offset to start of free space.
* pd_upper - offset to end of free space.
......@@ -100,9 +100,17 @@ typedef uint16 LocationIndex;
* The LSN is used by the buffer manager to enforce the basic rule of WAL:
* "thou shalt write xlog before data". A dirty buffer cannot be dumped
* to disk until xlog has been flushed at least as far as the page's LSN.
* We also store the 16 least significant bits of the TLI for identification
* purposes (it is not clear that this is actually necessary, but it seems
* like a good idea).
*
* pd_checksum stores the page checksum, if it has been set for this page;
* zero is a valid value for a checksum. If a checksum is not in use then
* we leave the field unset. This will typically mean the field is zero
* though non-zero values may also be present if databases have been
* pg_upgraded from releases prior to 9.3, when the same byte offset was
* used to store the current timelineid when the page was last updated.
* Note that there is no indication on a page as to whether the checksum
* is valid or not, a deliberate design choice which avoids the problem
* of relying on the page contents to decide whether to verify it. Hence
* there are no flag bits relating to checksums.
*
* pd_prune_xid is a hint field that helps determine whether pruning will be
* useful. It is currently unused in index pages.
......@@ -125,8 +133,7 @@ typedef struct PageHeaderData
/* XXX LSN is member of *any* block, not only page-organized ones */
XLogRecPtr pd_lsn; /* LSN: next byte after last byte of xlog
* record for last change to this page */
uint16 pd_tli; /* least significant bits of the TimeLineID
* containing the LSN */
uint16 pd_checksum; /* checksum */
uint16 pd_flags; /* flag bits, see below */
LocationIndex pd_lower; /* offset to start of free space */
LocationIndex pd_upper; /* offset to end of free space */
......@@ -351,12 +358,6 @@ typedef PageHeaderData *PageHeader;
#define PageSetLSN(page, lsn) \
(((PageHeader) (page))->pd_lsn = (lsn))
/* NOTE: only the 16 least significant bits are stored */
#define PageGetTLI(page) \
(((PageHeader) (page))->pd_tli)
#define PageSetTLI(page, tli) \
(((PageHeader) (page))->pd_tli = (uint16) (tli))
#define PageHasFreeLinePointers(page) \
(((PageHeader) (page))->pd_flags & PD_HAS_FREE_LINES)
#define PageSetHasFreeLinePointers(page) \
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册