diff options
Diffstat (limited to 'src/backend/commands')
-rw-r--r-- | src/backend/commands/sequence.c | 20 | ||||
-rw-r--r-- | src/backend/commands/vacuum.c | 41 | ||||
-rw-r--r-- | src/backend/commands/vacuumlazy.c | 10 |
3 files changed, 67 insertions, 4 deletions
diff --git a/src/backend/commands/sequence.c b/src/backend/commands/sequence.c index f8a05b619de..a33fcd24a40 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.83 2002/07/16 22:12:19 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.84 2002/08/06 02:36:34 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -237,6 +237,7 @@ DefineSequence(CreateSeqStmt *seq) * means two log records instead of one :-( */ LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); + START_CRIT_SECTION(); { @@ -260,6 +261,8 @@ DefineSequence(CreateSeqStmt *seq) tuple->t_data->t_infomask |= HEAP_XMIN_COMMITTED; } + /* XLOG stuff */ + if (!rel->rd_istemp) { xl_seq_rec xlrec; XLogRecPtr recptr; @@ -287,6 +290,7 @@ DefineSequence(CreateSeqStmt *seq) PageSetLSN(page, recptr); PageSetSUI(page, ThisStartUpID); } + END_CRIT_SECTION(); LockBuffer(buf, BUFFER_LOCK_UNLOCK); @@ -437,7 +441,9 @@ nextval(PG_FUNCTION_ARGS) elm->cached = last; /* last fetched number */ START_CRIT_SECTION(); - if (logit) + + /* XLOG stuff */ + if (logit && !seqrel->rd_istemp) { xl_seq_rec xlrec; XLogRecPtr recptr; @@ -449,9 +455,11 @@ nextval(PG_FUNCTION_ARGS) rdata[0].len = sizeof(xl_seq_rec); rdata[0].next = &(rdata[1]); + /* set values that will be saved in xlog */ seq->last_value = next; seq->is_called = true; seq->log_cnt = 0; + rdata[1].buffer = InvalidBuffer; rdata[1].data = (char *) page + ((PageHeader) page)->pd_upper; rdata[1].len = ((PageHeader) page)->pd_special - @@ -468,6 +476,7 @@ nextval(PG_FUNCTION_ARGS) seq->last_value = last; /* last fetched number */ seq->is_called = true; seq->log_cnt = log; /* how much is logged */ + END_CRIT_SECTION(); LockBuffer(buf, BUFFER_LOCK_UNLOCK); @@ -550,6 +559,9 @@ do_setval(RangeVar *sequence, int64 next, bool iscalled) * values) */ START_CRIT_SECTION(); + + /* XLOG stuff */ + if (!seqrel->rd_istemp) { xl_seq_rec xlrec; XLogRecPtr recptr; @@ -562,9 +574,11 @@ do_setval(RangeVar *sequence, int64 next, bool iscalled) rdata[0].len = sizeof(xl_seq_rec); rdata[0].next = &(rdata[1]); + /* set values that will be saved in xlog */ seq->last_value = next; seq->is_called = true; seq->log_cnt = 0; + rdata[1].buffer = InvalidBuffer; rdata[1].data = (char *) page + ((PageHeader) page)->pd_upper; rdata[1].len = ((PageHeader) page)->pd_special - @@ -576,10 +590,12 @@ do_setval(RangeVar *sequence, int64 next, bool iscalled) PageSetLSN(page, recptr); PageSetSUI(page, ThisStartUpID); } + /* save info in sequence relation */ seq->last_value = next; /* last fetched number */ seq->is_called = iscalled; seq->log_cnt = (iscalled) ? 0 : 1; + END_CRIT_SECTION(); LockBuffer(buf, BUFFER_LOCK_UNLOCK); diff --git a/src/backend/commands/vacuum.c b/src/backend/commands/vacuum.c index c893ea86a09..8d2cd4da58c 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.232 2002/07/20 05:16:57 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.233 2002/08/06 02:36:34 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -1899,6 +1899,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, newtup.t_data = (HeapTupleHeader) PageGetItem(ToPage, newitemid); ItemPointerSet(&(newtup.t_self), destvacpage->blkno, newoff); + /* XLOG stuff */ + if (!onerel->rd_istemp) { XLogRecPtr recptr = log_heap_move(onerel, Cbuf, tuple.t_self, @@ -1912,6 +1914,12 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, PageSetLSN(ToPage, recptr); PageSetSUI(ToPage, ThisStartUpID); } + else + { + /* No XLOG record, but still need to flag that XID exists on disk */ + MyXactMadeTempRelUpdate = true; + } + END_CRIT_SECTION(); if (destvacpage->blkno > last_move_dest_block) @@ -2042,6 +2050,8 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, tuple.t_data->t_infomask |= HEAP_MOVED_OFF; HeapTupleHeaderSetXvac(tuple.t_data, myXID); + /* XLOG stuff */ + if (!onerel->rd_istemp) { XLogRecPtr recptr = log_heap_move(onerel, buf, tuple.t_self, @@ -2052,6 +2062,12 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, PageSetLSN(ToPage, recptr); PageSetSUI(ToPage, ThisStartUpID); } + else + { + /* No XLOG record, but still need to flag that XID exists on disk */ + MyXactMadeTempRelUpdate = true; + } + END_CRIT_SECTION(); cur_page->offsets_used++; @@ -2321,8 +2337,13 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, } Assert(vacpage->offsets_free == num_tuples); + START_CRIT_SECTION(); + uncnt = PageRepairFragmentation(page, unused); + + /* XLOG stuff */ + if (!onerel->rd_istemp) { XLogRecPtr recptr; @@ -2331,7 +2352,14 @@ repair_frag(VRelStats *vacrelstats, Relation onerel, PageSetLSN(page, recptr); PageSetSUI(page, ThisStartUpID); } + else + { + /* No XLOG record, but still need to flag that XID exists on disk */ + MyXactMadeTempRelUpdate = true; + } + END_CRIT_SECTION(); + LockBuffer(buf, BUFFER_LOCK_UNLOCK); WriteBuffer(buf); } @@ -2450,12 +2478,17 @@ vacuum_page(Relation onerel, Buffer buffer, VacPage vacpage) Assert(vacpage->offsets_used == 0); START_CRIT_SECTION(); + for (i = 0; i < vacpage->offsets_free; i++) { itemid = PageGetItemId(page, vacpage->offsets[i]); itemid->lp_flags &= ~LP_USED; } + uncnt = PageRepairFragmentation(page, unused); + + /* XLOG stuff */ + if (!onerel->rd_istemp) { XLogRecPtr recptr; @@ -2464,6 +2497,12 @@ vacuum_page(Relation onerel, Buffer buffer, VacPage vacpage) PageSetLSN(page, recptr); PageSetSUI(page, ThisStartUpID); } + else + { + /* No XLOG record, but still need to flag that XID exists on disk */ + MyXactMadeTempRelUpdate = true; + } + END_CRIT_SECTION(); } diff --git a/src/backend/commands/vacuumlazy.c b/src/backend/commands/vacuumlazy.c index bbf9e39ae80..4fb613cc67e 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.17 2002/07/20 05:16:57 momjian Exp $ + * $Header: /cvsroot/pgsql/src/backend/commands/vacuumlazy.c,v 1.18 2002/08/06 02:36:34 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -523,6 +523,8 @@ lazy_vacuum_page(Relation onerel, BlockNumber blkno, Buffer buffer, uncnt = PageRepairFragmentation(page, unused); + /* XLOG stuff */ + if (!onerel->rd_istemp) { XLogRecPtr recptr; @@ -531,6 +533,12 @@ lazy_vacuum_page(Relation onerel, BlockNumber blkno, Buffer buffer, PageSetLSN(page, recptr); PageSetSUI(page, ThisStartUpID); } + else + { + /* No XLOG record, but still need to flag that XID exists on disk */ + MyXactMadeTempRelUpdate = true; + } + END_CRIT_SECTION(); return tupindex; |