diff --git a/contrib/pageinspect/rawpage.c b/contrib/pageinspect/rawpage.c index 4ca2160194b03d443b85b2476122f4404004bc07..0df876fe42eb56692ce8c3e05b51546fef0e580b 100644 --- a/contrib/pageinspect/rawpage.c +++ b/contrib/pageinspect/rawpage.c @@ -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); diff --git a/src/backend/access/bitmap/bitmaputil.c b/src/backend/access/bitmap/bitmaputil.c index 09e8947d572e4aa268d4f010f20e97a8cc406fa0..88e9b832d1bdc8839691ec2b16560761e855d803 100644 --- a/src/backend/access/bitmap/bitmaputil.c +++ b/src/backend/access/bitmap/bitmaputil.c @@ -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); } } diff --git a/src/backend/access/bitmap/bitmapxlog.c b/src/backend/access/bitmap/bitmapxlog.c index f9b2e74fc325dd049e4b9fb9ee29c6bc9f61347e..c9b73e47852c71b7b9f87b5a899018a95eb57463 100644 --- a/src/backend/access/bitmap/bitmapxlog.c +++ b/src/backend/access/bitmap/bitmapxlog.c @@ -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); } diff --git a/src/backend/access/gin/ginbtree.c b/src/backend/access/gin/ginbtree.c index 6adbb68d6f0f3a6868fd2072514b3e014818038e..a9f23d5723bee6a4f38500142a583404edcbe810 100644 --- a/src/backend/access/gin/ginbtree.c +++ b/src/backend/access/gin/ginbtree.c @@ -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(); diff --git a/src/backend/access/gin/gininsert.c b/src/backend/access/gin/gininsert.c index d4ea51ece7be3e2ef823453b2309db639d58e461..d9363919dff2a014611dc10c7b936e9fbb45e0dd 100644 --- a/src/backend/access/gin/gininsert.c +++ b/src/backend/access/gin/gininsert.c @@ -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); diff --git a/src/backend/access/gin/ginvacuum.c b/src/backend/access/gin/ginvacuum.c index 06943bf4f8c11bad441784dbfc9c8ac5ed465949..4a88940dba2599901bc833ff550a0a06f20151ed 100644 --- a/src/backend/access/gin/ginvacuum.c +++ b/src/backend/access/gin/ginvacuum.c @@ -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); } } diff --git a/src/backend/access/gin/ginxlog.c b/src/backend/access/gin/ginxlog.c index 50824ea18075eb85d8d30b129d581632f4f7151a..42dcc0aaf2af69e66411457880142956119b7add 100644 --- a/src/backend/access/gin/ginxlog.c +++ b/src/backend/access/gin/ginxlog.c @@ -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); diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c index 070a1efc430f12a190e55723421b66ec246f8eb0..d2a0466e6d5ad66dc28ffbbcf5e28a6c38b932c7 100644 --- a/src/backend/access/gist/gist.c +++ b/src/backend/access/gist/gist.c @@ -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()); diff --git a/src/backend/access/gist/gistvacuum.c b/src/backend/access/gist/gistvacuum.c index 6725f4caa3d2823a2ae8720185a1638c4a250b9d..5fb120f88f9075bb3ea5522500cef24f88d146c5 100644 --- a/src/backend/access/gist/gistvacuum.c +++ b/src/backend/access/gist/gistvacuum.c @@ -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); diff --git a/src/backend/access/gist/gistxlog.c b/src/backend/access/gist/gistxlog.c index f6a531a0b3b04a53c5d634d634044b395eaadffe..e6f0b810f82f8be4396a30e63f60a4446013e869 100644 --- a/src/backend/access/gist/gistxlog.c +++ b/src/backend/access/gist/gistxlog.c @@ -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(); diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index 0166079a94d69607c9418e97900eed4d65a2696f..28af347ba6cc0a5f54c37fdf4f41d2cafa45a713 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -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); diff --git a/src/backend/access/heap/pruneheap.c b/src/backend/access/heap/pruneheap.c index 624ae5c2daec056bacd3881943ba8e905b3ba915..ba824b6cee6527a1d85e22c5423cafb0cca53ab2 100644 --- a/src/backend/access/heap/pruneheap.c +++ b/src/backend/access/heap/pruneheap.c @@ -271,7 +271,6 @@ heap_page_prune(Relation relation, Buffer buffer, TransactionId OldestXmin, redirect_move); PageSetLSN(BufferGetPage(buffer), recptr); - PageSetTLI(BufferGetPage(buffer), ThisTimeLineID); } } else diff --git a/src/backend/access/nbtree/nbtinsert.c b/src/backend/access/nbtree/nbtinsert.c index 23cb23658b0588f5346412c034bb521b26181502..8c99608a67c5e522dfd1aa7d41d325c257b83257 100644 --- a/src/backend/access/nbtree/nbtinsert.c +++ b/src/backend/access/nbtree/nbtinsert.c @@ -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(); diff --git a/src/backend/access/nbtree/nbtpage.c b/src/backend/access/nbtree/nbtpage.c index 150b528f19e2e4862ee7949a98c2cc99f902147e..0c5625695fb891b600c17eb39f289a63ed40cab7 100644 --- a/src/backend/access/nbtree/nbtpage.c +++ b/src/backend/access/nbtree/nbtpage.c @@ -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); } } diff --git a/src/backend/access/nbtree/nbtsort.c b/src/backend/access/nbtree/nbtsort.c index 6bd6a979fcad257b73c0ae038dc536e95ad972f2..b332d25b173f8c2a852fe9e4d479dadff823ca5e 100644 --- a/src/backend/access/nbtree/nbtsort.c +++ b/src/backend/access/nbtree/nbtsort.c @@ -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 diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c index 62775e32044b28e9089f6ab3fcd653c1eac2bf86..569452a9cc1726f204f0ad6dedaafe17da34dead 100644 --- a/src/backend/access/nbtree/nbtxlog.c +++ b/src/backend/access/nbtree/nbtxlog.c @@ -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); diff --git a/src/backend/access/transam/README b/src/backend/access/transam/README index 2edac9d088f5f26f9f911a2d5272f081acf7ee54..5ba65afc256fb7ad2ceca2903efe6c5a09555602 100644 --- a/src/backend/access/transam/README +++ b/src/backend/access/transam/README @@ -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); diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index e897c7cf22c981721039755170453da42afed6ef..6e0a6dddcc4c31c79a7acbc385eb26c275b10825 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -3407,7 +3407,6 @@ RestoreBkpBlocks(XLogRecord *record, XLogRecPtr lsn) } PageSetLSN(page, lsn); - PageSetTLI(page, ThisTimeLineID); MarkBufferDirty(buffer); UnlockReleaseBuffer(buffer); diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index c4bcdb1ccdbfcee9ba6ba68ca566e210e3ae6419..2d5698f53aa719f433e71d10197589f38814cd95 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -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(); diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index c758a8b7d758533798ad357f1cfd711234a1992a..aec7f3a6fcd1ab51a2fa78458c98ca6e6cee8c80 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -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); diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index b55e9c74ea26cf6d1c3846ef3a915810c8181090..74f0779e9a5d311bdc65db5eb05b28aff1ce7393 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -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(); diff --git a/src/backend/commands/vacuumlazy.c b/src/backend/commands/vacuumlazy.c index 74d61907d014ea6664e201cd5bca2ec84e4879ca..969ce50d1af15446e9019f7ec1b3d98e3fb1bed1 100644 --- a/src/backend/commands/vacuumlazy.c +++ b/src/backend/commands/vacuumlazy.c @@ -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(); diff --git a/src/include/storage/bufpage.h b/src/include/storage/bufpage.h index eae59b7d17cf932ff2f0efb09d91081f3913f89b..b440d871d077f9a8ee2c6215424f7ad41a120d50 100644 --- a/src/include/storage/bufpage.h +++ b/src/include/storage/bufpage.h @@ -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) \