[PATCH] XLogReadRecord returns pointer to currently read page

From: Andrey Lepikhov <a(dot)lepikhov(at)postgrespro(dot)ru>
To: PostgreSQL-Dev <pgsql-hackers(at)postgresql(dot)org>
Subject: [PATCH] XLogReadRecord returns pointer to currently read page
Date: 2018-08-17 03:47:15
Message-ID: c2ea54dd-a1d3-80eb-ddbf-7e6f258e615e@postgrespro.ru
Views: Raw Message | Whole Thread | Download mbox
Thread:
Lists: pgsql-hackers

Hi, hackers!

I propose the patch for fix one small code defect.
The XLogReadRecord() function reads the pages of a WAL segment that
contain a WAL-record. Then it creates a readRecordBuf buffer in private
memory of a backend and copy record from the pages to the readRecordBuf
buffer. Pointer 'record' is set to the beginning of the readRecordBuf
buffer.

But if the WAL-record is fully placed on one page, the XLogReadRecord()
function forgets to bind the "record" pointer with the beginning of the
readRecordBuf buffer. In this case, XLogReadRecord() returns a pointer
to an internal xlog page. This patch fixes the defect.

Previously, in all cases of using WAL this was not a problem. However if
you plan to perform some decoding operations before returning the WAL
record to the caller (this is my case), this can lead to bugs that are
difficult to catch.

--
Andrey Lepikhov
Postgres Professional
https://postgrespro.com
The Russian Postgres Company

Attachment Content-Type Size
0001-WAL-record-local-buffer-pointer-fix.patch text/x-patch 777 bytes

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2018-08-17 03:55:21 Re: [PATCH] XLogReadRecord returns pointer to currently read page
Previous Message Tatsuro Yamada 2018-08-17 03:42:49 Re: Fix help option of contrib/oid2name