Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 1d9819d

Browse files
committed
Log sequence creation (to initialize magic number on recovery).
1 parent 5f5db80 commit 1d9819d

File tree

1 file changed

+35
-3
lines changed

1 file changed

+35
-3
lines changed

src/backend/commands/sequence.c

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.52 2001/03/22 03:59:23 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/commands/sequence.c,v 1.53 2001/04/03 21:58:00 vadim Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -181,9 +181,41 @@ DefineSequence(CreateSeqStmt *seq)
181181
/* Now - form & insert sequence tuple */
182182
tuple = heap_formtuple(tupDesc, value, null);
183183
heap_insert(rel, tuple);
184+
ReleaseBuffer(buf);
184185

185-
if (WriteBuffer(buf) == STATUS_ERROR)
186-
elog(ERROR, "DefineSequence: WriteBuffer failed");
186+
/*
187+
* After crash REDO of heap_insert above would re-init page and
188+
* our magic number would be lost. We have to log sequence creation.
189+
* This means two log records instead of one -:(
190+
*/
191+
START_CRIT_SECTION();
192+
{
193+
xl_seq_rec xlrec;
194+
XLogRecPtr recptr;
195+
XLogRecData rdata[2];
196+
Form_pg_sequence newseq = (Form_pg_sequence) GETSTRUCT(tuple);
197+
198+
/* We do not log first nextval call, so "advance" sequence here */
199+
newseq->is_called = 't';
200+
newseq->log_cnt = 0;
201+
202+
xlrec.node = rel->rd_node;
203+
rdata[0].buffer = InvalidBuffer;
204+
rdata[0].data = (char *) &xlrec;
205+
rdata[0].len = sizeof(xl_seq_rec);
206+
rdata[0].next = &(rdata[1]);
207+
208+
rdata[1].buffer = InvalidBuffer;
209+
rdata[1].data = (char*) tuple->t_data;
210+
rdata[1].len = tuple->t_len;
211+
rdata[1].next = NULL;
212+
213+
recptr = XLogInsert(RM_SEQ_ID, XLOG_SEQ_LOG | XLOG_NO_TRAN, rdata);
214+
215+
PageSetLSN(page, recptr);
216+
PageSetSUI(page, ThisStartUpID);
217+
}
218+
END_CRIT_SECTION();
187219

188220
heap_close(rel, AccessExclusiveLock);
189221
}

0 commit comments

Comments
 (0)