v20251001-0013-BufFileLoadBuffer-simplify-skipping-header.patch
text/x-patch
Filename: v20251001-0013-BufFileLoadBuffer-simplify-skipping-header.patch
Type: text/x-patch
Part: 12
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 v20251001-0013
Subject: BufFileLoadBuffer - simplify skipping header
| File | + | − |
|---|---|---|
| src/backend/storage/file/buffile.c | 16 | 17 |
From 2ff555d64d4c8f5943e43bfed1bad84136e97e95 Mon Sep 17 00:00:00 2001
From: Tomas Vondra <tomas@vondra.me>
Date: Mon, 29 Sep 2025 23:07:33 +0200
Subject: [PATCH v20251001 13/25] BufFileLoadBuffer - simplify skipping header
---
src/backend/storage/file/buffile.c | 33 +++++++++++++++---------------
1 file changed, 16 insertions(+), 17 deletions(-)
diff --git a/src/backend/storage/file/buffile.c b/src/backend/storage/file/buffile.c
index 985e297ad25..406c93b812a 100644
--- a/src/backend/storage/file/buffile.c
+++ b/src/backend/storage/file/buffile.c
@@ -607,17 +607,19 @@ BufFileLoadBuffer(BufFile *file)
/* read length of compressed data, read and decompress data */
char *buff = file->cBuffer;
int original_size = 0;
- int header_advance = sizeof(nbytes);
Assert(file->cBuffer != NULL);
+ /* advance past the length field */
+ file->curOffset += sizeof(nbytes);
+
/* For PGLZ, read additional original size */
if (temp_file_compression == TEMP_PGLZ_COMPRESSION)
{
int nread_orig = FileRead(thisfile,
&original_size,
sizeof(original_size),
- file->curOffset + sizeof(nbytes),
+ file->curOffset,
WAIT_EVENT_BUFFILE_READ);
/*
@@ -633,28 +635,27 @@ BufFileLoadBuffer(BufFile *file)
FilePathName(thisfile))));
}
+ /* advance past the second length header */
+ file->curOffset += sizeof(original_size);
/* Check if data is uncompressed (marker = -1) */
if (original_size == -1)
{
-
- int nread_data = 0;
-
- /* Uncompressed data: read directly into buffer */
- file->curOffset += 2 * sizeof(int); /* Skip both header
- * fields */
- nread_data = FileRead(thisfile,
- file->buffer.data,
- nbytes, /* nbytes contains
+ int nread_data = FileRead(thisfile,
+ file->buffer.data,
+ nbytes, /* nbytes contains
* original size */
- file->curOffset,
- WAIT_EVENT_BUFFILE_READ);
+ file->curOffset,
+ WAIT_EVENT_BUFFILE_READ);
file->nbytes = nread_data;
file->curOffset += nread_data;
+
+ /*
+ * FIXME this is wrong, because it skips the track_io_timing
+ * stuff at the end, etc.
+ */
return;
}
-
- header_advance = 2 * sizeof(int);
}
/*
@@ -662,8 +663,6 @@ BufFileLoadBuffer(BufFile *file)
* data than it returns to caller So the curOffset must be
* advanced here based on compressed size
*/
- file->curOffset += header_advance;
-
nread = FileRead(thisfile,
buff,
nbytes,
--
2.51.0