|
7 | 7 | * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group
|
8 | 8 | * Portions Copyright (c) 1994, Regents of the University of California
|
9 | 9 | *
|
10 |
| - * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.156 2004/08/04 21:33:46 tgl Exp $ |
| 10 | + * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.157 2004/08/08 03:22:08 tgl Exp $ |
11 | 11 | *
|
12 | 12 | *-------------------------------------------------------------------------
|
13 | 13 | */
|
@@ -2187,6 +2187,15 @@ MoveOfflineLogs(uint32 log, uint32 seg, XLogRecPtr endptr)
|
2187 | 2187 | * Restore the backup blocks present in an XLOG record, if any.
|
2188 | 2188 | *
|
2189 | 2189 | * We assume all of the record has been read into memory at *record.
|
| 2190 | + * |
| 2191 | + * Note: when a backup block is available in XLOG, we restore it |
| 2192 | + * unconditionally, even if the page in the database appears newer. |
| 2193 | + * This is to protect ourselves against database pages that were partially |
| 2194 | + * or incorrectly written during a crash. We assume that the XLOG data |
| 2195 | + * must be good because it has passed a CRC check, while the database |
| 2196 | + * page might not be. This will force us to replay all subsequent |
| 2197 | + * modifications of the page that appear in XLOG, rather than possibly |
| 2198 | + * ignoring them as already applied, but that's not a huge drawback. |
2190 | 2199 | */
|
2191 | 2200 | staticvoid
|
2192 | 2201 | RestoreBkpBlocks(XLogRecord*record,XLogRecPtrlsn)
|
|