diff --git a/src/backend/access/heap/heapam.c b/src/backend/access/heap/heapam.c index b502086300..9876f8b695 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.185 2005/03/27 23:52:58 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/heap/heapam.c,v 1.186 2005/03/28 01:50:32 tgl Exp $ * * * INTERFACE ROUTINES @@ -53,9 +53,6 @@ #include "pgstat.h" -/* comments are in heap_update */ -static xl_heaptid _locked_tuple_; -static void _heap_unlock_tuple(void *data); static XLogRecPtr log_heap_update(Relation reln, Buffer oldbuf, ItemPointerData from, Buffer newbuf, HeapTuple newtup, bool move); @@ -1620,15 +1617,7 @@ l2: * context lock (but not the pin!) on the old tuple's buffer while we * are off doing TOAST and/or table-file-extension work. We must mark * the old tuple to show that it's already being updated, else other - * processes may try to update it themselves. To avoid second XLOG log - * record, we use xact mgr hook to unlock old tuple without reading - * log if xact will abort before update is logged. In the event of - * crash prio logging, TQUAL routines will see HEAP_XMAX_UNLOGGED - * flag... - * - * NOTE: this trick is useless currently but saved for future when we'll - * implement UNDO and will re-use transaction IDs after postmaster - * startup. + * processes may try to update it themselves. * * We need to invoke the toaster if there are already any out-of-line * toasted values present, or if the new tuple is over-threshold. @@ -1642,15 +1631,10 @@ l2: if (need_toast || newtupsize > pagefree) { - _locked_tuple_.node = relation->rd_node; - _locked_tuple_.tid = oldtup.t_self; - XactPushRollback(_heap_unlock_tuple, (void *) &_locked_tuple_); - oldtup.t_data->t_infomask &= ~(HEAP_XMAX_COMMITTED | HEAP_XMAX_INVALID | HEAP_MARKED_FOR_UPDATE | HEAP_MOVED); - oldtup.t_data->t_infomask |= HEAP_XMAX_UNLOGGED; HeapTupleHeaderSetXmax(oldtup.t_data, xid); HeapTupleHeaderSetCmax(oldtup.t_data, cid); already_marked = true; @@ -1731,12 +1715,7 @@ l2: RelationPutHeapTuple(relation, newbuf, newtup); /* insert new tuple */ - if (already_marked) - { - oldtup.t_data->t_infomask &= ~HEAP_XMAX_UNLOGGED; - XactPopRollback(); - } - else + if (!already_marked) { oldtup.t_data->t_infomask &= ~(HEAP_XMAX_COMMITTED | HEAP_XMAX_INVALID | @@ -2585,48 +2564,6 @@ newsame:; } -static void -_heap_unlock_tuple(void *data) -{ - TransactionId xid = GetCurrentTransactionId(); - xl_heaptid *xltid = (xl_heaptid *) data; - Relation reln = XLogOpenRelation(false, RM_HEAP_ID, xltid->node); - Buffer buffer; - Page page; - OffsetNumber offnum; - ItemId lp; - HeapTupleHeader htup; - - if (!RelationIsValid(reln)) - elog(PANIC, "_heap_unlock_tuple: can't open relation"); - - buffer = XLogReadBuffer(false, reln, - ItemPointerGetBlockNumber(&(xltid->tid))); - if (!BufferIsValid(buffer)) - elog(PANIC, "_heap_unlock_tuple: can't read buffer"); - - page = (Page) BufferGetPage(buffer); - if (PageIsNew((PageHeader) page)) - elog(PANIC, "_heap_unlock_tuple: uninitialized page"); - - offnum = ItemPointerGetOffsetNumber(&(xltid->tid)); - if (offnum > PageGetMaxOffsetNumber(page)) - elog(PANIC, "_heap_unlock_tuple: invalid itemid"); - lp = PageGetItemId(page, offnum); - - if (!ItemIdIsUsed(lp) || ItemIdDeleted(lp)) - elog(PANIC, "_heap_unlock_tuple: unused/deleted tuple in rollback"); - - htup = (HeapTupleHeader) PageGetItem(page, lp); - - if (!TransactionIdEquals(HeapTupleHeaderGetXmax(htup), xid)) - elog(PANIC, "_heap_unlock_tuple: invalid xmax in rollback"); - htup->t_infomask &= ~HEAP_XMAX_UNLOGGED; - htup->t_infomask |= HEAP_XMAX_INVALID; - LockBuffer(buffer, BUFFER_LOCK_UNLOCK); - WriteBuffer(buffer); -} - void heap_redo(XLogRecPtr lsn, XLogRecord *record) { diff --git a/src/backend/access/transam/xact.c b/src/backend/access/transam/xact.c index 5c84bb9955..b5bb3d5b1f 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.197 2005/02/20 21:46:48 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/transam/xact.c,v 1.198 2005/03/28 01:50:33 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -196,9 +196,6 @@ typedef struct SubXactCallbackItem static SubXactCallbackItem *SubXact_callbacks = NULL; -static void (*_RollbackFunc) (void *) = NULL; -static void *_RollbackData = NULL; - /* local function prototypes */ static void AssignSubTransactionId(TransactionState s); @@ -3902,21 +3899,3 @@ xact_desc(char *buf, uint8 xl_info, char *rec) else strcat(buf, "UNKNOWN"); } - -void - XactPushRollback(void (*func) (void *), void *data) -{ -#ifdef XLOG_II - if (_RollbackFunc != NULL) - elog(PANIC, "XactPushRollback: already installed"); -#endif - - _RollbackFunc = func; - _RollbackData = data; -} - -void -XactPopRollback(void) -{ - _RollbackFunc = NULL; -} diff --git a/src/include/access/htup.h b/src/include/access/htup.h index 51da662df1..e57ce8a3cb 100644 --- a/src/include/access/htup.h +++ b/src/include/access/htup.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/htup.h,v 1.72 2004/12/31 22:03:21 pgsql Exp $ + * $PostgreSQL: pgsql/src/include/access/htup.h,v 1.73 2005/03/28 01:50:34 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -152,9 +152,7 @@ typedef HeapTupleHeaderData *HeapTupleHeader; * attribute(s) */ #define HEAP_HASEXTENDED 0x000C /* the two above combined */ #define HEAP_HASOID 0x0010 /* has an object-id field */ -/* 0x0020 and 0x0040 are unused */ -#define HEAP_XMAX_UNLOGGED 0x0080 /* to lock tuple for update - * without logging */ +/* 0x0020, 0x0040 and 0x0080 are unused */ #define HEAP_XMIN_COMMITTED 0x0100 /* t_xmin committed */ #define HEAP_XMIN_INVALID 0x0200 /* t_xmin invalid/aborted */ #define HEAP_XMAX_COMMITTED 0x0400 /* t_xmax committed */ diff --git a/src/include/access/xact.h b/src/include/access/xact.h index 0039b5b124..0d3a638342 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.74 2004/12/31 22:03:21 pgsql Exp $ + * $PostgreSQL: pgsql/src/include/access/xact.h,v 1.75 2005/03/28 01:50:34 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -145,9 +145,6 @@ extern void RecordTransactionCommit(void); extern int xactGetCommittedChildren(TransactionId **ptr); -extern void XactPushRollback(void (*func) (void *), void *data); -extern void XactPopRollback(void); - 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);