OSDN Git Service

Add missing ControlFile.checkPointCopy.ThisTimeLineID line for 'guess'
authorBruce Momjian <bruce@momjian.us>
Wed, 26 Apr 2006 18:56:56 +0000 (18:56 +0000)
committerBruce Momjian <bruce@momjian.us>
Wed, 26 Apr 2006 18:56:56 +0000 (18:56 +0000)
pg_resetxlog.

Simon

src/bin/pg_resetxlog/pg_resetxlog.c

index 318dae2..d106002 100644 (file)
@@ -565,7 +565,7 @@ RestoreControlValues(int mode)
 {
        struct timeval tv;
        char       *localeptr;
-       bool    successed=true;
+       bool    successed = true;
 
        /*
         * Set up a completely default set of pg_control values.
@@ -579,27 +579,30 @@ RestoreControlValues(int mode)
         * update the checkpoint value in control file,by searching 
         * xlog segment file, or just guessing it.
         */
-        if (mode == WAL)
-        {
+       if (mode == WAL)
+       {
                int result = SearchLastCheckpoint();
-               if ( result > 0 ) /* The last checkpoint had been found. */
+
+               if (result > 0) /* The last checkpoint had been found. */
                {
                        ControlFile.checkPointCopy = lastcheckpoint;
+                       ControlFile.checkPointCopy.ThisTimeLineID = LastXLogFile->tli;
                        ControlFile.checkPoint = lastchkp;
                        ControlFile.prevCheckPoint = prevchkp;
+
                        ControlFile.logId = LastXLogFile->logid;
                        ControlFile.logSeg = LastXLogFile->seg + 1;
-                       ControlFile.checkPointCopy.ThisTimeLineID = LastXLogFile->tli;
                        ControlFile.state = state;
-               } else  successed = false;
+               }
+               else
+                       successed = false;
                
                /* Clean up the list. */
                CleanUpList(xlogfilelist);              
-               
-        }      
-       
-       if (mode == GUESS)
+       }
+       else    /* GUESS */
        {
+               ControlFile.checkPointCopy.ThisTimeLineID = 2;
                ControlFile.checkPointCopy.redo.xlogid = 0;
                ControlFile.checkPointCopy.redo.xrecoff = SizeOfXLogLongPHD;
                ControlFile.checkPointCopy.undo = ControlFile.checkPointCopy.redo;
@@ -609,6 +612,7 @@ RestoreControlValues(int mode)
                ControlFile.checkPointCopy.nextMultiOffset = 0;
                ControlFile.checkPointCopy.time = time(NULL);
                ControlFile.checkPoint = ControlFile.checkPointCopy.redo;
+
                /*
                 * Create a new unique installation identifier, since we can no longer
                 * use any old XLOG records.  See notes in xlog.c about the algorithm.
@@ -644,6 +648,7 @@ RestoreControlValues(int mode)
                exit(1);
        }
        StrNCpy(ControlFile.lc_collate, localeptr, LOCALE_NAME_BUFLEN);
+
        localeptr = setlocale(LC_CTYPE, "");
        if (!localeptr)
        {