Re: What is CheckPoint.undo needed for? - Mailing list pgsql-hackers

From Florian G. Pflug
Subject Re: What is CheckPoint.undo needed for?
Date
Msg-id 45DF03F7.9040407@phlo.org
Whole thread Raw
In response to Re: What is CheckPoint.undo needed for?  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: What is CheckPoint.undo needed for?  (Bruce Momjian <bruce@momjian.us>)
Re: What is CheckPoint.undo needed for?  (Bruce Momjian <bruce@momjian.us>)
Re: What is CheckPoint.undo needed for?  (Bruce Momjian <bruce@momjian.us>)
List pgsql-hackers
Tom Lane wrote:
> Alvaro Herrera <alvherre@commandprompt.com> writes:
>> I think you should increase pg_control version.
>
> And the WAL page-header version, since this also changes WAL contents.

Here is an updated version. I've incremeted XLOG_PAGE_MAGIC and
PG_CONTROL_VERSION by one.

greetings, Florian Pflug

Index: src/backend/access/transam/xlog.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/access/transam/xlog.c,v
retrieving revision 1.264
diff -a -u -r1.264 xlog.c
--- src/backend/access/transam/xlog.c    14 Feb 2007 05:00:40 -0000    1.264
+++ src/backend/access/transam/xlog.c    23 Feb 2007 15:09:09 -0000
@@ -4039,7 +4039,6 @@
     /* Set up information for the initial checkpoint record */
     checkPoint.redo.xlogid = 0;
     checkPoint.redo.xrecoff = SizeOfXLogLongPHD;
-    checkPoint.undo = checkPoint.redo;
     checkPoint.ThisTimeLineID = ThisTimeLineID;
     checkPoint.nextXidEpoch = 0;
     checkPoint.nextXid = FirstNormalTransactionId;
