Re: [PATCH] XLogReadRecord returns pointer to currently read page
Andrei Lepikhov <a.lepikhov@postgrespro.ru>
From: Andrey Lepikhov <a.lepikhov@postgrespro.ru>
To: Heikki Linnakangas <hlinnaka@iki.fi>,
PostgreSQL-Dev <pgsql-hackers@postgresql.org>
Date: 2018-10-22T17:54:19Z
Lists: pgsql-hackers
On 22.10.2018 2:06, Heikki Linnakangas wrote: > On 17/08/2018 06:47, Andrey Lepikhov wrote: >> 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. > > Hmm. I agree it looks weird the way it is. But I wonder, why do we even > copy the record to readRecordBuf, if it fits on the WAL page? Returning > a pointer to the xlog page buffer seems OK in that case. What if we > remove the memcpy(), instead? It depends on the PostgreSQL roadmap. If we want to compress main data and encode something to reduce a WAL-record size, than the representation of the WAL-record in shared buffers (packed) and in local memory (unpacked) will be different and the patch is needed. If something like this should not be in the PostgreSQL core, then it is more efficient to remove memcpy(), of course. I vote for the patch. -- Andrey Lepikhov Postgres Professional https://postgrespro.com The Russian Postgres Company
Commits
-
Improve description of buffer used to store records in WAL reader
- 0999ac479292 12.0 landed
-
Remove unnecessary memcpy when reading WAL record fitting on page
- 285bd0ac4a7c 12.0 landed