On 2013-01-15 15:16:44 -0300, Alvaro Herrera wrote: > Andres Freund wrote: > > On 2013-01-15 09:56:41 -0300, Alvaro Herrera wrote: > > > Andres Freund wrote: > > > > On 2013-01-15 01:00:00 -0300, Alvaro Herrera wrote: > > > > > Andres Freund wrote: > > > > > > > > > > I've been giving a couple of these parts a look. In particular > > > > > > > > > > > [03] Split out xlog reading into its own module called xlogreader > > > > > > > > > > Cleaned this one up a bit last week. I will polish it some more, > > > > > publish for some final comments, and commit. > > > > > > > > I have some smaller bugfixes in my current version that you probably > > > > don't have yet (on grounds of being fixed this weekend)... So we need to > > > > be a bit careful not too loose those. > > > > > > Sure. Do you have them as individual commits? I'm assuming you rebased > > > the tree. Maybe in your reflog? IIRC I also have at least one minor > > > bug fix. > > > > I can check, which commit did you base your modifications on? > > Dunno. It's probably easier to reverse-apply the version you submitted > to see what changed, and then forward-apply again.
There's at least the two attached patches... Greetings, Andres Freund -- Andres Freund http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
>From 5ca4b81f03bd7a4bf5101bd68811548023ac12fe Mon Sep 17 00:00:00 2001 From: Andres Freund <and...@anarazel.de> Date: Mon, 14 Jan 2013 21:43:13 +0100 Subject: [PATCH] xlogreader: fix --- src/backend/access/transam/xlogreader.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index 6a420e6..9439c05 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -350,7 +350,7 @@ XLogReadRecord(XLogReaderState *state, XLogRecPtr RecPtr, char **errormsg) /* Wait for the next page to become available */ readOff = ReadPageInternal(state, targetPagePtr, - Min(len, XLOG_BLCKSZ)); + Min(total_len - gotlen + SizeOfXLogShortPHD, XLOG_BLCKSZ)); if (readOff < 0) goto err; @@ -383,6 +383,11 @@ XLogReadRecord(XLogReaderState *state, XLogRecPtr RecPtr, char **errormsg) /* Append the continuation from this page to the buffer */ pageHeaderSize = XLogPageHeaderSize(pageHeader); + + if (readOff < pageHeaderSize) + readOff = ReadPageInternal(state, targetPagePtr, + pageHeaderSize); + Assert(pageHeaderSize <= readOff); contdata = (char *) state->readBuf + pageHeaderSize; @@ -390,6 +395,10 @@ XLogReadRecord(XLogReaderState *state, XLogRecPtr RecPtr, char **errormsg) if (pageHeader->xlp_rem_len < len) len = pageHeader->xlp_rem_len; + if (readOff < (pageHeaderSize + len)) + readOff = ReadPageInternal(state, targetPagePtr, + pageHeaderSize + len); + memcpy(buffer, (char *) contdata, len); buffer += len; gotlen += len; -- 1.7.12.289.g0ce9864.dirty
>From 995d723239df325b48412878fa818c94cb33f724 Mon Sep 17 00:00:00 2001 From: Andres Freund <and...@anarazel.de> Date: Tue, 15 Jan 2013 00:58:49 +0100 Subject: [PATCH] xlogreader: use correct type --- src/backend/access/transam/xlogreader.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index 9439c05..f2b9355 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -927,7 +927,7 @@ XLogFindNextRecord(XLogReaderState *state, XLogRecPtr RecPtr) uint32 pageHeaderSize; XLogPageHeader header; XLogRecord *record; - uint32 readLen; + int readLen; char *errormsg; if (RecPtr == InvalidXLogRecPtr) -- 1.7.12.289.g0ce9864.dirty
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers