0001-Reset-LH_PAGE_HAS_DEAD_TUPLES-flag-on-standby-when.patch
application/x-download
Filename: 0001-Reset-LH_PAGE_HAS_DEAD_TUPLES-flag-on-standby-when.patch
Type: application/x-download
Part: 0
Patch
Format: format-patch
Series: patch 0001
Subject: Reset LH_PAGE_HAS_DEAD_TUPLES flag on standby when replaying XLOG_HASH_VACUUM_ONE_PAGE record.
| File | + | − |
|---|---|---|
| src/backend/access/hash/hashinsert.c | 8 | 0 |
| src/backend/access/hash/hash_xlog.c | 8 | 0 |
From aa9e0c0fbb3d15b440b53d8e038e381f673f7fda Mon Sep 17 00:00:00 2001 From: ashu <ashu@localhost.localdomain> Date: Thu, 16 Mar 2017 12:05:59 +0530 Subject: [PATCH] Reset LH_PAGE_HAS_DEAD_TUPLES flag on standby when replaying XLOG_HASH_VACUUM_ONE_PAGE record. --- src/backend/access/hash/hash_xlog.c | 8 ++++++++ src/backend/access/hash/hashinsert.c | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/backend/access/hash/hash_xlog.c b/src/backend/access/hash/hash_xlog.c index cabf0fd..53f2dbc 100644 --- a/src/backend/access/hash/hash_xlog.c +++ b/src/backend/access/hash/hash_xlog.c @@ -1078,6 +1078,7 @@ hash_xlog_vacuum_one_page(XLogReaderState *record) Buffer metabuf; Page page; XLogRedoAction action; + HashPageOpaque pageopaque; xldata = (xl_hash_vacuum_one_page *) XLogRecGetData(record); @@ -1126,6 +1127,13 @@ hash_xlog_vacuum_one_page(XLogReaderState *record) PageIndexMultiDelete(page, unused, unend - unused); } + /* + * Mark the page as not containing any LP_DEAD items. See comments + * in _hash_vacuum_one_page(). + */ + pageopaque = (HashPageOpaque) PageGetSpecialPointer(page); + pageopaque->hasho_flag &= ~LH_PAGE_HAS_DEAD_TUPLES; + PageSetLSN(page, lsn); MarkBufferDirty(buffer); } diff --git a/src/backend/access/hash/hashinsert.c b/src/backend/access/hash/hashinsert.c index 8b6d0a0..8640e85 100644 --- a/src/backend/access/hash/hashinsert.c +++ b/src/backend/access/hash/hashinsert.c @@ -374,6 +374,14 @@ _hash_vacuum_one_page(Relation rel, Buffer metabuf, Buffer buf, PageIndexMultiDelete(page, deletable, ndeletable); + /* + * Mark the page as not containing any LP_DEAD items. This is not + * certainly true (there might be some that have recently been marked, + * but weren't included in our target-item list), but it will almost + * always be true and it doesn't seem worth an additional page scan + * to check it. Remember that LH_PAGE_HAS_DEAD_TUPLES is only a hint + * anyway. + */ pageopaque = (HashPageOpaque) PageGetSpecialPointer(page); pageopaque->hasho_flag &= ~LH_PAGE_HAS_DEAD_TUPLES; -- 1.8.3.1