diff options
| author | Bruce Momjian | 2002-06-15 19:54:24 +0000 |
|---|---|---|
| committer | Bruce Momjian | 2002-06-15 19:54:24 +0000 |
| commit | 3c35face4108af1dcd94a02bd71c820fe1899216 (patch) | |
| tree | a776e57b2bd027b19018e1d15f19de379ec68785 /src/backend/commands | |
| parent | 78821799949dc0c96ff2c9071902cddb0e7a7e5a (diff) | |
This patch wraps all accesses to t_xmin, t_cmin, t_xmax, and t_cmax in
HeapTupleHeaderData in setter and getter macros called
HeapTupleHeaderGetXmin, HeapTupleHeaderSetXmin etc.
It also introduces a "virtual" field xvac by defining
HeapTupleHeaderGetXvac and HeapTupleHeaderSetXvac. Xvac is used by
VACUUM, in fact it is stored in t_cmin.
Manfred Koizar
Diffstat (limited to 'src/backend/commands')
| -rw-r--r-- | src/backend/commands/sequence.c | 6 | ||||
| -rw-r--r-- | src/backend/commands/vacuum.c | 53 | ||||
| -rw-r--r-- | src/backend/commands/vacuumlazy.c | 8 |
3 files changed, 34 insertions, 33 deletions
diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index 8d90c81d3cb..71a5a561dea 100644 --- a/src/backend/commands/sequence.c +++ b/src/backend/commands/sequence.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.79 2002/05/22 21:40:55 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.80 2002/06/15 19:54:23 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -249,10 +249,10 @@ DefineSequence(CreateSeqStmt *seq) itemId = PageGetItemId((Page) page, FirstOffsetNumber); item = PageGetItem((Page) page, itemId); - ((HeapTupleHeader) item)->t_xmin = FrozenTransactionId; + HeapTupleHeaderSetXmin((HeapTupleHeader) item, FrozenTransactionId); ((HeapTupleHeader) item)->t_infomask |= HEAP_XMIN_COMMITTED; - tuple->t_data->t_xmin = FrozenTransactionId; + HeapTupleHeaderSetXmin(tuple->t_data, FrozenTransactionId); tuple->t_data->t_infomask |= HEAP_XMIN_COMMITTED; } diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index 8bb66f0799d..acbcd4ce113 100644 --- a/src/backend/commands/vacuum.c +++ b/src/backend/commands/vacuum.c @@ -13,7 +13,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.227 2002/06/13 19:52:02 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.228 2002/06/15 19:54:23 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -1080,11 +1080,11 @@ scan_heap(VRelStats *vacrelstats, Relation onerel, * Tuple is good. Consider whether to replace its * xmin value with FrozenTransactionId. */ - if (TransactionIdIsNormal(tuple.t_data->t_xmin) && - TransactionIdPrecedes(tuple.t_data->t_xmin, + if (TransactionIdIsNormal(HeapTupleHeaderGetXmin(tuple.t_data)) && + TransactionIdPrecedes(HeapTupleHeaderGetXmin(tuple.t_data), FreezeLimit)) { - tuple.t_data->t_xmin = FrozenTransactionId; + HeapTupleHeaderSetXmin(tuple.t_data, FrozenTransactionId); /* infomask should be okay already */ Assert(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED); pgchanged = true; @@ -1127,7 +1127,7 @@ scan_heap(VRelStats *vacrelstats, Relation onerel, * lock on the relation; shouldn't we raise an error? */ elog(WARNING, "Rel %s: TID %u/%u: InsertTransactionInProgress %u - can't shrink relation", - relname, blkno, offnum, tuple.t_data->t_xmin); + relname, blkno, offnum, HeapTupleHeaderGetXmin(tuple.t_data)); do_shrinking = false; break; case HEAPTUPLE_DELETE_IN_PROGRESS: @@ -1137,7 +1137,7 @@ scan_heap(VRelStats *vacrelstats, Relation onerel, * lock on the relation; shouldn't we raise an error? */ elog(WARNING, "Rel %s: TID %u/%u: DeleteTransactionInProgress %u - can't shrink relation", - relname, blkno, offnum, tuple.t_data->t_xmax); + relname, blkno, offnum, HeapTupleHeaderGetXmax(tuple.t_data)); do_shrinking = false; break; default: @@ -1513,8 +1513,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, if (!(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED)) { - if ((TransactionId) tuple.t_data->t_cmin != myXID) - elog(ERROR, "Invalid XID in t_cmin"); + if (HeapTupleHeaderGetXvac(tuple.t_data) != myXID) + elog(ERROR, "Invalid XVAC in tuple header"); if (tuple.t_data->t_infomask & HEAP_MOVED_IN) elog(ERROR, "HEAP_MOVED_IN was not expected"); @@ -1558,7 +1558,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, * tuples to another places. */ if ((tuple.t_data->t_infomask & HEAP_UPDATED && - !TransactionIdPrecedes(tuple.t_data->t_xmin, OldestXmin)) || + !TransactionIdPrecedes(HeapTupleHeaderGetXmin(tuple.t_data), + OldestXmin)) || (!(tuple.t_data->t_infomask & HEAP_XMAX_INVALID) && !(ItemPointerEquals(&(tuple.t_self), &(tuple.t_data->t_ctid))))) @@ -1675,7 +1676,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, /* All done ? */ if (!(tp.t_data->t_infomask & HEAP_UPDATED) || - TransactionIdPrecedes(tp.t_data->t_xmin, OldestXmin)) + TransactionIdPrecedes(HeapTupleHeaderGetXmin(tp.t_data), + OldestXmin)) break; /* Well, try to find tuple with old row version */ @@ -1723,8 +1725,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, * latter, and we are too close to 6.5 release. - * vadim 06/11/99 */ - if (!(TransactionIdEquals(Ptp.t_data->t_xmax, - tp.t_data->t_xmin))) + if (!(TransactionIdEquals(HeapTupleHeaderGetXmax(Ptp.t_data), + HeapTupleHeaderGetXmin(tp.t_data)))) { if (freeCbuf) ReleaseBuffer(Cbuf); @@ -1749,14 +1751,13 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, * removed. */ if (Ptp.t_data->t_infomask & HEAP_UPDATED && - TransactionIdEquals(Ptp.t_data->t_xmin, - Ptp.t_data->t_xmax)) + TransactionIdEquals(HeapTupleHeaderGetXmin(Ptp.t_data), + HeapTupleHeaderGetXmax(Ptp.t_data))) { - TransactionIdStore(myXID, - (TransactionId *) &(Ptp.t_data->t_cmin)); Ptp.t_data->t_infomask &= ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_IN); Ptp.t_data->t_infomask |= HEAP_MOVED_OFF; + HeapTupleHeaderSetXvac(Ptp.t_data, myXID); WriteBuffer(Pbuf); continue; } @@ -1820,10 +1821,10 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, /* NO ELOG(ERROR) TILL CHANGES ARE LOGGED */ START_CRIT_SECTION(); - TransactionIdStore(myXID, (TransactionId *) &(tuple.t_data->t_cmin)); tuple.t_data->t_infomask &= ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_IN); tuple.t_data->t_infomask |= HEAP_MOVED_OFF; + HeapTupleHeaderSetXvac(tuple.t_data, myXID); /* * If this page was not used before - clean it. @@ -1860,10 +1861,10 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, * Update the state of the copied tuple, and store it * on the destination page. */ - TransactionIdStore(myXID, (TransactionId *) &(newtup.t_data->t_cmin)); newtup.t_data->t_infomask &= ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_OFF); newtup.t_data->t_infomask |= HEAP_MOVED_IN; + HeapTupleHeaderSetXvac(newtup.t_data, myXID); newoff = PageAddItem(ToPage, (Item) newtup.t_data, tuple_len, InvalidOffsetNumber, LP_USED); if (newoff == InvalidOffsetNumber) @@ -1989,10 +1990,10 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, * Mark new tuple as moved_in by vacuum and store vacuum XID * in t_cmin !!! */ - TransactionIdStore(myXID, (TransactionId *) &(newtup.t_data->t_cmin)); newtup.t_data->t_infomask &= ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_OFF); newtup.t_data->t_infomask |= HEAP_MOVED_IN; + HeapTupleHeaderSetXvac(newtup.t_data, myXID); /* add tuple to the page */ newoff = PageAddItem(ToPage, (Item) newtup.t_data, tuple_len, @@ -2015,10 +2016,10 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, * Mark old tuple as moved_off by vacuum and store vacuum XID * in t_cmin !!! */ - TransactionIdStore(myXID, (TransactionId *) &(tuple.t_data->t_cmin)); tuple.t_data->t_infomask &= ~(HEAP_XMIN_COMMITTED | HEAP_XMIN_INVALID | HEAP_MOVED_IN); tuple.t_data->t_infomask |= HEAP_MOVED_OFF; + HeapTupleHeaderSetXvac(tuple.t_data, myXID); { XLogRecPtr recptr = @@ -2066,8 +2067,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, tuple.t_data = (HeapTupleHeader) PageGetItem(page, itemid); if (tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED) continue; - if ((TransactionId) tuple.t_data->t_cmin != myXID) - elog(ERROR, "Invalid XID in t_cmin (4)"); + if (HeapTupleHeaderGetXvac(tuple.t_data) != myXID) + elog(ERROR, "Invalid XVAC in tuple header (4)"); if (tuple.t_data->t_infomask & HEAP_MOVED_IN) elog(ERROR, "HEAP_MOVED_IN was not expected (2)"); if (tuple.t_data->t_infomask & HEAP_MOVED_OFF) @@ -2204,8 +2205,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, tuple.t_data = (HeapTupleHeader) PageGetItem(page, itemid); if (!(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED)) { - if ((TransactionId) tuple.t_data->t_cmin != myXID) - elog(ERROR, "Invalid XID in t_cmin (2)"); + if (HeapTupleHeaderGetXvac(tuple.t_data) != myXID) + elog(ERROR, "Invalid XVAC in tuple header (2)"); if (tuple.t_data->t_infomask & HEAP_MOVED_IN) { tuple.t_data->t_infomask |= HEAP_XMIN_COMMITTED; @@ -2283,8 +2284,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, if (!(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED)) { - if ((TransactionId) tuple.t_data->t_cmin != myXID) - elog(ERROR, "Invalid XID in t_cmin (3)"); + if (HeapTupleHeaderGetXvac(tuple.t_data) != myXID) + elog(ERROR, "Invalid XVAC in tuple header (3)"); if (tuple.t_data->t_infomask & HEAP_MOVED_OFF) { itemid->lp_flags &= ~LP_USED; diff --git a/src/backend/commands/vacuumlazy.c b/src/backend/commands/vacuumlazy.c index b7da9f5bbb0..4712c70cf92 100644 --- a/src/backend/commands/vacuumlazy.c +++ b/src/backend/commands/vacuumlazy.c @@ -31,7 +31,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/commands/vacuumlazy.c,v 1.14 2002/04/02 01:03:05 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/vacuumlazy.c,v 1.15 2002/06/15 19:54:24 momjian Exp $ * *------------------------------------------------------------------------- */ @@ -332,11 +332,11 @@ lazy_scan_heap(Relation onerel, LVRelStats *vacrelstats, * assumption by momentarily acquiring exclusive lock, * but for the moment I see no need to. */ - if (TransactionIdIsNormal(tuple.t_data->t_xmin) && - TransactionIdPrecedes(tuple.t_data->t_xmin, + if (TransactionIdIsNormal(HeapTupleHeaderGetXmin(tuple.t_data)) && + TransactionIdPrecedes(HeapTupleHeaderGetXmin(tuple.t_data), FreezeLimit)) { - tuple.t_data->t_xmin = FrozenTransactionId; + HeapTupleHeaderSetXmin(tuple.t_data, FrozenTransactionId); /* infomask should be okay already */ Assert(tuple.t_data->t_infomask & HEAP_XMIN_COMMITTED); pgchanged = true; |
