diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2008-10-30 04:06:16 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2008-10-30 04:06:16 +0000 |
commit | 2314baef38248b31951d3c8e285e6f8e4fd7dd05 (patch) | |
tree | ff62332f2b399c3b5fcbc35fdc0dcef16a22a8ba | |
parent | d50966a49d2a1b935f1abcf28251668a6f6898bc (diff) | |
download | postgresql-2314baef38248b31951d3c8e285e6f8e4fd7dd05.tar.gz postgresql-2314baef38248b31951d3c8e285e6f8e4fd7dd05.zip |
Fix recoveryLastXTime logic so that it actually does what one would expect.
Per gripe from Kevin Grittner. Backpatch to 8.3, where the bug was introduced.
-rw-r--r-- | src/backend/access/transam/xlog.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index e8c230466d3..5621fc0dae0 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.319 2008/09/23 09:20:35 heikki Exp $ + * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.320 2008/10/30 04:06:16 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -4698,6 +4698,9 @@ exitArchiveRecovery(TimeLineID endTLI, uint32 endLogId, uint32 endLogSeg) * * Returns TRUE if we are stopping, FALSE otherwise. On TRUE return, * *includeThis is set TRUE if we should apply this record before stopping. + * + * We also track the timestamp of the latest applied COMMIT/ABORT record + * in recoveryLastXTime, for logging purposes. * Also, some information is saved in recoveryStopXid et al for use in * annotating the new timeline's history file. */ @@ -4729,12 +4732,12 @@ recoveryStopsHere(XLogRecord *record, bool *includeThis) else return false; - /* Remember the most recent COMMIT/ABORT time for logging purposes */ - recoveryLastXTime = recordXtime; - /* Do we have a PITR target at all? */ if (!recoveryTarget) + { + recoveryLastXTime = recordXtime; return false; + } if (recoveryTargetExact) { @@ -4798,7 +4801,12 @@ recoveryStopsHere(XLogRecord *record, bool *includeThis) recoveryStopXid, timestamptz_to_str(recoveryStopTime)))); } + + if (recoveryStopAfter) + recoveryLastXTime = recordXtime; } + else + recoveryLastXTime = recordXtime; return stopsHere; } |