v2-0001-Simplify-hash_xlog_split_allocate_page.patch.nocfbot
text/plain
Filename: v2-0001-Simplify-hash_xlog_split_allocate_page.patch.nocfbot
Type: text/plain
Part: 0
From 4d1ade22d4fa45daa5e6e3bfc2c701f9536d0a95 Mon Sep 17 00:00:00 2001
From: Peter Eisentraut <peter@eisentraut.org>
Date: Fri, 28 Nov 2025 14:18:37 +0100
Subject: [PATCH v2] Simplify hash_xlog_split_allocate_page()
---
src/backend/access/hash/hash_xlog.c | 30 ++++++++++++-----------------
1 file changed, 12 insertions(+), 18 deletions(-)
diff --git a/src/backend/access/hash/hash_xlog.c b/src/backend/access/hash/hash_xlog.c
index 2a0145f3c9b..440220dca56 100644
--- a/src/backend/access/hash/hash_xlog.c
+++ b/src/backend/access/hash/hash_xlog.c
@@ -314,8 +314,6 @@ hash_xlog_split_allocate_page(XLogReaderState *record)
Buffer oldbuf;
Buffer newbuf;
Buffer metabuf;
- Size datalen PG_USED_FOR_ASSERTS_ONLY;
- char *data;
XLogRedoAction action;
/*
@@ -375,41 +373,37 @@ hash_xlog_split_allocate_page(XLogReaderState *record)
{
Page page;
HashMetaPage metap;
+ Size datalen;
+ char *data;
+ uint32 *uidata;
+ int uidatacount;
page = BufferGetPage(metabuf);
metap = HashPageGetMeta(page);
metap->hashm_maxbucket = xlrec->new_bucket;
data = XLogRecGetBlockData(record, 2, &datalen);
+ uidata = (uint32 *) data;
+ uidatacount = 0;
if (xlrec->flags & XLH_SPLIT_META_UPDATE_MASKS)
{
- uint32 lowmask;
- uint32 *highmask;
-
- /* extract low and high masks. */
- memcpy(&lowmask, data, sizeof(uint32));
- highmask = (uint32 *) ((char *) data + sizeof(uint32));
+ uint32 lowmask = uidata[uidatacount++];
+ uint32 highmask = uidata[uidatacount++];
/* update metapage */
metap->hashm_lowmask = lowmask;
- metap->hashm_highmask = *highmask;
-
- data += sizeof(uint32) * 2;
+ metap->hashm_highmask = highmask;
}
if (xlrec->flags & XLH_SPLIT_META_UPDATE_SPLITPOINT)
{
- uint32 ovflpoint;
- uint32 *ovflpages;
-
- /* extract information of overflow pages. */
- memcpy(&ovflpoint, data, sizeof(uint32));
- ovflpages = (uint32 *) ((char *) data + sizeof(uint32));
+ uint32 ovflpoint = uidata[uidatacount++];
+ uint32 ovflpages = uidata[uidatacount++];
/* update metapage */
- metap->hashm_spares[ovflpoint] = *ovflpages;
metap->hashm_ovflpoint = ovflpoint;
+ metap->hashm_spares[ovflpoint] = ovflpages;
}
MarkBufferDirty(metabuf);
--
2.52.0