Re: Windows buildfarm members vs. new async-notify isolation test
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Amit Kapila <amit.kapila16@gmail.com>
Cc: Magnus Hagander <magnus@hagander.net>,
Andrew Dunstan <andrew.dunstan@2ndquadrant.com>,
Mark Dilger <hornschnorter@gmail.com>,
PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2019-12-10T15:57:13Z
Lists: pgsql-hackers
Amit Kapila <amit.kapila16@gmail.com> writes: > On Sun, Dec 8, 2019 at 10:27 PM Tom Lane <tgl@sss.pgh.pa.us> wrote: >> Doing it like this seems attractive to me because it gets rid of two >> different failure modes: inability to create a new thread and inability >> to create a new pipe handle. Now on the other hand, it means that >> inability to complete the read/write transaction with a client right >> away will delay processing of other signals. But we know that the >> client is engaged in a CallNamedPipe operation, so how realistic is >> that concern? > Right, the client is engaged in a CallNamedPipe operation, but the > current mechanism can allow multiple such clients and that might lead > to faster processing of signals. It would only matter if multiple processes signal the same backend at the same time, which seems to me to be probably a very minority use-case. For the normal case of one signal arriving at a time, what I'm suggesting ought to be noticeably faster because of fewer kernel calls. Surely creating a new pipe instance and a new thread are not free. In any case, the main thing I'm on about here is getting rid of the failure modes. The existing code does have a rather lame/buggy workaround for the cant-create-new-pipe case. A possible answer for cant-create-new-thread might be to go ahead and service the current request locally in the long-lived signal thread. But that seems like it's piling useless (and hard to test) complexity on top of useless complexity. > Ideally, we can run a couple of tests to see if there is any help in > servicing the signals with this mechanism over proposed change on > different Windows machines, but is it really worth the effort? The failure modes I'm worried about are obviously pretty low-probability; if they were not, we'd be getting field reports about it. So I'm not sure how you can test your way to a conclusion about whether this is an improvement. But we're not in the business of ignoring failure modes just because they're low-probability. I'd argue that a kernel call that's not there is a kernel call that cannot fail, and therefore ipso facto an improvement. regards, tom lane
Commits
-
Use only one thread to handle incoming signals on Windows.
- 16114f2ea0c0 13.0 landed
-
Fix race condition in our Windows signal emulation.
- df44e411c008 9.6.17 landed
- 7309e75fa956 9.4.26 landed
- 1a0c65120137 9.5.21 landed
- 096ea540e1e9 10.12 landed
- 2ed302ab9703 11.7 landed
- 28e6a2fd6358 13.0 landed
- 001362cfdc94 12.2 landed