Thread: Followup comment for bug report 'postmaster ignores SIGPIPE' [was: Bug#255208: Would help with client aborts, too.]
Followup comment for bug report 'postmaster ignores SIGPIPE' [was: Bug#255208: Would help with client aborts, too.]
From
Martin Pitt
Date:
Hi PostgreSQL developers, FYI, this was recently sent to the ancient old Debian bug report 'Postmaster ignores SIGPIPE'. [1] It seems that this was introduced way back in 1997 in [2], but withouth a sufficient explanation why SIGPIPE isn't properly handled instead of just ignored. The bug trail in [1] contains a followup from Tom that ignoring SIGPIPE is specifically intended. Is there any document which states the reason for that? Thanks in advance for any insight, Martin [1] http://bugs.debian.org/255208 [2] http://archives.postgresql.org/pgsql-hackers/1997-02/msg00276.php ----- Forwarded message from Markus Schaber <schabi@logix-tt.com> ----- Subject: Bug#255208: Would help with client aborts, too. Reply-To: Markus Schaber <schabi@logix-tt.com>, 255208@bugs.debian.org Date: Fri, 24 Mar 2006 13:08:55 +0100 From: Markus Schaber <schabi@logix-tt.com> To: 255208@bugs.debian.org X-Spam-Status: No, score=3D0.7 required=3D4.0 tests=3DAWL,BAYES_50, DATE_IN_FUTURE_06_12 autolearn=3Dno version=3D3.0.3 Hello, Listening to SIGPIPE could also help detecting "unclean" client-side connection aborts, e. G. due to a program crash or sigkill on the client, or network problem between server and client. This way, the server could abort long-running statements immediately, instead of running them just to rollback them afterwards because the client does not commit. During development, I often forcedly abort my java clients, but the server continues to execute the current statement. Having two or three such sequential scans running in the background, selectively sending SIGTERM to the backends as root is the only way to get the postmaster responsive again. Thanks, Markus --=20 Markus Schaber | Logical Tracking&Tracing International AG Dipl. Inf. | Software Development GIS Fight against software patents in EU! www.ffii.org www.nosoftwarepatents.org ----- End forwarded message ----- --=20 Martin Pitt http://www.piware.de Ubuntu Developer http://www.ubuntu.com Debian Developer http://www.debian.org In a world without walls and fences, who needs Windows and Gates?
Re: Followup comment for bug report 'postmaster ignores SIGPIPE' [was: Bug#255208: Would help with client aborts, too.]
From
Tom Lane
Date:
Martin Pitt <martin@piware.de> writes: > The bug trail in [1] contains a followup from Tom that ignoring > SIGPIPE is specifically intended. Is there any document which states > the reason for that? Allowing SIGPIPE to kill the backend is completely infeasible, as the backend would be unable to release locks etc before dying. We have occasionally talked about faking a QueryCancel if we notice a write failure while sending to the client. Can't remember at the moment what the outcome of those discussions was (ie, was there a good reason not to) --- check the archives. One point is that doing so doesn't help for queries that aren't generating a lot of output, eg, updates/deletes. regards, tom lane
Re: Followup comment for bug report 'postmaster ignores SIGPIPE' [was: Bug#255208: Would help with client aborts, too.]
From
Peter Eisentraut
Date:
Tom Lane wrote: > Allowing SIGPIPE to kill the backend is completely infeasible, as the > backend would be unable to release locks etc before dying. So the upshot is really not that ignoring SIGPIPE is specifically intended as the optimal solution but that writing a proper cleanup handler for SIGPIPE seems very difficult. -- Peter Eisentraut http://developer.postgresql.org/~petere/
Re: Followup comment for bug report 'postmaster ignores SIGPIPE' [was: Bug#255208: Would help with client aborts, too.]
From
Tom Lane
Date:
Peter Eisentraut <peter_e@gmx.net> writes: > Tom Lane wrote: >> Allowing SIGPIPE to kill the backend is completely infeasible, as the >> backend would be unable to release locks etc before dying. > So the upshot is really not that ignoring SIGPIPE is specifically > intended as the optimal solution but that writing a proper cleanup > handler for SIGPIPE seems very difficult. Well, if we did want to change this it would be far easier and safer to do the other thing (ie, set QueryCancel upon noticing a write failure). The question is whether doing either one is really a material improvement, seeing that neither is going to provoke an abort until/unless the backend actually tries to write something to the client. regards, tom lane
Re: Followup comment for bug report 'postmaster ignores SIGPIPE' [was: Bug#255208: Would help with client aborts, too.]
From
"Jim C. Nasby"
Date:
On Sun, Mar 26, 2006 at 08:34:46PM -0500, Tom Lane wrote: > Peter Eisentraut <peter_e@gmx.net> writes: > > Tom Lane wrote: > >> Allowing SIGPIPE to kill the backend is completely infeasible, as the > >> backend would be unable to release locks etc before dying. > > > So the upshot is really not that ignoring SIGPIPE is specifically > > intended as the optimal solution but that writing a proper cleanup > > handler for SIGPIPE seems very difficult. > > Well, if we did want to change this it would be far easier and safer to > do the other thing (ie, set QueryCancel upon noticing a write failure). > > The question is whether doing either one is really a material > improvement, seeing that neither is going to provoke an abort > until/unless the backend actually tries to write something to the client. Is there a server equivalent to PQstatus? If there were one, couldn't the server periodically ping the client? -- Jim C. Nasby, Sr. Engineering Consultant jnasby@pervasive.com Pervasive Software http://pervasive.com work: 512-231-6117 vcard: http://jim.nasby.net/pervasive.vcf cell: 512-569-9461
Re: Followup comment for bug report 'postmaster ignores SIGPIPE' [was: Bug#255208: Would help with client aborts, too.]
From
Tom Lane
Date:
"Jim C. Nasby" <jnasby@pervasive.com> writes: > On Sun, Mar 26, 2006 at 08:34:46PM -0500, Tom Lane wrote: >> The question is whether doing either one is really a material >> improvement, seeing that neither is going to provoke an abort >> until/unless the backend actually tries to write something to the client. > Is there a server equivalent to PQstatus? If there were one, couldn't > the server periodically ping the client? No, and do you really want the server stopping its processing of the query just to go see if the client is still alive? This would slow things down and introduce a whole new failure mode, ie, client doesn't answer ping fast enough so its session gets aborted. (Just for the record, PQstatus isn't a "ping" operation either.) regards, tom lane
Re: Followup comment for bug report 'postmaster ignores SIGPIPE' [was: Bug#255208: Would help with client aborts, too.]
From
"Jim C. Nasby"
Date:
On Mon, Mar 27, 2006 at 09:50:38AM -0500, Tom Lane wrote: > "Jim C. Nasby" <jnasby@pervasive.com> writes: > > On Sun, Mar 26, 2006 at 08:34:46PM -0500, Tom Lane wrote: > >> The question is whether doing either one is really a material > >> improvement, seeing that neither is going to provoke an abort > >> until/unless the backend actually tries to write something to the client. > > > Is there a server equivalent to PQstatus? If there were one, couldn't > > the server periodically ping the client? > > No, and do you really want the server stopping its processing of the > query just to go see if the client is still alive? This would slow > things down and introduce a whole new failure mode, ie, client doesn't > answer ping fast enough so its session gets aborted. I guess it depends on how things are setup. Something like the following probably wouldn't pose a tremendous amount of overhead... set alarm 10 seconds; bool ping_sent; on alarm: if ping_sent then call to see if a ping reply is waiting for us (would this just sit in the network buffer, or would we actually get interrupted) if no ping then if timeout exceeded then abort backend; endif else set ping_sent = false; endif else ping_client(); set ping_set = true; endif Of course, the proof would be in doing some performance testing... -- Jim C. Nasby, Sr. Engineering Consultant jnasby@pervasive.com Pervasive Software http://pervasive.com work: 512-231-6117 vcard: http://jim.nasby.net/pervasive.vcf cell: 512-569-9461