On Sun, Apr 05, 2020 at 07:56:51PM -0700, Andres Freund wrote: > I found this while trying to benchmark the effect of my snapshot changes > on 2pc. I just used the attached pgbench file. > > I've not yet reviewed the change sufficiently to pinpoint the issue.
Indeed. It takes seconds to show up. > It's a bit sad that nobody has hit this in the last few months :(. 2PC shines with the code of xlogreader.c in this case because it keeps opening and closing XLogReaderState for a short amount of time. So it is not surprising to me to see this error only months after the fact because recovery or pg_waldump just use one XLogReaderState. From what I can see, the error is that the code only bothers closing WALOpenSegment->seg when switching to a new segment, but we need also to close it when finishing the business in XLogReaderFree(). I am adding an open item, and attached is a patch to take care of the problem. Thoughts? -- Michael
diff --git a/src/backend/access/transam/xlogreader.c b/src/backend/access/transam/xlogreader.c index f3fea5132f..7e25e2050a 100644 --- a/src/backend/access/transam/xlogreader.c +++ b/src/backend/access/transam/xlogreader.c @@ -144,6 +144,9 @@ XLogReaderFree(XLogReaderState *state) if (state->main_data) pfree(state->main_data); + if (state->seg.ws_file >= 0) + close(state->seg.ws_file); + pfree(state->errormsg_buf); if (state->readRecordBuf) pfree(state->readRecordBuf);
signature.asc
Description: PGP signature