Re: Is RecoveryConflictInterrupt() entirely safe in a signal handler?
Michael Paquier <michael@paquier.xyz>
From: Michael Paquier <michael@paquier.xyz>
To: Thomas Munro <thomas.munro@gmail.com>
Cc: Robert Haas <robertmhaas@gmail.com>, Andres Freund <andres@anarazel.de>, Tom Lane <tgl@sss.pgh.pa.us>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2022-06-22T01:04:05Z
Lists: pgsql-hackers
On Tue, Jun 21, 2022 at 11:02:57PM +1200, Thomas Munro wrote: > On Tue, Jun 21, 2022 at 7:44 PM Michael Paquier <michael@paquier.xyz> wrote: >> The extra business with QueryCancelHoldoffCount and DoingCommandRead >> is the only addition for the snapshot, lock and tablespace conflict >> handling part. I don't see why a reason why that could be wrong on a >> close lookup. Anyway, why don't you check QueryCancelPending on top >> of QueryCancelHoldoffCount? > > The idea of this patch is to make ProcessRecoveryConflictInterrupt() > throw its own ERROR, instead of setting QueryCancelPending (as an > earlier version of the patch did). It still has to respect > QueryCancelHoldoffCount, though, to avoid emitting an ERROR at bad > times for the fe/be protocol. Yeah, I was reading through v3 and my brain questioned the inconsistency, but I can see that v2 already did that and I have also looked at it. Anyway, my concern here is that the code becomes more dependent on the ordering of ProcessRecoveryConflictInterrupt() and the code path checking for QueryCancelPending in ProcessInterrupts(). With the patch, we should always have QueryCancelPending set to false, as long as there are no QueryCancelHoldoffCount. Perhaps an extra assertion for QueryCancelPending could be added at the beginning of ProcessRecoveryConflictInterrupts(), in combination of the one already present for InterruptHoldoffCount. I agree that's a minor point, though. -- Michael
Commits
-
Fix recovery conflict SIGUSR1 handling.
- 0da096d78e1e 17.0 landed
-
Redesign interrupt/cancel API for regex engine.
- db4f21e4a34b 16.0 landed
-
Update contrib/trgm_regexp's memory management.
- 6db75edb2ecb 16.0 landed
-
Update tsearch regex memory management.
- 4f51429dd7f1 16.0 landed
-
Use MemoryContext API for regex memory management.
- bea3d7e3831f 16.0 landed