v2-0006-Remove-custom-logic-for-ginxlogCreatePostingTree-.patch
application/octet-stream
Filename: v2-0006-Remove-custom-logic-for-ginxlogCreatePostingTree-.patch
Type: application/octet-stream
Part: 5
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v2-0006
Subject: Remove custom logic for ginxlogCreatePostingTree, replace with FPW
| File | + | − |
|---|---|---|
| src/backend/access/gin/gindatapage.c | 2 | 7 |
| src/backend/access/gin/ginxlog.c | 4 | 20 |
| src/include/access/ginxlog.h | 0 | 5 |
From 19a2bb88383228fc39ee860b990ec8ccc9363c89 Mon Sep 17 00:00:00 2001
From: reshke <reshke@double.cloud>
Date: Fri, 26 Sep 2025 09:31:40 +0000
Subject: [PATCH v2 6/6] Remove custom logic for ginxlogCreatePostingTree,
replace with FPW
---
src/backend/access/gin/gindatapage.c | 9 ++-------
src/backend/access/gin/ginxlog.c | 24 ++++--------------------
src/include/access/ginxlog.h | 5 -----
3 files changed, 6 insertions(+), 32 deletions(-)
diff --git a/src/backend/access/gin/gindatapage.c b/src/backend/access/gin/gindatapage.c
index 6c2c6194720..2b9254d2850 100644
--- a/src/backend/access/gin/gindatapage.c
+++ b/src/backend/access/gin/gindatapage.c
@@ -1839,18 +1839,13 @@ createPostingTree(Relation index, ItemPointerData *items, uint32 nitems,
if (RelationNeedsWAL(index) && !is_build)
{
XLogRecPtr recptr;
- ginxlogCreatePostingTree data;
-
- data.size = rootsize;
XLogBeginInsert();
- XLogRegisterData(&data, sizeof(ginxlogCreatePostingTree));
- XLogRegisterData(GinDataLeafPageGetPostingList(page),
- rootsize);
- XLogRegisterBuffer(0, buffer, REGBUF_WILL_INIT);
+ XLogRegisterBuffer(0, buffer, REGBUF_FORCE_IMAGE | REGBUF_STANDARD);
recptr = XLogInsert(RM_GIN_ID, XLOG_GIN_CREATE_PTREE);
+
PageSetLSN(page, recptr);
}
diff --git a/src/backend/access/gin/ginxlog.c b/src/backend/access/gin/ginxlog.c
index fa293ee79d5..a48557a62b1 100644
--- a/src/backend/access/gin/ginxlog.c
+++ b/src/backend/access/gin/ginxlog.c
@@ -43,28 +43,12 @@ ginRedoClearIncompleteSplit(XLogReaderState *record, uint8 block_id)
static void
ginRedoCreatePTree(XLogReaderState *record)
{
- XLogRecPtr lsn = record->EndRecPtr;
- ginxlogCreatePostingTree *data = (ginxlogCreatePostingTree *) XLogRecGetData(record);
- char *ptr;
- Buffer buffer;
- Page page;
-
- buffer = XLogInitBufferForRedo(record, 0);
- page = BufferGetPage(buffer);
-
- GinInitBuffer(buffer, GIN_DATA | GIN_LEAF | GIN_COMPRESSED);
+ Buffer buf;
- ptr = XLogRecGetData(record) + sizeof(ginxlogCreatePostingTree);
+ if (XLogReadBufferForRedo(record, 0, &buf) != BLK_RESTORED)
+ elog(ERROR, "GIN create posting tree record did not contain a full-page image");
- /* Place page data */
- memcpy(GinDataLeafPageGetPostingList(page), ptr, data->size);
-
- GinDataPageSetDataSize(page, data->size);
-
- PageSetLSN(page, lsn);
-
- MarkBufferDirty(buffer);
- UnlockReleaseBuffer(buffer);
+ UnlockReleaseBuffer(buf);
}
static void
diff --git a/src/include/access/ginxlog.h b/src/include/access/ginxlog.h
index 56ba80b112c..9c98ba1f264 100644
--- a/src/include/access/ginxlog.h
+++ b/src/include/access/ginxlog.h
@@ -18,11 +18,6 @@
#define XLOG_GIN_CREATE_PTREE 0x10
-typedef struct ginxlogCreatePostingTree
-{
- uint32 size;
- /* A compressed posting list follows */
-} ginxlogCreatePostingTree;
/*
* The format of the insertion record varies depending on the page type.
--
2.43.0