0002-Expose-hashinitbitmapbuffer-to-initialize-bitmap-pag.patch

application/octet-stream

Filename: 0002-Expose-hashinitbitmapbuffer-to-initialize-bitmap-pag.patch
Type: application/octet-stream
Part: 1
Message: Re: Write Ahead Logging for Hash Indexes

Patch

Format: format-patch
Series: patch 0002
Subject: Expose hashinitbitmapbuffer to initialize bitmap page buffer. This will be used by future patches.
File+
src/backend/access/hash/hashovfl.c 40 0
src/include/access/hash.h 1 0
From 5b4869f657fdba8443e1870ead8b563ba71e4b43 Mon Sep 17 00:00:00 2001
From: Amit Kapila <amit.kapila@enterprisedb.com>
Date: Mon, 13 Feb 2017 16:18:18 +0530
Subject: [PATCH 2/6] Expose hashinitbitmapbuffer to initialize bitmap page
 buffer.  This will be used by future patches.

---
 src/backend/access/hash/hashovfl.c | 40 ++++++++++++++++++++++++++++++++++++++
 src/include/access/hash.h          |  1 +
 2 files changed, 41 insertions(+)

diff --git a/src/backend/access/hash/hashovfl.c b/src/backend/access/hash/hashovfl.c
index 8b59cad..b3cc7b9 100644
--- a/src/backend/access/hash/hashovfl.c
+++ b/src/backend/access/hash/hashovfl.c
@@ -633,6 +633,46 @@ _hash_initbitmap(Relation rel, HashMetaPage metap, BlockNumber blkno,
 
 
 /*
+ *	_hash_initbitmapbuffer()
+ *
+ *	 Initialize a new bitmap page.  All bits in the new bitmap page are set to
+ *	 "1", indicating "in use".
+ */
+void
+_hash_initbitmapbuffer(Buffer buf, uint16 bmsize, bool initpage)
+{
+	Page		pg;
+	HashPageOpaque op;
+	uint32	   *freep;
+
+	pg = BufferGetPage(buf);
+
+	/* initialize the page */
+	if (initpage)
+		_hash_pageinit(pg, BufferGetPageSize(buf));
+
+	/* initialize the page's special space */
+	op = (HashPageOpaque) PageGetSpecialPointer(pg);
+	op->hasho_prevblkno = InvalidBlockNumber;
+	op->hasho_nextblkno = InvalidBlockNumber;
+	op->hasho_bucket = -1;
+	op->hasho_flag = LH_BITMAP_PAGE;
+	op->hasho_page_id = HASHO_PAGE_ID;
+
+	/* set all of the bits to 1 */
+	freep = HashPageGetBitmap(pg);
+	MemSet(freep, 0xFF, bmsize);
+
+	/*
+	 * Set pd_lower just past the end of the bitmap page data.  We could even
+	 * set pd_lower equal to pd_upper, but this is more precise and makes the
+	 * page look compressible to xlog.c.
+	 */
+	((PageHeader) pg)->pd_lower = ((char *) freep + bmsize) - (char *) pg;
+}
+
+
+/*
  *	_hash_squeezebucket(rel, bucket)
  *
  *	Try to squeeze the tuples onto pages occurring earlier in the
diff --git a/src/include/access/hash.h b/src/include/access/hash.h
index 5767deb..9c0b79f 100644
--- a/src/include/access/hash.h
+++ b/src/include/access/hash.h
@@ -313,6 +313,7 @@ extern BlockNumber _hash_freeovflpage(Relation rel, Buffer bucketbuf, Buffer ovf
 			 Size *tups_size, uint16 nitups, BufferAccessStrategy bstrategy);
 extern void _hash_initbitmap(Relation rel, HashMetaPage metap,
 				 BlockNumber blkno, ForkNumber forkNum);
+extern void _hash_initbitmapbuffer(Buffer buf, uint16 bmsize, bool initpage);
 extern void _hash_squeezebucket(Relation rel,
 					Bucket bucket, BlockNumber bucket_blkno,
 					Buffer bucket_buf,
-- 
1.8.4.msysgit.0