mirror of
https://github.com/postgres/postgres.git
synced 2025-06-17 17:02:08 +03:00
Suppress log spam from multiple reports of SIGQUIT shutdown.
When the postmaster sends SIGQUIT to its children, there's no real
need for all the children to log that fact; the postmaster already
made a log entry about it, so adding perhaps dozens or hundreds of
child-process log entries adds nothing of value. So, let's introduce
a new ereport level to specify "WARNING, but never send to log" and
use that for these messages.
Such a change wouldn't have been desirable before commit 7e784d1dc
,
because if someone manually SIGQUIT's a backend, we *do* want to log
that. But now we can tell the difference between a signal that was
issued by the postmaster and one that was not with reasonable
certainty.
While we're here, also clear error_context_stack before ereport'ing,
to prevent error callbacks from being invoked in the signal-handler
context. This should reduce the odds of getting hung up while trying
to notify the client.
Per a suggestion from Andres Freund.
Discussion: https://postgr.es/m/20201225230331.hru3u6obyy6j53tk@alap3.anarazel.de
This commit is contained in:
@ -2789,6 +2789,18 @@ quickdie(SIGNAL_ARGS)
|
||||
* wrong, so there's not much to lose. Assuming the postmaster is still
|
||||
* running, it will SIGKILL us soon if we get stuck for some reason.
|
||||
*
|
||||
* One thing we can do to make this a tad safer is to clear the error
|
||||
* context stack, so that context callbacks are not called. That's a lot
|
||||
* less code that could be reached here, and the context info is unlikely
|
||||
* to be very relevant to a SIGQUIT report anyway.
|
||||
*/
|
||||
error_context_stack = NULL;
|
||||
|
||||
/*
|
||||
* When responding to a postmaster-issued signal, we send the message only
|
||||
* to the client; sending to the server log just creates log spam, plus
|
||||
* it's more code that we need to hope will work in a signal handler.
|
||||
*
|
||||
* Ideally these should be ereport(FATAL), but then we'd not get control
|
||||
* back to force the correct type of process exit.
|
||||
*/
|
||||
@ -2802,7 +2814,7 @@ quickdie(SIGNAL_ARGS)
|
||||
break;
|
||||
case PMQUIT_FOR_CRASH:
|
||||
/* A crash-and-restart cycle is in progress */
|
||||
ereport(WARNING,
|
||||
ereport(WARNING_CLIENT_ONLY,
|
||||
(errcode(ERRCODE_CRASH_SHUTDOWN),
|
||||
errmsg("terminating connection because of crash of another server process"),
|
||||
errdetail("The postmaster has commanded this server process to roll back"
|
||||
@ -2814,7 +2826,7 @@ quickdie(SIGNAL_ARGS)
|
||||
break;
|
||||
case PMQUIT_FOR_STOP:
|
||||
/* Immediate-mode stop */
|
||||
ereport(WARNING,
|
||||
ereport(WARNING_CLIENT_ONLY,
|
||||
(errcode(ERRCODE_ADMIN_SHUTDOWN),
|
||||
errmsg("terminating connection due to immediate shutdown command")));
|
||||
break;
|
||||
|
Reference in New Issue
Block a user