Re: 2pc leaks fds
Andres Freund <andres@anarazel.de>
From: Andres Freund <andres@anarazel.de>
To: Antonin Houska <ah@cybertec.at>
Cc: Michael Paquier <michael@paquier.xyz>, pgsql-hackers@postgresql.org, Alvaro Herrera <alvherre@2ndquadrant.com>
Date: 2020-04-08T00:12:49Z
Lists: pgsql-hackers
Hi, I pushed a fix. While it might not be the best medium/long term fix, it unbreaks 2PC. Perhaps we should add an open item to track whether we want to fix this differently? On 2020-04-06 09:12:32 +0200, Antonin Houska wrote: > Andres Freund <andres@anarazel.de> wrote: > It should have allowed users to have different ways to *locate the segment* > file. The WALSegmentOpen callback could actually return file path instead of > the file descriptor and let WALRead() perform the opening/closing, but then > the WALRead function would need to be aware whether it is executing in backend > or in frontend (so it can use the correct function to open/close the file). > > I was aware of the problem that the correct function should be used to open > the file and that's why this comment was added (although "mandatory" would be > more suitable than "preferred"): > > * BasicOpenFile() is the preferred way to open the segment file in backend > * code, whereas open(2) should be used in frontend. > */ > typedef int (*WALSegmentOpen) (XLogSegNo nextSegNo, WALSegmentContext *segcxt, > TimeLineID *tli_p); I don't think that BasicOpenFile() really solves anything here? If anything it *exascerbates* the problem, because it will trigger all of the "virtual file descriptors" for already opened Files to close() the underlying OS FDs. So not even a fully cached table can be seqscanned, because that tries to check the file size... Greetings, Andres Freund
Commits
-
Fix obsolete references to "XLogRead"
- a8be5364ac16 13.0 landed
-
Rework XLogReader callback system
- b060dbe0001a 13.0 landed
-
Fix XLogReader FD leak that makes backends unusable after 2PC usage.
- 91c40548d5f7 13.0 landed
-
Refactor WAL file-reading code into WALRead()
- 0dc8ead46363 13.0 cited
-
Add ArchiveOpts to pass options to ArchiveEntry
- f831d4accda0 12.0 cited