From 21992dd4f5165692dcf039b3ed192a759dcc4f2c Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Fri, 30 Apr 2010 06:34:29 +0000 Subject: [PATCH] Fix handling of b-tree reuse WAL records when hot standby is disabled, and add missing code in btree_desc for them. This fixes the bug with "tree_redo: unknown op code 208" error reported by Jaime Casanova. --- src/backend/access/nbtree/nbtxlog.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c index 7b5b27315e..97b920feea 100644 --- a/src/backend/access/nbtree/nbtxlog.c +++ b/src/backend/access/nbtree/nbtxlog.c @@ -8,7 +8,7 @@ * Portions Copyright (c) 1994, Regents of the University of California * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.67 2010/04/22 08:04:24 sriggs Exp $ + * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.68 2010/04/30 06:34:29 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -954,7 +954,6 @@ btree_redo(XLogRecPtr lsn, XLogRecord *record) switch (info) { case XLOG_BTREE_DELETE: - /* * Btree delete records can conflict with standby queries. You * might think that vacuum records would conflict as well, but @@ -973,7 +972,6 @@ btree_redo(XLogRecPtr lsn, XLogRecord *record) break; case XLOG_BTREE_REUSE_PAGE: - /* * Btree reuse page records exist to provide a conflict point * when we reuse pages in the index via the FSM. That's all it @@ -1034,6 +1032,9 @@ btree_redo(XLogRecPtr lsn, XLogRecord *record) case XLOG_BTREE_NEWROOT: btree_xlog_newroot(lsn, record); break; + case XLOG_BTREE_REUSE_PAGE: + /* Handled above before restoring bkp block */ + break; default: elog(PANIC, "btree_redo: unknown op code %u", info); } @@ -1169,6 +1170,15 @@ btree_desc(StringInfo buf, uint8 xl_info, char *rec) xlrec->rootblk, xlrec->level); break; } + case XLOG_BTREE_REUSE_PAGE: + { + xl_btree_reuse_page *xlrec = (xl_btree_reuse_page *) rec; + + appendStringInfo(buf, "reuse_page: rel %u/%u/%u; latestRemovedXid %u", + xlrec->node.spcNode, xlrec->node.dbNode, + xlrec->node.relNode, xlrec->latestRemovedXid); + break; + } default: appendStringInfo(buf, "UNKNOWN"); break; -- 2.11.0