diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c index fd160670ce..2a55c91f0d 100644 --- a/src/backend/access/gist/gist.c +++ b/src/backend/access/gist/gist.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/gist/gist.c,v 1.117 2005/05/17 03:34:18 neilc Exp $ + * $PostgreSQL: pgsql/src/backend/access/gist/gist.c,v 1.118 2005/06/06 17:01:21 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1732,12 +1732,6 @@ gist_redo(XLogRecPtr lsn, XLogRecord *record) elog(PANIC, "gist_redo: unimplemented"); } -void -gist_undo(XLogRecPtr lsn, XLogRecord *record) -{ - elog(PANIC, "gist_undo: unimplemented"); -} - void gist_desc(char *buf, uint8 xl_info, char *rec) { diff --git a/src/backend/access/hash/hash.c b/src/backend/access/hash/hash.c index 6eda509114..f8611ce46a 100644 --- a/src/backend/access/hash/hash.c +++ b/src/backend/access/hash/hash.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/hash/hash.c,v 1.79 2005/05/11 06:24:51 neilc Exp $ + * $PostgreSQL: pgsql/src/backend/access/hash/hash.c,v 1.80 2005/06/06 17:01:21 tgl Exp $ * * NOTES * This file contains only the public interface routines. @@ -671,12 +671,6 @@ hash_redo(XLogRecPtr lsn, XLogRecord *record) elog(PANIC, "hash_redo: unimplemented"); } -void -hash_undo(XLogRecPtr lsn, XLogRecord *record) -{ - elog(PANIC, "hash_undo: unimplemented"); -} - void hash_desc(char *buf, uint8 xl_info, char *rec) { diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index bffd56dd54..fa9f1a2076 100644 --- a/src/backend/access/heap/heapam.c +++ b/src/backend/access/heap/heapam.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.191 2005/05/19 21:35:44 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.192 2005/06/06 17:01:22 tgl Exp $ * * * INTERFACE ROUTINES @@ -2452,17 +2452,17 @@ log_heap_move(Relation reln, Buffer oldbuf, ItemPointerData from, } static void -heap_xlog_clean(bool redo, XLogRecPtr lsn, XLogRecord *record) +heap_xlog_clean(XLogRecPtr lsn, XLogRecord *record) { xl_heap_clean *xlrec = (xl_heap_clean *) XLogRecGetData(record); Relation reln; Buffer buffer; Page page; - if (!redo || (record->xl_info & XLR_BKP_BLOCK_1)) + if (record->xl_info & XLR_BKP_BLOCK_1) return; - reln = XLogOpenRelation(redo, RM_HEAP_ID, xlrec->node); + reln = XLogOpenRelation(xlrec->node); if (!RelationIsValid(reln)) return; @@ -2507,7 +2507,7 @@ heap_xlog_clean(bool redo, XLogRecPtr lsn, XLogRecord *record) } static void -heap_xlog_newpage(bool redo, XLogRecPtr lsn, XLogRecord *record) +heap_xlog_newpage(XLogRecPtr lsn, XLogRecord *record) { xl_heap_newpage *xlrec = (xl_heap_newpage *) XLogRecGetData(record); Relation reln; @@ -2519,10 +2519,10 @@ heap_xlog_newpage(bool redo, XLogRecPtr lsn, XLogRecord *record) * do not do anything that assumes we are touching a heap. */ - if (!redo || (record->xl_info & XLR_BKP_BLOCK_1)) + if (record->xl_info & XLR_BKP_BLOCK_1) return; - reln = XLogOpenRelation(redo, RM_HEAP_ID, xlrec->node); + reln = XLogOpenRelation(xlrec->node); if (!RelationIsValid(reln)) return; buffer = XLogReadBuffer(true, reln, xlrec->blkno); @@ -2540,7 +2540,7 @@ heap_xlog_newpage(bool redo, XLogRecPtr lsn, XLogRecord *record) } static void -heap_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record) +heap_xlog_delete(XLogRecPtr lsn, XLogRecord *record) { xl_heap_delete *xlrec = (xl_heap_delete *) XLogRecGetData(record); Relation reln; @@ -2550,10 +2550,10 @@ heap_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record) ItemId lp = NULL; HeapTupleHeader htup; - if (redo && (record->xl_info & XLR_BKP_BLOCK_1)) + if (record->xl_info & XLR_BKP_BLOCK_1) return; - reln = XLogOpenRelation(redo, RM_HEAP_ID, xlrec->target.node); + reln = XLogOpenRelation(xlrec->target.node); if (!RelationIsValid(reln)) return; @@ -2561,153 +2561,129 @@ heap_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record) buffer = XLogReadBuffer(false, reln, ItemPointerGetBlockNumber(&(xlrec->target.tid))); if (!BufferIsValid(buffer)) - elog(PANIC, "heap_delete_%sdo: no block", (redo) ? "re" : "un"); + elog(PANIC, "heap_delete_redo: no block"); page = (Page) BufferGetPage(buffer); if (PageIsNew((PageHeader) page)) - elog(PANIC, "heap_delete_%sdo: uninitialized page", (redo) ? "re" : "un"); + elog(PANIC, "heap_delete_redo: uninitialized page"); - if (redo) + if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ { - if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ - { - LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - ReleaseBuffer(buffer); - return; - } + LockBuffer(buffer, BUFFER_LOCK_UNLOCK); + ReleaseBuffer(buffer); + return; } - else if (XLByteLT(PageGetLSN(page), lsn)) /* changes are not applied - * ?! */ - elog(PANIC, "heap_delete_undo: bad page LSN"); offnum = ItemPointerGetOffsetNumber(&(xlrec->target.tid)); if (PageGetMaxOffsetNumber(page) >= offnum) lp = PageGetItemId(page, offnum); if (PageGetMaxOffsetNumber(page) < offnum || !ItemIdIsUsed(lp)) - elog(PANIC, "heap_delete_%sdo: invalid lp", (redo) ? "re" : "un"); + elog(PANIC, "heap_delete_redo: invalid lp"); htup = (HeapTupleHeader) PageGetItem(page, lp); - if (redo) - { - htup->t_infomask &= ~(HEAP_XMAX_COMMITTED | - HEAP_XMAX_INVALID | - HEAP_XMAX_IS_MULTI | - HEAP_IS_LOCKED | - HEAP_MOVED); - HeapTupleHeaderSetXmax(htup, record->xl_xid); - HeapTupleHeaderSetCmax(htup, FirstCommandId); - /* Make sure there is no forward chain link in t_ctid */ - htup->t_ctid = xlrec->target.tid; - PageSetLSN(page, lsn); - PageSetTLI(page, ThisTimeLineID); - LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - WriteBuffer(buffer); - return; - } - - elog(PANIC, "heap_delete_undo: unimplemented"); + htup->t_infomask &= ~(HEAP_XMAX_COMMITTED | + HEAP_XMAX_INVALID | + HEAP_XMAX_IS_MULTI | + HEAP_IS_LOCKED | + HEAP_MOVED); + HeapTupleHeaderSetXmax(htup, record->xl_xid); + HeapTupleHeaderSetCmax(htup, FirstCommandId); + /* Make sure there is no forward chain link in t_ctid */ + htup->t_ctid = xlrec->target.tid; + PageSetLSN(page, lsn); + PageSetTLI(page, ThisTimeLineID); + LockBuffer(buffer, BUFFER_LOCK_UNLOCK); + WriteBuffer(buffer); } static void -heap_xlog_insert(bool redo, XLogRecPtr lsn, XLogRecord *record) +heap_xlog_insert(XLogRecPtr lsn, XLogRecord *record) { xl_heap_insert *xlrec = (xl_heap_insert *) XLogRecGetData(record); Relation reln; Buffer buffer; Page page; OffsetNumber offnum; + struct + { + HeapTupleHeaderData hdr; + char data[MaxTupleSize]; + } tbuf; + HeapTupleHeader htup; + xl_heap_header xlhdr; + uint32 newlen; - if (redo && (record->xl_info & XLR_BKP_BLOCK_1)) + if (record->xl_info & XLR_BKP_BLOCK_1) return; - reln = XLogOpenRelation(redo, RM_HEAP_ID, xlrec->target.node); + reln = XLogOpenRelation(xlrec->target.node); if (!RelationIsValid(reln)) return; - buffer = XLogReadBuffer((redo) ? true : false, reln, + buffer = XLogReadBuffer(true, reln, ItemPointerGetBlockNumber(&(xlrec->target.tid))); if (!BufferIsValid(buffer)) return; page = (Page) BufferGetPage(buffer); if (PageIsNew((PageHeader) page) && - (!redo || !(record->xl_info & XLOG_HEAP_INIT_PAGE))) - elog(PANIC, "heap_insert_%sdo: uninitialized page", (redo) ? "re" : "un"); + !(record->xl_info & XLOG_HEAP_INIT_PAGE)) + elog(PANIC, "heap_insert_redo: uninitialized page"); - if (redo) + if (record->xl_info & XLOG_HEAP_INIT_PAGE) + PageInit(page, BufferGetPageSize(buffer), 0); + + if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ { - struct - { - HeapTupleHeaderData hdr; - char data[MaxTupleSize]; - } tbuf; - HeapTupleHeader htup; - xl_heap_header xlhdr; - uint32 newlen; - - if (record->xl_info & XLOG_HEAP_INIT_PAGE) - PageInit(page, BufferGetPageSize(buffer), 0); - - if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ - { - LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - ReleaseBuffer(buffer); - return; - } - - offnum = ItemPointerGetOffsetNumber(&(xlrec->target.tid)); - if (PageGetMaxOffsetNumber(page) + 1 < offnum) - elog(PANIC, "heap_insert_redo: invalid max offset number"); - - newlen = record->xl_len - SizeOfHeapInsert - SizeOfHeapHeader; - Assert(newlen <= MaxTupleSize); - memcpy((char *) &xlhdr, - (char *) xlrec + SizeOfHeapInsert, - SizeOfHeapHeader); - htup = &tbuf.hdr; - MemSet((char *) htup, 0, sizeof(HeapTupleHeaderData)); - /* PG73FORMAT: get bitmap [+ padding] [+ oid] + data */ - memcpy((char *) htup + offsetof(HeapTupleHeaderData, t_bits), - (char *) xlrec + SizeOfHeapInsert + SizeOfHeapHeader, - newlen); - newlen += offsetof(HeapTupleHeaderData, t_bits); - htup->t_natts = xlhdr.t_natts; - htup->t_infomask = xlhdr.t_infomask; - htup->t_hoff = xlhdr.t_hoff; - HeapTupleHeaderSetXmin(htup, record->xl_xid); - HeapTupleHeaderSetCmin(htup, FirstCommandId); - htup->t_ctid = xlrec->target.tid; - - offnum = PageAddItem(page, (Item) htup, newlen, offnum, - LP_USED | OverwritePageMode); - if (offnum == InvalidOffsetNumber) - elog(PANIC, "heap_insert_redo: failed to add tuple"); - PageSetLSN(page, lsn); - PageSetTLI(page, ThisTimeLineID); LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - WriteBuffer(buffer); + ReleaseBuffer(buffer); return; } - /* undo insert */ - if (XLByteLT(PageGetLSN(page), lsn)) /* changes are not applied - * ?! */ - elog(PANIC, "heap_insert_undo: bad page LSN"); + offnum = ItemPointerGetOffsetNumber(&(xlrec->target.tid)); + if (PageGetMaxOffsetNumber(page) + 1 < offnum) + elog(PANIC, "heap_insert_redo: invalid max offset number"); - elog(PANIC, "heap_insert_undo: unimplemented"); + newlen = record->xl_len - SizeOfHeapInsert - SizeOfHeapHeader; + Assert(newlen <= MaxTupleSize); + memcpy((char *) &xlhdr, + (char *) xlrec + SizeOfHeapInsert, + SizeOfHeapHeader); + htup = &tbuf.hdr; + MemSet((char *) htup, 0, sizeof(HeapTupleHeaderData)); + /* PG73FORMAT: get bitmap [+ padding] [+ oid] + data */ + memcpy((char *) htup + offsetof(HeapTupleHeaderData, t_bits), + (char *) xlrec + SizeOfHeapInsert + SizeOfHeapHeader, + newlen); + newlen += offsetof(HeapTupleHeaderData, t_bits); + htup->t_natts = xlhdr.t_natts; + htup->t_infomask = xlhdr.t_infomask; + htup->t_hoff = xlhdr.t_hoff; + HeapTupleHeaderSetXmin(htup, record->xl_xid); + HeapTupleHeaderSetCmin(htup, FirstCommandId); + htup->t_ctid = xlrec->target.tid; + + offnum = PageAddItem(page, (Item) htup, newlen, offnum, + LP_USED | OverwritePageMode); + if (offnum == InvalidOffsetNumber) + elog(PANIC, "heap_insert_redo: failed to add tuple"); + PageSetLSN(page, lsn); + PageSetTLI(page, ThisTimeLineID); + LockBuffer(buffer, BUFFER_LOCK_UNLOCK); + WriteBuffer(buffer); } /* * Handles UPDATE & MOVE */ static void -heap_xlog_update(bool redo, XLogRecPtr lsn, XLogRecord *record, bool move) +heap_xlog_update(XLogRecPtr lsn, XLogRecord *record, bool move) { xl_heap_update *xlrec = (xl_heap_update *) XLogRecGetData(record); - Relation reln = XLogOpenRelation(redo, RM_HEAP_ID, xlrec->target.node); + Relation reln = XLogOpenRelation(xlrec->target.node); Buffer buffer; bool samepage = (ItemPointerGetBlockNumber(&(xlrec->newtid)) == @@ -2716,11 +2692,19 @@ heap_xlog_update(bool redo, XLogRecPtr lsn, XLogRecord *record, bool move) OffsetNumber offnum; ItemId lp = NULL; HeapTupleHeader htup; + struct + { + HeapTupleHeaderData hdr; + char data[MaxTupleSize]; + } tbuf; + xl_heap_header xlhdr; + int hsize; + uint32 newlen; if (!RelationIsValid(reln)) return; - if (redo && (record->xl_info & XLR_BKP_BLOCK_1)) + if (record->xl_info & XLR_BKP_BLOCK_1) goto newt; /* Deal with old tuple version */ @@ -2728,81 +2712,68 @@ heap_xlog_update(bool redo, XLogRecPtr lsn, XLogRecord *record, bool move) buffer = XLogReadBuffer(false, reln, ItemPointerGetBlockNumber(&(xlrec->target.tid))); if (!BufferIsValid(buffer)) - elog(PANIC, "heap_update_%sdo: no block", (redo) ? "re" : "un"); + elog(PANIC, "heap_update_redo: no block"); page = (Page) BufferGetPage(buffer); if (PageIsNew((PageHeader) page)) - elog(PANIC, "heap_update_%sdo: uninitialized old page", (redo) ? "re" : "un"); + elog(PANIC, "heap_update_redo: uninitialized old page"); - if (redo) + if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ { - if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ - { - LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - ReleaseBuffer(buffer); - if (samepage) - return; - goto newt; - } + LockBuffer(buffer, BUFFER_LOCK_UNLOCK); + ReleaseBuffer(buffer); + if (samepage) + return; + goto newt; } - else if (XLByteLT(PageGetLSN(page), lsn)) /* changes are not applied - * ?! */ - elog(PANIC, "heap_update_undo: bad old tuple page LSN"); offnum = ItemPointerGetOffsetNumber(&(xlrec->target.tid)); if (PageGetMaxOffsetNumber(page) >= offnum) lp = PageGetItemId(page, offnum); if (PageGetMaxOffsetNumber(page) < offnum || !ItemIdIsUsed(lp)) - elog(PANIC, "heap_update_%sdo: invalid lp", (redo) ? "re" : "un"); + elog(PANIC, "heap_update_redo: invalid lp"); htup = (HeapTupleHeader) PageGetItem(page, lp); - if (redo) + if (move) { - if (move) - { - htup->t_infomask &= ~(HEAP_XMIN_COMMITTED | - HEAP_XMIN_INVALID | - HEAP_MOVED_IN); - htup->t_infomask |= HEAP_MOVED_OFF; - HeapTupleHeaderSetXvac(htup, record->xl_xid); - /* Make sure there is no forward chain link in t_ctid */ - htup->t_ctid = xlrec->target.tid; - } - else - { - htup->t_infomask &= ~(HEAP_XMAX_COMMITTED | - HEAP_XMAX_INVALID | - HEAP_XMAX_IS_MULTI | - HEAP_IS_LOCKED | - HEAP_MOVED); - HeapTupleHeaderSetXmax(htup, record->xl_xid); - HeapTupleHeaderSetCmax(htup, FirstCommandId); - /* Set forward chain link in t_ctid */ - htup->t_ctid = xlrec->newtid; - } - if (samepage) - goto newsame; - PageSetLSN(page, lsn); - PageSetTLI(page, ThisTimeLineID); - LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - WriteBuffer(buffer); - goto newt; + htup->t_infomask &= ~(HEAP_XMIN_COMMITTED | + HEAP_XMIN_INVALID | + HEAP_MOVED_IN); + htup->t_infomask |= HEAP_MOVED_OFF; + HeapTupleHeaderSetXvac(htup, record->xl_xid); + /* Make sure there is no forward chain link in t_ctid */ + htup->t_ctid = xlrec->target.tid; } - - elog(PANIC, "heap_update_undo: unimplemented"); + else + { + htup->t_infomask &= ~(HEAP_XMAX_COMMITTED | + HEAP_XMAX_INVALID | + HEAP_XMAX_IS_MULTI | + HEAP_IS_LOCKED | + HEAP_MOVED); + HeapTupleHeaderSetXmax(htup, record->xl_xid); + HeapTupleHeaderSetCmax(htup, FirstCommandId); + /* Set forward chain link in t_ctid */ + htup->t_ctid = xlrec->newtid; + } + if (samepage) + goto newsame; + PageSetLSN(page, lsn); + PageSetTLI(page, ThisTimeLineID); + LockBuffer(buffer, BUFFER_LOCK_UNLOCK); + WriteBuffer(buffer); /* Deal with new tuple */ newt:; - if (redo && - ((record->xl_info & XLR_BKP_BLOCK_2) || - ((record->xl_info & XLR_BKP_BLOCK_1) && samepage))) + if ((record->xl_info & XLR_BKP_BLOCK_2) || + ((record->xl_info & XLR_BKP_BLOCK_1) && samepage)) return; - buffer = XLogReadBuffer((redo) ? true : false, reln, + buffer = XLogReadBuffer(true, reln, ItemPointerGetBlockNumber(&(xlrec->newtid))); if (!BufferIsValid(buffer)) return; @@ -2811,94 +2782,74 @@ newt:; newsame:; if (PageIsNew((PageHeader) page) && - (!redo || !(record->xl_info & XLOG_HEAP_INIT_PAGE))) - elog(PANIC, "heap_update_%sdo: uninitialized page", (redo) ? "re" : "un"); + !(record->xl_info & XLOG_HEAP_INIT_PAGE)) + elog(PANIC, "heap_update_redo: uninitialized page"); - if (redo) + if (record->xl_info & XLOG_HEAP_INIT_PAGE) + PageInit(page, BufferGetPageSize(buffer), 0); + + if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ { - struct - { - HeapTupleHeaderData hdr; - char data[MaxTupleSize]; - } tbuf; - xl_heap_header xlhdr; - int hsize; - uint32 newlen; - - if (record->xl_info & XLOG_HEAP_INIT_PAGE) - PageInit(page, BufferGetPageSize(buffer), 0); - - if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ - { - LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - ReleaseBuffer(buffer); - return; - } - - offnum = ItemPointerGetOffsetNumber(&(xlrec->newtid)); - if (PageGetMaxOffsetNumber(page) + 1 < offnum) - elog(PANIC, "heap_update_redo: invalid max offset number"); - - hsize = SizeOfHeapUpdate + SizeOfHeapHeader; - if (move) - hsize += (2 * sizeof(TransactionId)); - - newlen = record->xl_len - hsize; - Assert(newlen <= MaxTupleSize); - memcpy((char *) &xlhdr, - (char *) xlrec + SizeOfHeapUpdate, - SizeOfHeapHeader); - htup = &tbuf.hdr; - MemSet((char *) htup, 0, sizeof(HeapTupleHeaderData)); - /* PG73FORMAT: get bitmap [+ padding] [+ oid] + data */ - memcpy((char *) htup + offsetof(HeapTupleHeaderData, t_bits), - (char *) xlrec + hsize, - newlen); - newlen += offsetof(HeapTupleHeaderData, t_bits); - htup->t_natts = xlhdr.t_natts; - htup->t_infomask = xlhdr.t_infomask; - htup->t_hoff = xlhdr.t_hoff; - - if (move) - { - TransactionId xid[2]; /* xmax, xmin */ - - memcpy((char *) xid, - (char *) xlrec + SizeOfHeapUpdate + SizeOfHeapHeader, - 2 * sizeof(TransactionId)); - HeapTupleHeaderSetXmin(htup, xid[1]); - HeapTupleHeaderSetXmax(htup, xid[0]); - HeapTupleHeaderSetXvac(htup, record->xl_xid); - } - else - { - HeapTupleHeaderSetXmin(htup, record->xl_xid); - HeapTupleHeaderSetCmin(htup, FirstCommandId); - } - /* Make sure there is no forward chain link in t_ctid */ - htup->t_ctid = xlrec->newtid; - - offnum = PageAddItem(page, (Item) htup, newlen, offnum, - LP_USED | OverwritePageMode); - if (offnum == InvalidOffsetNumber) - elog(PANIC, "heap_update_redo: failed to add tuple"); - PageSetLSN(page, lsn); - PageSetTLI(page, ThisTimeLineID); LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - WriteBuffer(buffer); + ReleaseBuffer(buffer); return; } - /* undo */ - if (XLByteLT(PageGetLSN(page), lsn)) /* changes not applied?! */ - elog(PANIC, "heap_update_undo: bad new tuple page LSN"); + offnum = ItemPointerGetOffsetNumber(&(xlrec->newtid)); + if (PageGetMaxOffsetNumber(page) + 1 < offnum) + elog(PANIC, "heap_update_redo: invalid max offset number"); - elog(PANIC, "heap_update_undo: unimplemented"); + hsize = SizeOfHeapUpdate + SizeOfHeapHeader; + if (move) + hsize += (2 * sizeof(TransactionId)); + newlen = record->xl_len - hsize; + Assert(newlen <= MaxTupleSize); + memcpy((char *) &xlhdr, + (char *) xlrec + SizeOfHeapUpdate, + SizeOfHeapHeader); + htup = &tbuf.hdr; + MemSet((char *) htup, 0, sizeof(HeapTupleHeaderData)); + /* PG73FORMAT: get bitmap [+ padding] [+ oid] + data */ + memcpy((char *) htup + offsetof(HeapTupleHeaderData, t_bits), + (char *) xlrec + hsize, + newlen); + newlen += offsetof(HeapTupleHeaderData, t_bits); + htup->t_natts = xlhdr.t_natts; + htup->t_infomask = xlhdr.t_infomask; + htup->t_hoff = xlhdr.t_hoff; + + if (move) + { + TransactionId xid[2]; /* xmax, xmin */ + + memcpy((char *) xid, + (char *) xlrec + SizeOfHeapUpdate + SizeOfHeapHeader, + 2 * sizeof(TransactionId)); + HeapTupleHeaderSetXmin(htup, xid[1]); + HeapTupleHeaderSetXmax(htup, xid[0]); + HeapTupleHeaderSetXvac(htup, record->xl_xid); + } + else + { + HeapTupleHeaderSetXmin(htup, record->xl_xid); + HeapTupleHeaderSetCmin(htup, FirstCommandId); + } + /* Make sure there is no forward chain link in t_ctid */ + htup->t_ctid = xlrec->newtid; + + offnum = PageAddItem(page, (Item) htup, newlen, offnum, + LP_USED | OverwritePageMode); + if (offnum == InvalidOffsetNumber) + elog(PANIC, "heap_update_redo: failed to add tuple"); + PageSetLSN(page, lsn); + PageSetTLI(page, ThisTimeLineID); + LockBuffer(buffer, BUFFER_LOCK_UNLOCK); + WriteBuffer(buffer); } static void -heap_xlog_lock(bool redo, XLogRecPtr lsn, XLogRecord *record) +heap_xlog_lock(XLogRecPtr lsn, XLogRecord *record) { xl_heap_lock *xlrec = (xl_heap_lock *) XLogRecGetData(record); Relation reln; @@ -2908,10 +2859,10 @@ heap_xlog_lock(bool redo, XLogRecPtr lsn, XLogRecord *record) ItemId lp = NULL; HeapTupleHeader htup; - if (redo && (record->xl_info & XLR_BKP_BLOCK_1)) + if (record->xl_info & XLR_BKP_BLOCK_1) return; - reln = XLogOpenRelation(redo, RM_HEAP_ID, xlrec->target.node); + reln = XLogOpenRelation(xlrec->target.node); if (!RelationIsValid(reln)) return; @@ -2919,58 +2870,46 @@ heap_xlog_lock(bool redo, XLogRecPtr lsn, XLogRecord *record) buffer = XLogReadBuffer(false, reln, ItemPointerGetBlockNumber(&(xlrec->target.tid))); if (!BufferIsValid(buffer)) - elog(PANIC, "heap_lock_%sdo: no block", (redo) ? "re" : "un"); + elog(PANIC, "heap_lock_redo: no block"); page = (Page) BufferGetPage(buffer); if (PageIsNew((PageHeader) page)) - elog(PANIC, "heap_lock_%sdo: uninitialized page", (redo) ? "re" : "un"); + elog(PANIC, "heap_lock_redo: uninitialized page"); - if (redo) + if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ { - if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */ - { - LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - ReleaseBuffer(buffer); - return; - } + LockBuffer(buffer, BUFFER_LOCK_UNLOCK); + ReleaseBuffer(buffer); + return; } - else if (XLByteLT(PageGetLSN(page), lsn)) /* changes are not applied - * ?! */ - elog(PANIC, "heap_lock_undo: bad page LSN"); offnum = ItemPointerGetOffsetNumber(&(xlrec->target.tid)); if (PageGetMaxOffsetNumber(page) >= offnum) lp = PageGetItemId(page, offnum); if (PageGetMaxOffsetNumber(page) < offnum || !ItemIdIsUsed(lp)) - elog(PANIC, "heap_lock_%sdo: invalid lp", (redo) ? "re" : "un"); + elog(PANIC, "heap_lock_redo: invalid lp"); htup = (HeapTupleHeader) PageGetItem(page, lp); - if (redo) - { - /* - * Presently, we don't bother to restore the locked state, but - * just set the XMAX_INVALID bit. - */ - htup->t_infomask &= ~(HEAP_XMAX_COMMITTED | - HEAP_XMAX_INVALID | - HEAP_XMAX_IS_MULTI | - HEAP_IS_LOCKED | - HEAP_MOVED); - htup->t_infomask |= HEAP_XMAX_INVALID; - HeapTupleHeaderSetXmax(htup, record->xl_xid); - HeapTupleHeaderSetCmax(htup, FirstCommandId); - /* Make sure there is no forward chain link in t_ctid */ - htup->t_ctid = xlrec->target.tid; - PageSetLSN(page, lsn); - PageSetTLI(page, ThisTimeLineID); - LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - WriteBuffer(buffer); - return; - } - - elog(PANIC, "heap_lock_undo: unimplemented"); + /* + * Presently, we don't bother to restore the locked state, but + * just set the XMAX_INVALID bit. + */ + htup->t_infomask &= ~(HEAP_XMAX_COMMITTED | + HEAP_XMAX_INVALID | + HEAP_XMAX_IS_MULTI | + HEAP_IS_LOCKED | + HEAP_MOVED); + htup->t_infomask |= HEAP_XMAX_INVALID; + HeapTupleHeaderSetXmax(htup, record->xl_xid); + HeapTupleHeaderSetCmax(htup, FirstCommandId); + /* Make sure there is no forward chain link in t_ctid */ + htup->t_ctid = xlrec->target.tid; + PageSetLSN(page, lsn); + PageSetTLI(page, ThisTimeLineID); + LockBuffer(buffer, BUFFER_LOCK_UNLOCK); + WriteBuffer(buffer); } void @@ -2980,47 +2919,23 @@ heap_redo(XLogRecPtr lsn, XLogRecord *record) info &= XLOG_HEAP_OPMASK; if (info == XLOG_HEAP_INSERT) - heap_xlog_insert(true, lsn, record); + heap_xlog_insert(lsn, record); else if (info == XLOG_HEAP_DELETE) - heap_xlog_delete(true, lsn, record); + heap_xlog_delete(lsn, record); else if (info == XLOG_HEAP_UPDATE) - heap_xlog_update(true, lsn, record, false); + heap_xlog_update(lsn, record, false); else if (info == XLOG_HEAP_MOVE) - heap_xlog_update(true, lsn, record, true); + heap_xlog_update(lsn, record, true); else if (info == XLOG_HEAP_CLEAN) - heap_xlog_clean(true, lsn, record); + heap_xlog_clean(lsn, record); else if (info == XLOG_HEAP_NEWPAGE) - heap_xlog_newpage(true, lsn, record); + heap_xlog_newpage(lsn, record); else if (info == XLOG_HEAP_LOCK) - heap_xlog_lock(true, lsn, record); + heap_xlog_lock(lsn, record); else elog(PANIC, "heap_redo: unknown op code %u", info); } -void -heap_undo(XLogRecPtr lsn, XLogRecord *record) -{ - uint8 info = record->xl_info & ~XLR_INFO_MASK; - - info &= XLOG_HEAP_OPMASK; - if (info == XLOG_HEAP_INSERT) - heap_xlog_insert(false, lsn, record); - else if (info == XLOG_HEAP_DELETE) - heap_xlog_delete(false, lsn, record); - else if (info == XLOG_HEAP_UPDATE) - heap_xlog_update(false, lsn, record, false); - else if (info == XLOG_HEAP_MOVE) - heap_xlog_update(false, lsn, record, true); - else if (info == XLOG_HEAP_CLEAN) - heap_xlog_clean(false, lsn, record); - else if (info == XLOG_HEAP_NEWPAGE) - heap_xlog_newpage(false, lsn, record); - else if (info == XLOG_HEAP_LOCK) - heap_xlog_lock(false, lsn, record); - else - elog(PANIC, "heap_undo: unknown op code %u", info); -} - static void out_target(char *buf, xl_heaptid *target) { diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c index 536bc17718..078d852924 100644 --- a/src/backend/access/nbtree/nbtxlog.c +++ b/src/backend/access/nbtree/nbtxlog.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.21 2005/06/02 05:55:28 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.22 2005/06/06 17:01:22 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -149,7 +149,7 @@ _bt_restore_meta(Relation reln, XLogRecPtr lsn, } static void -btree_xlog_insert(bool redo, bool isleaf, bool ismeta, +btree_xlog_insert(bool isleaf, bool ismeta, XLogRecPtr lsn, XLogRecord *record) { xl_btree_insert *xlrec = (xl_btree_insert *) XLogRecGetData(record); @@ -170,70 +170,51 @@ btree_xlog_insert(bool redo, bool isleaf, bool ismeta, datalen -= sizeof(xl_btree_metadata); } - if (redo && (record->xl_info & XLR_BKP_BLOCK_1) && !ismeta && + if ((record->xl_info & XLR_BKP_BLOCK_1) && !ismeta && incomplete_splits == NIL) return; /* nothing to do */ - reln = XLogOpenRelation(redo, RM_BTREE_ID, xlrec->target.node); + reln = XLogOpenRelation(xlrec->target.node); if (!RelationIsValid(reln)) return; - if (!redo || !(record->xl_info & XLR_BKP_BLOCK_1)) + if (!(record->xl_info & XLR_BKP_BLOCK_1)) { buffer = XLogReadBuffer(false, reln, ItemPointerGetBlockNumber(&(xlrec->target.tid))); if (!BufferIsValid(buffer)) - elog(PANIC, "btree_insert_%sdo: block unfound", (redo) ? "re" : "un"); + elog(PANIC, "btree_insert_redo: block unfound"); page = (Page) BufferGetPage(buffer); if (PageIsNew((PageHeader) page)) - elog(PANIC, "btree_insert_%sdo: uninitialized page", (redo) ? "re" : "un"); + elog(PANIC, "btree_insert_redo: uninitialized page"); pageop = (BTPageOpaque) PageGetSpecialPointer(page); - if (redo) + if (XLByteLE(lsn, PageGetLSN(page))) { - if (XLByteLE(lsn, PageGetLSN(page))) - { - LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - ReleaseBuffer(buffer); - } - else - { - if (PageAddItem(page, (Item) datapos, datalen, - ItemPointerGetOffsetNumber(&(xlrec->target.tid)), - LP_USED) == InvalidOffsetNumber) - elog(PANIC, "btree_insert_redo: failed to add item"); - - PageSetLSN(page, lsn); - PageSetTLI(page, ThisTimeLineID); - LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - WriteBuffer(buffer); - } + LockBuffer(buffer, BUFFER_LOCK_UNLOCK); + ReleaseBuffer(buffer); } else { - if (XLByteLT(PageGetLSN(page), lsn)) - elog(PANIC, "btree_insert_undo: bad page LSN"); + if (PageAddItem(page, (Item) datapos, datalen, + ItemPointerGetOffsetNumber(&(xlrec->target.tid)), + LP_USED) == InvalidOffsetNumber) + elog(PANIC, "btree_insert_redo: failed to add item"); - if (!P_ISLEAF(pageop)) - { - LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - ReleaseBuffer(buffer); - } - else - elog(PANIC, "btree_insert_undo: unimplemented"); + PageSetLSN(page, lsn); + PageSetTLI(page, ThisTimeLineID); + LockBuffer(buffer, BUFFER_LOCK_UNLOCK); + WriteBuffer(buffer); } } - if (redo) /* metapage changes not undoable */ - { - if (ismeta) - _bt_restore_meta(reln, lsn, - md.root, md.level, - md.fastroot, md.fastlevel); - } + if (ismeta) + _bt_restore_meta(reln, lsn, + md.root, md.level, + md.fastroot, md.fastlevel); /* Forget any split this insertion completes */ - if (redo && !isleaf && incomplete_splits != NIL) + if (!isleaf && incomplete_splits != NIL) { forget_matching_split(reln, xlrec->target.node, ItemPointerGetBlockNumber(&(xlrec->target.tid)), @@ -243,7 +224,7 @@ btree_xlog_insert(bool redo, bool isleaf, bool ismeta, } static void -btree_xlog_split(bool redo, bool onleft, bool isroot, +btree_xlog_split(bool onleft, bool isroot, XLogRecPtr lsn, XLogRecord *record) { xl_btree_split *xlrec = (xl_btree_split *) XLogRecGetData(record); @@ -254,9 +235,8 @@ btree_xlog_split(bool redo, bool onleft, bool isroot, Buffer buffer; Page page; BTPageOpaque pageop; - char *op = (redo) ? "redo" : "undo"; - reln = XLogOpenRelation(redo, RM_BTREE_ID, xlrec->target.node); + reln = XLogOpenRelation(xlrec->target.node); if (!RelationIsValid(reln)) return; @@ -267,77 +247,51 @@ btree_xlog_split(bool redo, bool onleft, bool isroot, /* Left (original) sibling */ buffer = XLogReadBuffer(false, reln, leftsib); if (!BufferIsValid(buffer)) - elog(PANIC, "btree_split_%s: lost left sibling", op); + elog(PANIC, "btree_split_redo: lost left sibling"); page = (Page) BufferGetPage(buffer); - if (redo) - _bt_pageinit(page, BufferGetPageSize(buffer)); - else if (PageIsNew((PageHeader) page)) - elog(PANIC, "btree_split_undo: uninitialized left sibling"); + _bt_pageinit(page, BufferGetPageSize(buffer)); pageop = (BTPageOpaque) PageGetSpecialPointer(page); - if (redo) - { - pageop->btpo_prev = xlrec->leftblk; - pageop->btpo_next = rightsib; - pageop->btpo.level = xlrec->level; - pageop->btpo_flags = (xlrec->level == 0) ? BTP_LEAF : 0; + pageop->btpo_prev = xlrec->leftblk; + pageop->btpo_next = rightsib; + pageop->btpo.level = xlrec->level; + pageop->btpo_flags = (xlrec->level == 0) ? BTP_LEAF : 0; - _bt_restore_page(page, - (char *) xlrec + SizeOfBtreeSplit, - xlrec->leftlen); + _bt_restore_page(page, + (char *) xlrec + SizeOfBtreeSplit, + xlrec->leftlen); - PageSetLSN(page, lsn); - PageSetTLI(page, ThisTimeLineID); - LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - WriteBuffer(buffer); - } - else - { - /* undo */ - if (XLByteLT(PageGetLSN(page), lsn)) - elog(PANIC, "btree_split_undo: bad left sibling LSN"); - elog(PANIC, "btree_split_undo: unimplemented"); - } + PageSetLSN(page, lsn); + PageSetTLI(page, ThisTimeLineID); + LockBuffer(buffer, BUFFER_LOCK_UNLOCK); + WriteBuffer(buffer); /* Right (new) sibling */ - buffer = XLogReadBuffer((redo) ? true : false, reln, rightsib); + buffer = XLogReadBuffer(true, reln, rightsib); if (!BufferIsValid(buffer)) - elog(PANIC, "btree_split_%s: lost right sibling", op); + elog(PANIC, "btree_split_redo: lost right sibling"); page = (Page) BufferGetPage(buffer); - if (redo) - _bt_pageinit(page, BufferGetPageSize(buffer)); - else if (PageIsNew((PageHeader) page)) - elog(PANIC, "btree_split_undo: uninitialized right sibling"); + _bt_pageinit(page, BufferGetPageSize(buffer)); pageop = (BTPageOpaque) PageGetSpecialPointer(page); - if (redo) - { - pageop->btpo_prev = leftsib; - pageop->btpo_next = xlrec->rightblk; - pageop->btpo.level = xlrec->level; - pageop->btpo_flags = (xlrec->level == 0) ? BTP_LEAF : 0; + pageop->btpo_prev = leftsib; + pageop->btpo_next = xlrec->rightblk; + pageop->btpo.level = xlrec->level; + pageop->btpo_flags = (xlrec->level == 0) ? BTP_LEAF : 0; - _bt_restore_page(page, - (char *) xlrec + SizeOfBtreeSplit + xlrec->leftlen, + _bt_restore_page(page, + (char *) xlrec + SizeOfBtreeSplit + xlrec->leftlen, record->xl_len - SizeOfBtreeSplit - xlrec->leftlen); - PageSetLSN(page, lsn); - PageSetTLI(page, ThisTimeLineID); - LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - WriteBuffer(buffer); - } - else - { - /* undo */ - if (XLByteLT(PageGetLSN(page), lsn)) - elog(PANIC, "btree_split_undo: bad right sibling LSN"); - elog(PANIC, "btree_split_undo: unimplemented"); - } + PageSetLSN(page, lsn); + PageSetTLI(page, ThisTimeLineID); + LockBuffer(buffer, BUFFER_LOCK_UNLOCK); + WriteBuffer(buffer); /* Fix left-link of right (next) page */ - if (redo && !(record->xl_info & XLR_BKP_BLOCK_1)) + if (!(record->xl_info & XLR_BKP_BLOCK_1)) { if (xlrec->rightblk != P_NONE) { @@ -368,7 +322,7 @@ btree_xlog_split(bool redo, bool onleft, bool isroot, } /* Forget any split this insertion completes */ - if (redo && xlrec->level > 0 && incomplete_splits != NIL) + if (xlrec->level > 0 && incomplete_splits != NIL) { forget_matching_split(reln, xlrec->target.node, ItemPointerGetBlockNumber(&(xlrec->target.tid)), @@ -382,18 +336,18 @@ btree_xlog_split(bool redo, bool onleft, bool isroot, } static void -btree_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record) +btree_xlog_delete(XLogRecPtr lsn, XLogRecord *record) { xl_btree_delete *xlrec; Relation reln; Buffer buffer; Page page; - if (!redo || (record->xl_info & XLR_BKP_BLOCK_1)) + if (record->xl_info & XLR_BKP_BLOCK_1) return; xlrec = (xl_btree_delete *) XLogRecGetData(record); - reln = XLogOpenRelation(redo, RM_BTREE_ID, xlrec->node); + reln = XLogOpenRelation(xlrec->node); if (!RelationIsValid(reln)) return; buffer = XLogReadBuffer(false, reln, xlrec->block); @@ -428,7 +382,7 @@ btree_xlog_delete(bool redo, XLogRecPtr lsn, XLogRecord *record) } static void -btree_xlog_delete_page(bool redo, bool ismeta, +btree_xlog_delete_page(bool ismeta, XLogRecPtr lsn, XLogRecord *record) { xl_btree_delete_page *xlrec = (xl_btree_delete_page *) XLogRecGetData(record); @@ -440,9 +394,8 @@ btree_xlog_delete_page(bool redo, bool ismeta, Buffer buffer; Page page; BTPageOpaque pageop; - char *op = (redo) ? "redo" : "undo"; - reln = XLogOpenRelation(redo, RM_BTREE_ID, xlrec->target.node); + reln = XLogOpenRelation(xlrec->target.node); if (!RelationIsValid(reln)) return; @@ -452,7 +405,7 @@ btree_xlog_delete_page(bool redo, bool ismeta, rightsib = xlrec->rightblk; /* parent page */ - if (redo && !(record->xl_info & XLR_BKP_BLOCK_1)) + if (!(record->xl_info & XLR_BKP_BLOCK_1)) { buffer = XLogReadBuffer(false, reln, parent); if (!BufferIsValid(buffer)) @@ -498,7 +451,7 @@ btree_xlog_delete_page(bool redo, bool ismeta, } /* Fix left-link of right sibling */ - if (redo && !(record->xl_info & XLR_BKP_BLOCK_2)) + if (!(record->xl_info & XLR_BKP_BLOCK_2)) { buffer = XLogReadBuffer(false, reln, rightsib); if (!BufferIsValid(buffer)) @@ -524,7 +477,7 @@ btree_xlog_delete_page(bool redo, bool ismeta, } /* Fix right-link of left sibling, if any */ - if (redo && !(record->xl_info & XLR_BKP_BLOCK_3)) + if (!(record->xl_info & XLR_BKP_BLOCK_3)) { if (leftsib != P_NONE) { @@ -555,52 +508,36 @@ btree_xlog_delete_page(bool redo, bool ismeta, /* Rewrite target page as empty deleted page */ buffer = XLogReadBuffer(false, reln, target); if (!BufferIsValid(buffer)) - elog(PANIC, "btree_delete_page_%s: lost target page", op); + elog(PANIC, "btree_delete_page_redo: lost target page"); page = (Page) BufferGetPage(buffer); - if (redo) - _bt_pageinit(page, BufferGetPageSize(buffer)); - else if (PageIsNew((PageHeader) page)) - elog(PANIC, "btree_delete_page_undo: uninitialized target page"); + _bt_pageinit(page, BufferGetPageSize(buffer)); pageop = (BTPageOpaque) PageGetSpecialPointer(page); - if (redo) - { - pageop->btpo_prev = leftsib; - pageop->btpo_next = rightsib; - pageop->btpo.xact = FrozenTransactionId; - pageop->btpo_flags = BTP_DELETED; + pageop->btpo_prev = leftsib; + pageop->btpo_next = rightsib; + pageop->btpo.xact = FrozenTransactionId; + pageop->btpo_flags = BTP_DELETED; - PageSetLSN(page, lsn); - PageSetTLI(page, ThisTimeLineID); - LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - WriteBuffer(buffer); - } - else - { - /* undo */ - if (XLByteLT(PageGetLSN(page), lsn)) - elog(PANIC, "btree_delete_page_undo: bad left sibling LSN"); - elog(PANIC, "btree_delete_page_undo: unimplemented"); - } + PageSetLSN(page, lsn); + PageSetTLI(page, ThisTimeLineID); + LockBuffer(buffer, BUFFER_LOCK_UNLOCK); + WriteBuffer(buffer); /* Update metapage if needed */ - if (redo) /* metapage changes not undoable */ + if (ismeta) { - if (ismeta) - { - xl_btree_metadata md; + xl_btree_metadata md; - memcpy(&md, (char *) xlrec + SizeOfBtreeDeletePage, - sizeof(xl_btree_metadata)); - _bt_restore_meta(reln, lsn, - md.root, md.level, - md.fastroot, md.fastlevel); - } + memcpy(&md, (char *) xlrec + SizeOfBtreeDeletePage, + sizeof(xl_btree_metadata)); + _bt_restore_meta(reln, lsn, + md.root, md.level, + md.fastroot, md.fastlevel); } } static void -btree_xlog_newroot(bool redo, XLogRecPtr lsn, XLogRecord *record) +btree_xlog_newroot(XLogRecPtr lsn, XLogRecord *record) { xl_btree_newroot *xlrec = (xl_btree_newroot *) XLogRecGetData(record); Relation reln; @@ -608,10 +545,7 @@ btree_xlog_newroot(bool redo, XLogRecPtr lsn, XLogRecord *record) Page page; BTPageOpaque pageop; - if (!redo) - return; /* not undoable */ - - reln = XLogOpenRelation(redo, RM_BTREE_ID, xlrec->node); + reln = XLogOpenRelation(xlrec->node); if (!RelationIsValid(reln)) return; buffer = XLogReadBuffer(true, reln, xlrec->rootblk); @@ -654,15 +588,12 @@ btree_xlog_newroot(bool redo, XLogRecPtr lsn, XLogRecord *record) } static void -btree_xlog_newmeta(bool redo, XLogRecPtr lsn, XLogRecord *record) +btree_xlog_newmeta(XLogRecPtr lsn, XLogRecord *record) { xl_btree_newmeta *xlrec = (xl_btree_newmeta *) XLogRecGetData(record); Relation reln; - if (!redo) - return; /* not undoable */ - - reln = XLogOpenRelation(redo, RM_BTREE_ID, xlrec->node); + reln = XLogOpenRelation(xlrec->node); if (!RelationIsValid(reln)) return; @@ -680,94 +611,46 @@ btree_redo(XLogRecPtr lsn, XLogRecord *record) switch (info) { case XLOG_BTREE_INSERT_LEAF: - btree_xlog_insert(true, true, false, lsn, record); + btree_xlog_insert(true, false, lsn, record); break; case XLOG_BTREE_INSERT_UPPER: - btree_xlog_insert(true, false, false, lsn, record); + btree_xlog_insert(false, false, lsn, record); break; case XLOG_BTREE_INSERT_META: - btree_xlog_insert(true, false, true, lsn, record); + btree_xlog_insert(false, true, lsn, record); break; case XLOG_BTREE_SPLIT_L: - btree_xlog_split(true, true, false, lsn, record); + btree_xlog_split(true, false, lsn, record); break; case XLOG_BTREE_SPLIT_R: - btree_xlog_split(true, false, false, lsn, record); + btree_xlog_split(false, false, lsn, record); break; case XLOG_BTREE_SPLIT_L_ROOT: - btree_xlog_split(true, true, true, lsn, record); + btree_xlog_split(true, true, lsn, record); break; case XLOG_BTREE_SPLIT_R_ROOT: - btree_xlog_split(true, false, true, lsn, record); + btree_xlog_split(false, true, lsn, record); break; case XLOG_BTREE_DELETE: - btree_xlog_delete(true, lsn, record); + btree_xlog_delete(lsn, record); break; case XLOG_BTREE_DELETE_PAGE: - btree_xlog_delete_page(true, false, lsn, record); + btree_xlog_delete_page(false, lsn, record); break; case XLOG_BTREE_DELETE_PAGE_META: - btree_xlog_delete_page(true, true, lsn, record); + btree_xlog_delete_page(true, lsn, record); break; case XLOG_BTREE_NEWROOT: - btree_xlog_newroot(true, lsn, record); + btree_xlog_newroot(lsn, record); break; case XLOG_BTREE_NEWMETA: - btree_xlog_newmeta(true, lsn, record); + btree_xlog_newmeta(lsn, record); break; default: elog(PANIC, "btree_redo: unknown op code %u", info); } } -void -btree_undo(XLogRecPtr lsn, XLogRecord *record) -{ - uint8 info = record->xl_info & ~XLR_INFO_MASK; - - switch (info) - { - case XLOG_BTREE_INSERT_LEAF: - btree_xlog_insert(false, true, false, lsn, record); - break; - case XLOG_BTREE_INSERT_UPPER: - btree_xlog_insert(false, false, false, lsn, record); - break; - case XLOG_BTREE_INSERT_META: - btree_xlog_insert(false, false, true, lsn, record); - break; - case XLOG_BTREE_SPLIT_L: - btree_xlog_split(false, true, false, lsn, record); - break; - case XLOG_BTREE_SPLIT_R: - btree_xlog_split(false, false, false, lsn, record); - break; - case XLOG_BTREE_SPLIT_L_ROOT: - btree_xlog_split(false, true, true, lsn, record); - break; - case XLOG_BTREE_SPLIT_R_ROOT: - btree_xlog_split(false, false, true, lsn, record); - break; - case XLOG_BTREE_DELETE: - btree_xlog_delete(false, lsn, record); - break; - case XLOG_BTREE_DELETE_PAGE: - btree_xlog_delete_page(false, false, lsn, record); - break; - case XLOG_BTREE_DELETE_PAGE_META: - btree_xlog_delete_page(false, true, lsn, record); - break; - case XLOG_BTREE_NEWROOT: - btree_xlog_newroot(false, lsn, record); - break; - case XLOG_BTREE_NEWMETA: - btree_xlog_newmeta(false, lsn, record); - break; - default: - elog(PANIC, "btree_undo: unknown op code %u", info); - } -} - static void out_target(char *buf, xl_btreetid *target) { @@ -918,7 +801,7 @@ btree_xlog_cleanup(void) rpageop; bool is_only; - reln = XLogOpenRelation(true, RM_BTREE_ID, split->node); + reln = XLogOpenRelation(split->node); if (!RelationIsValid(reln)) continue; lbuf = XLogReadBuffer(false, reln, split->leftblk); diff --git a/src/backend/access/rtree/rtree.c b/src/backend/access/rtree/rtree.c index ce8fb655b6..e9eaa1941d 100644 --- a/src/backend/access/rtree/rtree.c +++ b/src/backend/access/rtree/rtree.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/rtree/rtree.c,v 1.89 2005/05/11 06:24:54 neilc Exp $ + * $PostgreSQL: pgsql/src/backend/access/rtree/rtree.c,v 1.90 2005/06/06 17:01:22 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1303,12 +1303,6 @@ rtree_redo(XLogRecPtr lsn, XLogRecord *record) elog(PANIC, "rtree_redo: unimplemented"); } -void -rtree_undo(XLogRecPtr lsn, XLogRecord *record) -{ - elog(PANIC, "rtree_undo: unimplemented"); -} - void rtree_desc(char *buf, uint8 xl_info, char *rec) { diff --git a/src/backend/access/transam/clog.c b/src/backend/access/transam/clog.c index 9e572b4361..73362330c1 100644 --- a/src/backend/access/transam/clog.c +++ b/src/backend/access/transam/clog.c @@ -24,7 +24,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/access/transam/clog.c,v 1.28 2004/12/31 21:59:29 pgsql Exp $ + * $PostgreSQL: pgsql/src/backend/access/transam/clog.c,v 1.29 2005/06/06 17:01:22 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -411,11 +411,6 @@ clog_redo(XLogRecPtr lsn, XLogRecord *record) } } -void -clog_undo(XLogRecPtr lsn, XLogRecord *record) -{ -} - void clog_desc(char *buf, uint8 xl_info, char *rec) { diff --git a/src/backend/access/transam/rmgr.c b/src/backend/access/transam/rmgr.c index 93e5c3eba7..39d647f8a6 100644 --- a/src/backend/access/transam/rmgr.c +++ b/src/backend/access/transam/rmgr.c @@ -3,7 +3,7 @@ * * Resource managers definition * - * $PostgreSQL: pgsql/src/backend/access/transam/rmgr.c,v 1.17 2005/05/17 03:34:18 neilc Exp $ + * $PostgreSQL: pgsql/src/backend/access/transam/rmgr.c,v 1.18 2005/06/06 17:01:22 tgl Exp $ */ #include "postgres.h" @@ -22,21 +22,20 @@ const RmgrData RmgrTable[RM_MAX_ID + 1] = { - {"XLOG", xlog_redo, xlog_undo, xlog_desc, NULL, NULL}, - {"Transaction", xact_redo, xact_undo, xact_desc, NULL, NULL}, - {"Storage", smgr_redo, smgr_undo, smgr_desc, NULL, NULL}, - {"CLOG", clog_redo, clog_undo, clog_desc, NULL, NULL}, - {"Database", dbase_redo, dbase_undo, dbase_desc, NULL, NULL}, - {"Tablespace", tblspc_redo, tblspc_undo, tblspc_desc, NULL, NULL}, - {"Reserved 6", NULL, NULL, NULL, NULL, NULL}, - {"Reserved 7", NULL, NULL, NULL, NULL, NULL}, - {"Reserved 8", NULL, NULL, NULL, NULL, NULL}, - {"Reserved 9", NULL, NULL, NULL, NULL, NULL}, - {"Heap", heap_redo, heap_undo, heap_desc, NULL, NULL}, - {"Btree", btree_redo, btree_undo, btree_desc, - btree_xlog_startup, btree_xlog_cleanup}, - {"Hash", hash_redo, hash_undo, hash_desc, NULL, NULL}, - {"Rtree", rtree_redo, rtree_undo, rtree_desc, NULL, NULL}, - {"Gist", gist_redo, gist_undo, gist_desc, NULL, NULL}, - {"Sequence", seq_redo, seq_undo, seq_desc, NULL, NULL} + {"XLOG", xlog_redo, xlog_desc, NULL, NULL}, + {"Transaction", xact_redo, xact_desc, NULL, NULL}, + {"Storage", smgr_redo, smgr_desc, NULL, NULL}, + {"CLOG", clog_redo, clog_desc, NULL, NULL}, + {"Database", dbase_redo, dbase_desc, NULL, NULL}, + {"Tablespace", tblspc_redo, tblspc_desc, NULL, NULL}, + {"Reserved 6", NULL, NULL, NULL, NULL}, + {"Reserved 7", NULL, NULL, NULL, NULL}, + {"Reserved 8", NULL, NULL, NULL, NULL}, + {"Reserved 9", NULL, NULL, NULL, NULL}, + {"Heap", heap_redo, heap_desc, NULL, NULL}, + {"Btree", btree_redo, btree_desc, btree_xlog_startup, btree_xlog_cleanup}, + {"Hash", hash_redo, hash_desc, NULL, NULL}, + {"Rtree", rtree_redo, rtree_desc, NULL, NULL}, + {"Gist", gist_redo, gist_desc, NULL, NULL}, + {"Sequence", seq_redo, seq_desc, NULL, NULL} }; diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 894404903f..3eb58a96a8 100644 --- a/src/backend/access/transam/xact.c +++ b/src/backend/access/transam/xact.c @@ -10,7 +10,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.202 2005/05/19 23:58:51 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.203 2005/06/06 17:01:22 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -3844,17 +3844,6 @@ xact_redo(XLogRecPtr lsn, XLogRecord *record) elog(PANIC, "xact_redo: unknown op code %u", info); } -void -xact_undo(XLogRecPtr lsn, XLogRecord *record) -{ - uint8 info = record->xl_info & ~XLR_INFO_MASK; - - if (info == XLOG_XACT_COMMIT) /* shouldn't be called by XLOG */ - elog(PANIC, "xact_undo: can't undo committed xaction"); - else if (info != XLOG_XACT_ABORT) - elog(PANIC, "xact_redo: unknown op code %u", info); -} - void xact_desc(char *buf, uint8 xl_info, char *rec) { diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 27f6354987..c1609356d3 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.195 2005/06/02 05:55:28 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.196 2005/06/06 17:01:23 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -2372,7 +2372,7 @@ RestoreBkpBlocks(XLogRecord *record, XLogRecPtr lsn) memcpy(&bkpb, blk, sizeof(BkpBlock)); blk += sizeof(BkpBlock); - reln = XLogOpenRelation(true, record->xl_rmid, bkpb.node); + reln = XLogOpenRelation(bkpb.node); if (reln) { @@ -5308,11 +5308,6 @@ xlog_redo(XLogRecPtr lsn, XLogRecord *record) } } -void -xlog_undo(XLogRecPtr lsn, XLogRecord *record) -{ -} - void xlog_desc(char *buf, uint8 xl_info, char *rec) { diff --git a/src/backend/access/transam/xlogutils.c b/src/backend/access/transam/xlogutils.c index 72833a755f..55caf84a04 100644 --- a/src/backend/access/transam/xlogutils.c +++ b/src/backend/access/transam/xlogutils.c @@ -11,7 +11,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/access/transam/xlogutils.c,v 1.37 2005/05/29 04:23:03 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/transam/xlogutils.c,v 1.38 2005/06/06 17:01:23 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -186,7 +186,7 @@ XLogCloseRelationCache(void) * Open a relation during XLOG replay */ Relation -XLogOpenRelation(bool redo, RmgrId rmid, RelFileNode rnode) +XLogOpenRelation(RelFileNode rnode) { XLogRelDesc *res; XLogRelCacheEntry *hentry; diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index 22a9afd076..370977c658 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -15,7 +15,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.157 2005/05/19 21:35:45 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/commands/dbcommands.c,v 1.158 2005/06/06 17:01:23 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1334,12 +1334,6 @@ dbase_redo(XLogRecPtr lsn, XLogRecord *record) elog(PANIC, "dbase_redo: unknown op code %u", info); } -void -dbase_undo(XLogRecPtr lsn, XLogRecord *record) -{ - elog(PANIC, "dbase_undo: unimplemented"); -} - void dbase_desc(char *buf, uint8 xl_info, char *rec) { diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index 69e8cd039e..3278be1239 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/sequence.c,v 1.120 2005/05/27 00:57:49 neilc Exp $ + * $PostgreSQL: pgsql/src/backend/commands/sequence.c,v 1.121 2005/06/06 17:01:23 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1077,7 +1077,7 @@ seq_redo(XLogRecPtr lsn, XLogRecord *record) if (info != XLOG_SEQ_LOG) elog(PANIC, "seq_redo: unknown op code %u", info); - reln = XLogOpenRelation(true, RM_SEQ_ID, xlrec->node); + reln = XLogOpenRelation(xlrec->node); if (!RelationIsValid(reln)) return; @@ -1107,11 +1107,6 @@ seq_redo(XLogRecPtr lsn, XLogRecord *record) WriteBuffer(buffer); } -void -seq_undo(XLogRecPtr lsn, XLogRecord *record) -{ -} - void seq_desc(char *buf, uint8 xl_info, char *rec) { diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c index bf62aec528..f9041a0a64 100644 --- a/src/backend/commands/tablespace.c +++ b/src/backend/commands/tablespace.c @@ -37,7 +37,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/tablespace.c,v 1.19 2005/05/10 22:27:29 momjian Exp $ + * $PostgreSQL: pgsql/src/backend/commands/tablespace.c,v 1.20 2005/06/06 17:01:23 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1064,12 +1064,6 @@ tblspc_redo(XLogRecPtr lsn, XLogRecord *record) elog(PANIC, "tblspc_redo: unknown op code %u", info); } -void -tblspc_undo(XLogRecPtr lsn, XLogRecord *record) -{ - elog(PANIC, "tblspc_undo: unimplemented"); -} - void tblspc_desc(char *buf, uint8 xl_info, char *rec) { diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c index 0b5a7154d3..ca171a3b1a 100644 --- a/src/backend/storage/smgr/smgr.c +++ b/src/backend/storage/smgr/smgr.c @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/storage/smgr/smgr.c,v 1.87 2005/05/29 04:23:05 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/storage/smgr/smgr.c,v 1.88 2005/06/06 17:01:24 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -908,13 +908,6 @@ smgr_redo(XLogRecPtr lsn, XLogRecord *record) elog(PANIC, "smgr_redo: unknown op code %u", info); } -void -smgr_undo(XLogRecPtr lsn, XLogRecord *record) -{ - /* Since we have no transactional WAL entries, should never undo */ - elog(PANIC, "smgr_undo: cannot undo"); -} - void smgr_desc(char *buf, uint8 xl_info, char *rec) { diff --git a/src/backend/utils/init/flatfiles.c b/src/backend/utils/init/flatfiles.c index e58c1102c2..49495abfdd 100644 --- a/src/backend/utils/init/flatfiles.c +++ b/src/backend/utils/init/flatfiles.c @@ -22,7 +22,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/utils/init/flatfiles.c,v 1.6 2005/04/14 20:03:26 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/utils/init/flatfiles.c,v 1.7 2005/06/06 17:01:24 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -645,7 +645,7 @@ BuildFlatFiles(bool database_only) rnode.relNode = DatabaseRelationId; /* No locking is needed because no one else is alive yet */ - rel = XLogOpenRelation(true, 0, rnode); + rel = XLogOpenRelation(rnode); write_database_file(rel); if (!database_only) @@ -655,7 +655,7 @@ BuildFlatFiles(bool database_only) rnode.dbNode = 0; rnode.relNode = GroupRelationId; - rel = XLogOpenRelation(true, 0, rnode); + rel = XLogOpenRelation(rnode); write_group_file(rel); /* hard-wired path to pg_shadow */ @@ -663,7 +663,7 @@ BuildFlatFiles(bool database_only) rnode.dbNode = 0; rnode.relNode = ShadowRelationId; - rel = XLogOpenRelation(true, 0, rnode); + rel = XLogOpenRelation(rnode); write_user_file(rel); } diff --git a/src/include/access/clog.h b/src/include/access/clog.h index c8f2ccaa28..d03c5904f2 100644 --- a/src/include/access/clog.h +++ b/src/include/access/clog.h @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/clog.h,v 1.12 2004/12/31 22:03:21 pgsql Exp $ + * $PostgreSQL: pgsql/src/include/access/clog.h,v 1.13 2005/06/06 17:01:24 tgl Exp $ */ #ifndef CLOG_H #define CLOG_H @@ -44,7 +44,6 @@ extern void TruncateCLOG(TransactionId oldestXact); #define CLOG_ZEROPAGE 0x00 extern void clog_redo(XLogRecPtr lsn, XLogRecord *record); -extern void clog_undo(XLogRecPtr lsn, XLogRecord *record); extern void clog_desc(char *buf, uint8 xl_info, char *rec); #endif /* CLOG_H */ diff --git a/src/include/access/gist_private.h b/src/include/access/gist_private.h index a34e29d0e0..db255a7b6f 100644 --- a/src/include/access/gist_private.h +++ b/src/include/access/gist_private.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/gist_private.h,v 1.1 2005/05/17 03:34:18 neilc Exp $ + * $PostgreSQL: pgsql/src/include/access/gist_private.h,v 1.2 2005/06/06 17:01:24 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -99,8 +99,8 @@ extern void freeGISTstate(GISTSTATE *giststate); extern void gistdentryinit(GISTSTATE *giststate, int nkey, GISTENTRY *e, Datum k, Relation r, Page pg, OffsetNumber o, int b, bool l, bool isNull); + extern void gist_redo(XLogRecPtr lsn, XLogRecord *record); -extern void gist_undo(XLogRecPtr lsn, XLogRecord *record); extern void gist_desc(char *buf, uint8 xl_info, char *rec); /* gistget.c */ diff --git a/src/include/access/hash.h b/src/include/access/hash.h index e6ad35300b..1e40232b51 100644 --- a/src/include/access/hash.h +++ b/src/include/access/hash.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/hash.h,v 1.61 2005/03/27 23:53:04 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/hash.h,v 1.62 2005/06/06 17:01:24 tgl Exp $ * * NOTES * modeled after Margo Seltzer's hash implementation for unix. @@ -314,7 +314,6 @@ extern void _hash_checkpage(Relation rel, Page page, int flags); /* hash.c */ extern void hash_redo(XLogRecPtr lsn, XLogRecord *record); -extern void hash_undo(XLogRecPtr lsn, XLogRecord *record); extern void hash_desc(char *buf, uint8 xl_info, char *rec); #endif /* HASH_H */ diff --git a/src/include/access/heapam.h b/src/include/access/heapam.h index 9138186ba6..151a62f9b6 100644 --- a/src/include/access/heapam.h +++ b/src/include/access/heapam.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/heapam.h,v 1.100 2005/04/28 21:47:16 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/heapam.h,v 1.101 2005/06/06 17:01:24 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -173,7 +173,6 @@ extern void heap_markpos(HeapScanDesc scan); extern void heap_restrpos(HeapScanDesc scan); extern void heap_redo(XLogRecPtr lsn, XLogRecord *rptr); -extern void heap_undo(XLogRecPtr lsn, XLogRecord *rptr); extern void heap_desc(char *buf, uint8 xl_info, char *rec); extern XLogRecPtr log_heap_clean(Relation reln, Buffer buffer, OffsetNumber *unused, int uncnt); diff --git a/src/include/access/nbtree.h b/src/include/access/nbtree.h index d1c0df6b32..f522cd2799 100644 --- a/src/include/access/nbtree.h +++ b/src/include/access/nbtree.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/nbtree.h,v 1.85 2005/03/27 23:53:04 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/nbtree.h,v 1.86 2005/06/06 17:01:24 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -485,7 +485,6 @@ extern void _bt_leafbuild(BTSpool *btspool, BTSpool *spool2); * prototypes for functions in nbtxlog.c */ extern void btree_redo(XLogRecPtr lsn, XLogRecord *record); -extern void btree_undo(XLogRecPtr lsn, XLogRecord *record); extern void btree_desc(char *buf, uint8 xl_info, char *rec); extern void btree_xlog_startup(void); extern void btree_xlog_cleanup(void); diff --git a/src/include/access/rmgr.h b/src/include/access/rmgr.h index b01f805887..17ef0d7866 100644 --- a/src/include/access/rmgr.h +++ b/src/include/access/rmgr.h @@ -3,7 +3,7 @@ * * Resource managers definition * - * $PostgreSQL: pgsql/src/include/access/rmgr.h,v 1.13 2004/08/29 21:08:47 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/rmgr.h,v 1.14 2005/06/06 17:01:24 tgl Exp $ */ #ifndef RMGR_H #define RMGR_H @@ -19,6 +19,7 @@ typedef uint8 RmgrId; #define RM_CLOG_ID 3 #define RM_DBASE_ID 4 #define RM_TBLSPC_ID 5 +#define RM_MULTIXACT_ID 6 #define RM_HEAP_ID 10 #define RM_BTREE_ID 11 #define RM_HASH_ID 12 diff --git a/src/include/access/rtree.h b/src/include/access/rtree.h index c057160a79..14a13f4b3a 100644 --- a/src/include/access/rtree.h +++ b/src/include/access/rtree.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/rtree.h,v 1.38 2005/03/27 23:53:04 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/rtree.h,v 1.39 2005/06/06 17:01:24 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -127,7 +127,6 @@ extern Datum rtbuild(PG_FUNCTION_ARGS); extern void _rtdump(Relation r); extern void rtree_redo(XLogRecPtr lsn, XLogRecord *record); -extern void rtree_undo(XLogRecPtr lsn, XLogRecord *record); extern void rtree_desc(char *buf, uint8 xl_info, char *rec); /* rtscan.c */ diff --git a/src/include/access/xact.h b/src/include/access/xact.h index 0d3a638342..7c949899ac 100644 --- a/src/include/access/xact.h +++ b/src/include/access/xact.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/xact.h,v 1.75 2005/03/28 01:50:34 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/xact.h,v 1.76 2005/06/06 17:01:24 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -146,7 +146,6 @@ extern void RecordTransactionCommit(void); extern int xactGetCommittedChildren(TransactionId **ptr); extern void xact_redo(XLogRecPtr lsn, XLogRecord *record); -extern void xact_undo(XLogRecPtr lsn, XLogRecord *record); extern void xact_desc(char *buf, uint8 xl_info, char *rec); #endif /* XACT_H */ diff --git a/src/include/access/xlog.h b/src/include/access/xlog.h index 1d1aa9c152..554c3c3aec 100644 --- a/src/include/access/xlog.h +++ b/src/include/access/xlog.h @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/xlog.h,v 1.62 2005/06/02 05:55:29 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/xlog.h,v 1.63 2005/06/06 17:01:24 tgl Exp $ */ #ifndef XLOG_H #define XLOG_H @@ -135,7 +135,6 @@ extern XLogRecPtr XLogInsert(RmgrId rmid, uint8 info, XLogRecData *rdata); extern void XLogFlush(XLogRecPtr RecPtr); extern void xlog_redo(XLogRecPtr lsn, XLogRecord *record); -extern void xlog_undo(XLogRecPtr lsn, XLogRecord *record); extern void xlog_desc(char *buf, uint8 xl_info, char *rec); extern void UpdateControlFile(void); diff --git a/src/include/access/xlog_internal.h b/src/include/access/xlog_internal.h index a0b0b761cc..76e20b0355 100644 --- a/src/include/access/xlog_internal.h +++ b/src/include/access/xlog_internal.h @@ -5,13 +5,13 @@ * * NOTE: this file is intended to contain declarations useful for * manipulating the XLOG files directly, but it is not supposed to be - * needed by rmgr routines (redo/undo support for individual record types). + * needed by rmgr routines (redo support for individual record types). * So the XLogRecord typedef and associated stuff appear in xlog.h. * * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/xlog_internal.h,v 1.7 2005/06/02 05:55:29 tgl Exp $ + * $PostgreSQL: pgsql/src/include/access/xlog_internal.h,v 1.8 2005/06/06 17:01:25 tgl Exp $ */ #ifndef XLOG_INTERNAL_H #define XLOG_INTERNAL_H @@ -224,7 +224,6 @@ typedef struct RmgrData { const char *rm_name; void (*rm_redo) (XLogRecPtr lsn, XLogRecord *rptr); - void (*rm_undo) (XLogRecPtr lsn, XLogRecord *rptr); void (*rm_desc) (char *buf, uint8 xl_info, char *rec); void (*rm_startup) (void); void (*rm_cleanup) (void); diff --git a/src/include/access/xlogutils.h b/src/include/access/xlogutils.h index b0d6efa559..a4ac26dc40 100644 --- a/src/include/access/xlogutils.h +++ b/src/include/access/xlogutils.h @@ -6,12 +6,11 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/access/xlogutils.h,v 1.17 2004/12/31 22:03:21 pgsql Exp $ + * $PostgreSQL: pgsql/src/include/access/xlogutils.h,v 1.18 2005/06/06 17:01:25 tgl Exp $ */ #ifndef XLOG_UTILS_H #define XLOG_UTILS_H -#include "access/rmgr.h" #include "storage/buf.h" #include "utils/rel.h" @@ -19,7 +18,7 @@ extern void XLogInitRelationCache(void); extern void XLogCloseRelationCache(void); -extern Relation XLogOpenRelation(bool redo, RmgrId rmid, RelFileNode rnode); +extern Relation XLogOpenRelation(RelFileNode rnode); extern void XLogCloseRelation(RelFileNode rnode); extern Buffer XLogReadBuffer(bool extend, Relation reln, BlockNumber blkno); diff --git a/src/include/commands/dbcommands.h b/src/include/commands/dbcommands.h index 8bdbd860c4..7ffd7abeb0 100644 --- a/src/include/commands/dbcommands.h +++ b/src/include/commands/dbcommands.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/commands/dbcommands.h,v 1.37 2005/03/23 00:03:37 tgl Exp $ + * $PostgreSQL: pgsql/src/include/commands/dbcommands.h,v 1.38 2005/06/06 17:01:25 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -71,7 +71,6 @@ extern Oid get_database_oid(const char *dbname); extern char *get_database_name(Oid dbid); extern void dbase_redo(XLogRecPtr lsn, XLogRecord *rptr); -extern void dbase_undo(XLogRecPtr lsn, XLogRecord *rptr); extern void dbase_desc(char *buf, uint8 xl_info, char *rec); #endif /* DBCOMMANDS_H */ diff --git a/src/include/commands/sequence.h b/src/include/commands/sequence.h index df21ef44ec..4801753886 100644 --- a/src/include/commands/sequence.h +++ b/src/include/commands/sequence.h @@ -6,7 +6,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/commands/sequence.h,v 1.30 2004/12/31 22:03:28 pgsql Exp $ + * $PostgreSQL: pgsql/src/include/commands/sequence.h,v 1.31 2005/06/06 17:01:25 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -89,7 +89,6 @@ extern void DefineSequence(CreateSeqStmt *stmt); extern void AlterSequence(AlterSeqStmt *stmt); extern void seq_redo(XLogRecPtr lsn, XLogRecord *rptr); -extern void seq_undo(XLogRecPtr lsn, XLogRecord *rptr); extern void seq_desc(char *buf, uint8 xl_info, char *rec); /* Set the upper and lower bounds of a sequence */ diff --git a/src/include/commands/tablespace.h b/src/include/commands/tablespace.h index a6debc4f09..fe99a191a3 100644 --- a/src/include/commands/tablespace.h +++ b/src/include/commands/tablespace.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/commands/tablespace.h,v 1.8 2004/12/31 22:03:28 pgsql Exp $ + * $PostgreSQL: pgsql/src/include/commands/tablespace.h,v 1.9 2005/06/06 17:01:25 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -48,7 +48,6 @@ extern char *get_tablespace_name(Oid spc_oid); extern bool directory_is_empty(const char *path); extern void tblspc_redo(XLogRecPtr lsn, XLogRecord *rptr); -extern void tblspc_undo(XLogRecPtr lsn, XLogRecord *rptr); extern void tblspc_desc(char *buf, uint8 xl_info, char *rec); #endif /* TABLESPACE_H */ diff --git a/src/include/storage/smgr.h b/src/include/storage/smgr.h index e10aa6a8d1..f00a8aeb83 100644 --- a/src/include/storage/smgr.h +++ b/src/include/storage/smgr.h @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/include/storage/smgr.h,v 1.50 2005/01/10 20:02:23 tgl Exp $ + * $PostgreSQL: pgsql/src/include/storage/smgr.h,v 1.51 2005/06/06 17:01:25 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -84,7 +84,6 @@ extern void smgrabort(void); extern void smgrsync(void); extern void smgr_redo(XLogRecPtr lsn, XLogRecord *record); -extern void smgr_undo(XLogRecPtr lsn, XLogRecord *record); extern void smgr_desc(char *buf, uint8 xl_info, char *rec);