Per Tom, do full reset on -x flag.
This commit is contained in:
parent
f6e603cffa
commit
872aad61ff
@ -23,7 +23,7 @@
|
||||
* Portions Copyright (c) 1996-2001, PostgreSQL Global Development Group
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* $Header: /cvsroot/pgsql/contrib/pg_resetxlog/Attic/pg_resetxlog.c,v 1.11 2002/01/10 17:51:52 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/contrib/pg_resetxlog/Attic/pg_resetxlog.c,v 1.12 2002/01/10 18:08:29 momjian Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@ -714,32 +714,30 @@ RewriteControlFile(TransactionId set_xid)
|
||||
int fd;
|
||||
char buffer[BLCKSZ]; /* need not be aligned */
|
||||
|
||||
if (set_xid == 0)
|
||||
{
|
||||
/*
|
||||
* Adjust fields as needed to force an empty XLOG starting at the next
|
||||
* available segment.
|
||||
*/
|
||||
newXlogId = ControlFile.logId;
|
||||
newXlogSeg = ControlFile.logSeg;
|
||||
/* be sure we wrap around correctly at end of a logfile */
|
||||
NextLogSeg(newXlogId, newXlogSeg);
|
||||
/*
|
||||
* Adjust fields as needed to force an empty XLOG starting at the next
|
||||
* available segment.
|
||||
*/
|
||||
newXlogId = ControlFile.logId;
|
||||
newXlogSeg = ControlFile.logSeg;
|
||||
/* be sure we wrap around correctly at end of a logfile */
|
||||
NextLogSeg(newXlogId, newXlogSeg);
|
||||
|
||||
ControlFile.checkPointCopy.redo.xlogid = newXlogId;
|
||||
ControlFile.checkPointCopy.redo.xrecoff =
|
||||
newXlogSeg * XLogSegSize + SizeOfXLogPHD;
|
||||
ControlFile.checkPointCopy.undo = ControlFile.checkPointCopy.redo;
|
||||
ControlFile.checkPointCopy.time = time(NULL);
|
||||
ControlFile.checkPointCopy.redo.xlogid = newXlogId;
|
||||
ControlFile.checkPointCopy.redo.xrecoff =
|
||||
newXlogSeg * XLogSegSize + SizeOfXLogPHD;
|
||||
ControlFile.checkPointCopy.undo = ControlFile.checkPointCopy.redo;
|
||||
ControlFile.checkPointCopy.time = time(NULL);
|
||||
|
||||
ControlFile.state = DB_SHUTDOWNED;
|
||||
ControlFile.time = time(NULL);
|
||||
ControlFile.logId = newXlogId;
|
||||
ControlFile.logSeg = newXlogSeg + 1;
|
||||
ControlFile.checkPoint = ControlFile.checkPointCopy.redo;
|
||||
ControlFile.prevCheckPoint.xlogid = 0;
|
||||
ControlFile.prevCheckPoint.xrecoff = 0;
|
||||
}
|
||||
else
|
||||
ControlFile.state = DB_SHUTDOWNED;
|
||||
ControlFile.time = time(NULL);
|
||||
ControlFile.logId = newXlogId;
|
||||
ControlFile.logSeg = newXlogSeg + 1;
|
||||
ControlFile.checkPoint = ControlFile.checkPointCopy.redo;
|
||||
ControlFile.prevCheckPoint.xlogid = 0;
|
||||
ControlFile.prevCheckPoint.xrecoff = 0;
|
||||
|
||||
if (set_xid != 0)
|
||||
ControlFile.checkPointCopy.nextXid = set_xid;
|
||||
|
||||
/* Contents are protected with a CRC */
|
||||
@ -1011,20 +1009,6 @@ main(int argc, char **argv)
|
||||
if (!ReadControlFile())
|
||||
GuessControlValues();
|
||||
|
||||
/*
|
||||
* Set XID in pg_control and exit
|
||||
*/
|
||||
if (set_xid)
|
||||
{
|
||||
if (guessed)
|
||||
{
|
||||
printf("\npg_control appears corrupt. Can not update XID.\n");
|
||||
exit(1);
|
||||
}
|
||||
RewriteControlFile(set_xid);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
/*
|
||||
* If we had to guess anything, and -f was not given, just print the
|
||||
* guessed values and exit. Also print if -n is given.
|
||||
@ -1051,7 +1035,7 @@ main(int argc, char **argv)
|
||||
/*
|
||||
* Else, do the dirty deed.
|
||||
*/
|
||||
RewriteControlFile(0);
|
||||
RewriteControlFile(set_xid);
|
||||
KillExistingXLOG();
|
||||
WriteEmptyXLOG();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user