]> granicus.if.org Git - postgresql/commitdiff
Force zero_damaged_pages to be effectively ON during recovery from WAL,
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 1 Dec 2003 16:53:42 +0000 (16:53 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 1 Dec 2003 16:53:42 +0000 (16:53 +0000)
since there is no need to worry about damaged pages when we are going to
overwrite them anyway from the WAL.  Per recent discussion.

src/backend/storage/buffer/bufmgr.c

index 35b1db79e8404369abc9169db00220f24519d1a5..fba8983d3ab80f1bdec4330d1f79b943b031f1cb 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.133.2.1 2003/04/04 00:32:57 tgl Exp $
+ *       $Header: /cvsroot/pgsql/src/backend/storage/buffer/bufmgr.c,v 1.133.2.2 2003/12/01 16:53:42 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -226,7 +226,13 @@ ReadBufferInternal(Relation reln, BlockNumber blockNum,
                if (status == SM_SUCCESS &&
                        !PageHeaderIsValid((PageHeader) MAKE_PTR(bufHdr->data)))
                {
-                       if (zero_damaged_pages)
+                       /*
+                        * During WAL recovery, the first access to any data page should
+                        * overwrite the whole page from the WAL; so a clobbered page
+                        * header is not reason to fail.  Hence, when InRecovery we may
+                        * always act as though zero_damaged_pages is ON.
+                        */
+                       if (zero_damaged_pages || InRecovery)
                        {
                                elog(WARNING, "Invalid page header in block %u of %s; zeroing out page",
                                         blockNum, RelationGetRelationName(reln));