@@ -4698,9 +4697,8 @@
     wasShutdown = (record->xl_info == XLOG_CHECKPOINT_SHUTDOWN);

     ereport(LOG,
-     (errmsg("redo record is at %X/%X; undo record is at %X/%X; shutdown %s",
+     (errmsg("redo record is at %X/%X; shutdown %s",
              checkPoint.redo.xlogid, checkPoint.redo.xrecoff,
-             checkPoint.undo.xlogid, checkPoint.undo.xrecoff,
              wasShutdown ? "TRUE" : "FALSE")));
     ereport(LOG,
             (errmsg("next transaction ID: %u/%u; next OID: %u",
@@ -4730,20 +4728,17 @@
     if (XLByteLT(RecPtr, checkPoint.redo))
         ereport(PANIC,
                 (errmsg("invalid redo in checkpoint record")));
-    if (checkPoint.undo.xrecoff == 0)
-        checkPoint.undo = RecPtr;

     /*
      * Check whether we need to force recovery from WAL.  If it appears to
      * have been a clean shutdown and we did not have a recovery.conf file,
      * then assume no recovery needed.
      */
-    if (XLByteLT(checkPoint.undo, RecPtr) ||
-        XLByteLT(checkPoint.redo, RecPtr))
+    if (XLByteLT(checkPoint.redo, RecPtr))
     {
         if (wasShutdown)
             ereport(PANIC,
-                (errmsg("invalid redo/undo record in shutdown checkpoint")));
+                (errmsg("invalid redo record in shutdown checkpoint")));
         InRecovery = true;
     }
     else if (ControlFile->state != DB_SHUTDOWNED)
@@ -5850,10 +5845,9 @@
     {
         CheckPoint *checkpoint = (CheckPoint *) rec;

-        appendStringInfo(buf, "checkpoint: redo %X/%X; undo %X/%X; "
+        appendStringInfo(buf, "checkpoint: redo %X/%X; "
                          "tli %u; xid %u/%u; oid %u; multi %u; offset %u; %s",
                          checkpoint->redo.xlogid, checkpoint->redo.xrecoff,
-                         checkpoint->undo.xlogid, checkpoint->undo.xrecoff,
                          checkpoint->ThisTimeLineID,
                          checkpoint->nextXidEpoch, checkpoint->nextXid,
                          checkpoint->nextOid,
Index: src/bin/pg_controldata/pg_controldata.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/pg_controldata/pg_controldata.c,v
retrieving revision 1.32
diff -a -u -r1.32 pg_controldata.c
--- src/bin/pg_controldata/pg_controldata.c    8 Dec 2006 19:50:53 -0000    1.32
+++ src/bin/pg_controldata/pg_controldata.c    23 Feb 2007 15:09:09 -0000
@@ -168,9 +168,6 @@
     printf(_("Latest checkpoint's REDO location:    %X/%X\n"),
            ControlFile.checkPointCopy.redo.xlogid,
            ControlFile.checkPointCopy.redo.xrecoff);
-    printf(_("Latest checkpoint's UNDO location:    %X/%X\n"),
-           ControlFile.checkPointCopy.undo.xlogid,
-           ControlFile.checkPointCopy.undo.xrecoff);
     printf(_("Latest checkpoint's TimeLineID:       %u\n"),
            ControlFile.checkPointCopy.ThisTimeLineID);
     printf(_("Latest checkpoint's NextXID:          %u/%u\n"),
Index: src/bin/pg_resetxlog/pg_resetxlog.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/bin/pg_resetxlog/pg_resetxlog.c,v
retrieving revision 1.57
diff -a -u -r1.57 pg_resetxlog.c
--- src/bin/pg_resetxlog/pg_resetxlog.c    10 Feb 2007 14:58:55 -0000    1.57
+++ src/bin/pg_resetxlog/pg_resetxlog.c    23 Feb 2007 15:09:09 -0000
@@ -464,7 +464,6 @@

     ControlFile.checkPointCopy.redo.xlogid = 0;
     ControlFile.checkPointCopy.redo.xrecoff = SizeOfXLogLongPHD;
-    ControlFile.checkPointCopy.undo = ControlFile.checkPointCopy.redo;
     ControlFile.checkPointCopy.ThisTimeLineID = 1;
     ControlFile.checkPointCopy.nextXidEpoch = 0;
     ControlFile.checkPointCopy.nextXid = (TransactionId) 514;    /* XXX */
@@ -600,7 +599,6 @@
     ControlFile.checkPointCopy.redo.xlogid = newXlogId;
     ControlFile.checkPointCopy.redo.xrecoff =
         newXlogSeg * XLogSegSize + SizeOfXLogLongPHD;
-    ControlFile.checkPointCopy.undo = ControlFile.checkPointCopy.redo;
     ControlFile.checkPointCopy.time = time(NULL);

     ControlFile.state = DB_SHUTDOWNED;
Index: src/include/access/xlog_internal.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/access/xlog_internal.h,v
retrieving revision 1.18
diff -a -u -r1.18 xlog_internal.h
--- src/include/access/xlog_internal.h    5 Jan 2007 22:19:51 -0000    1.18
+++ src/include/access/xlog_internal.h    23 Feb 2007 15:09:09 -0000
@@ -71,7 +71,7 @@
 /*
  * Each page of XLOG file has a header like this:
  */
-#define XLOG_PAGE_MAGIC 0xD05E    /* can be used as WAL version indicator */
+#define XLOG_PAGE_MAGIC 0xD05F    /* can be used as WAL version indicator */

 typedef struct XLogPageHeaderData
 {
Index: src/include/catalog/pg_control.h
===================================================================
RCS file: /projects/cvsroot/pgsql/src/include/catalog/pg_control.h,v
retrieving revision 1.35
diff -a -u -r1.35 pg_control.h
--- src/include/catalog/pg_control.h    5 Jan 2007 22:19:52 -0000    1.35
+++ src/include/catalog/pg_control.h    23 Feb 2007 15:09:09 -0000
@@ -22,7 +22,7 @@


 /* Version identifier for this pg_control format */
-#define PG_CONTROL_VERSION    831
+#define PG_CONTROL_VERSION    832

 /*
  * Body of CheckPoint XLOG records.  This is declared here because we keep
@@ -32,9 +32,6 @@
 {
     XLogRecPtr    redo;            /* next RecPtr available when we began to
                                  * create CheckPoint (i.e. REDO start point) */
-    XLogRecPtr    undo;            /* first record of oldest in-progress
-                                 * transaction when we started (i.e. UNDO end
-                                 * point) */
     TimeLineID    ThisTimeLineID; /* current TLI */
     uint32        nextXidEpoch;    /* higher-order bits of nextXid */
     TransactionId nextXid;        /* next free XID */

pgsql-hackers by date:

Previous
From: Chris Browne
Date:
Subject: Re: [Monotone-devel] Re: SCMS question
Next
From: Alvaro Herrera
Date:
Subject: Re: SCMS question