0001-mark_freed_ovflpage_as_UNUSED_pagetype.patch
application/x-download
Filename: 0001-mark_freed_ovflpage_as_UNUSED_pagetype.patch
Type: application/x-download
Part: 0
Message:
Re: pageinspect and hash indexes
Patch
Format: format-patch
Series: patch 0001
Subject: mark_freed_ovflpage_as_UNUSED_pagetype.patch
| File | + | − |
|---|---|---|
| src/backend/access/hash/hashovfl.c | 12 | 1 |
From 787974ea551285a6c069dbbdacb03a7e955c5dfd Mon Sep 17 00:00:00 2001 From: ashu <ashu@localhost.localdomain> Date: Mon, 20 Mar 2017 14:44:57 +0530 Subject: [PATCH] mark_freed_ovflpage_as_UNUSED_pagetype.patch --- src/backend/access/hash/hashovfl.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/backend/access/hash/hashovfl.c b/src/backend/access/hash/hashovfl.c index a3cae21..d3eaee0 100644 --- a/src/backend/access/hash/hashovfl.c +++ b/src/backend/access/hash/hashovfl.c @@ -591,9 +591,20 @@ _hash_freeovflpage(Relation rel, Buffer bucketbuf, Buffer ovflbuf, /* * Initialize the freed overflow page. Just zeroing the page won't work, * because WAL replay routines expect pages to be initialized. See - * explanation of RBM_NORMAL mode atop XLogReadBufferExtended. + * explanation of RBM_NORMAL mode atop XLogReadBufferExtended. Also, mark + * the page as UNUSED type and retain it's page id. This allows the tools + * like pageinspect to consider it as a hash page. */ _hash_pageinit(ovflpage, BufferGetPageSize(ovflbuf)); + + ovflopaque = (HashPageOpaque) PageGetSpecialPointer(ovflpage); + + ovflopaque->hasho_prevblkno = InvalidBlockNumber; + ovflopaque->hasho_nextblkno = InvalidBlockNumber; + ovflopaque->hasho_bucket = -1; + ovflopaque->hasho_flag = LH_UNUSED_PAGE; + ovflopaque->hasho_page_id = HASHO_PAGE_ID; + MarkBufferDirty(ovflbuf); if (BufferIsValid(prevbuf)) -- 1.8.3.1