mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-02-23 19:39:53 +08:00
postmaster: Start syslogger earlier
When the syslogger was originally added (bdf8ef6925
), nothing was normally logged before the point where it was started. But sincef9dfa5c977
, the creation of sockets causes messages of level LOG to be written routinely, so those don't go to the syslogger now. To improve that, arrange the sequence in PostmasterMain() slightly so that the syslogger is started early enough to capture those messages. Discussion: https://www.postgresql.org/message-id/d5d50936-20b9-85f1-06bc-94a01c5040c1%402ndquadrant.com Reviewed-by: Christoph Berg <christoph.berg@credativ.de>
This commit is contained in:
parent
7ea38f045d
commit
57431a911d
@ -992,6 +992,66 @@ PostmasterMain(int argc, char *argv[])
|
||||
*/
|
||||
InitializeMaxBackends();
|
||||
|
||||
/*
|
||||
* Initialize pipe (or process handle on Windows) that allows children to
|
||||
* wake up from sleep on postmaster death.
|
||||
*/
|
||||
InitPostmasterDeathWatchHandle();
|
||||
|
||||
/*
|
||||
* Forcibly remove the files signaling a standby promotion request.
|
||||
* Otherwise, the existence of those files triggers a promotion too early,
|
||||
* whether a user wants that or not.
|
||||
*
|
||||
* This removal of files is usually unnecessary because they can exist
|
||||
* only during a few moments during a standby promotion. However there is
|
||||
* a race condition: if pg_ctl promote is executed and creates the files
|
||||
* during a promotion, the files can stay around even after the server is
|
||||
* brought up to new master. Then, if new standby starts by using the
|
||||
* backup taken from that master, the files can exist at the server
|
||||
* startup and should be removed in order to avoid an unexpected
|
||||
* promotion.
|
||||
*
|
||||
* Note that promotion signal files need to be removed before the startup
|
||||
* process is invoked. Because, after that, they can be used by
|
||||
* postmaster's SIGUSR1 signal handler.
|
||||
*/
|
||||
RemovePromoteSignalFiles();
|
||||
|
||||
/* Do the same for logrotate signal file */
|
||||
RemoveLogrotateSignalFiles();
|
||||
|
||||
/* Remove any outdated file holding the current log filenames. */
|
||||
if (unlink(LOG_METAINFO_DATAFILE) < 0 && errno != ENOENT)
|
||||
ereport(LOG,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not remove file \"%s\": %m",
|
||||
LOG_METAINFO_DATAFILE)));
|
||||
|
||||
/*
|
||||
* If enabled, start up syslogger collection subprocess
|
||||
*/
|
||||
SysLoggerPID = SysLogger_Start();
|
||||
|
||||
/*
|
||||
* Reset whereToSendOutput from DestDebug (its starting state) to
|
||||
* DestNone. This stops ereport from sending log messages to stderr unless
|
||||
* Log_destination permits. We don't do this until the postmaster is
|
||||
* fully launched, since startup failures may as well be reported to
|
||||
* stderr.
|
||||
*
|
||||
* If we are in fact disabling logging to stderr, first emit a log message
|
||||
* saying so, to provide a breadcrumb trail for users who may not remember
|
||||
* that their logging is configured to go somewhere else.
|
||||
*/
|
||||
if (!(Log_destination & LOG_DESTINATION_STDERR))
|
||||
ereport(LOG,
|
||||
(errmsg("ending log output to stderr"),
|
||||
errhint("Future log output will go to log destination \"%s\".",
|
||||
Log_destination_string)));
|
||||
|
||||
whereToSendOutput = DestNone;
|
||||
|
||||
/*
|
||||
* Establish input sockets.
|
||||
*
|
||||
@ -1183,12 +1243,6 @@ PostmasterMain(int argc, char *argv[])
|
||||
*/
|
||||
set_stack_base();
|
||||
|
||||
/*
|
||||
* Initialize pipe (or process handle on Windows) that allows children to
|
||||
* wake up from sleep on postmaster death.
|
||||
*/
|
||||
InitPostmasterDeathWatchHandle();
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
/*
|
||||
@ -1242,60 +1296,6 @@ PostmasterMain(int argc, char *argv[])
|
||||
*/
|
||||
RemovePgTempFiles();
|
||||
|
||||
/*
|
||||
* Forcibly remove the files signaling a standby promotion request.
|
||||
* Otherwise, the existence of those files triggers a promotion too early,
|
||||
* whether a user wants that or not.
|
||||
*
|
||||
* This removal of files is usually unnecessary because they can exist
|
||||
* only during a few moments during a standby promotion. However there is
|
||||
* a race condition: if pg_ctl promote is executed and creates the files
|
||||
* during a promotion, the files can stay around even after the server is
|
||||
* brought up to new master. Then, if new standby starts by using the
|
||||
* backup taken from that master, the files can exist at the server
|
||||
* startup and should be removed in order to avoid an unexpected
|
||||
* promotion.
|
||||
*
|
||||
* Note that promotion signal files need to be removed before the startup
|
||||
* process is invoked. Because, after that, they can be used by
|
||||
* postmaster's SIGUSR1 signal handler.
|
||||
*/
|
||||
RemovePromoteSignalFiles();
|
||||
|
||||
/* Do the same for logrotate signal file */
|
||||
RemoveLogrotateSignalFiles();
|
||||
|
||||
/* Remove any outdated file holding the current log filenames. */
|
||||
if (unlink(LOG_METAINFO_DATAFILE) < 0 && errno != ENOENT)
|
||||
ereport(LOG,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("could not remove file \"%s\": %m",
|
||||
LOG_METAINFO_DATAFILE)));
|
||||
|
||||
/*
|
||||
* If enabled, start up syslogger collection subprocess
|
||||
*/
|
||||
SysLoggerPID = SysLogger_Start();
|
||||
|
||||
/*
|
||||
* Reset whereToSendOutput from DestDebug (its starting state) to
|
||||
* DestNone. This stops ereport from sending log messages to stderr unless
|
||||
* Log_destination permits. We don't do this until the postmaster is
|
||||
* fully launched, since startup failures may as well be reported to
|
||||
* stderr.
|
||||
*
|
||||
* If we are in fact disabling logging to stderr, first emit a log message
|
||||
* saying so, to provide a breadcrumb trail for users who may not remember
|
||||
* that their logging is configured to go somewhere else.
|
||||
*/
|
||||
if (!(Log_destination & LOG_DESTINATION_STDERR))
|
||||
ereport(LOG,
|
||||
(errmsg("ending log output to stderr"),
|
||||
errhint("Future log output will go to log destination \"%s\".",
|
||||
Log_destination_string)));
|
||||
|
||||
whereToSendOutput = DestNone;
|
||||
|
||||
/*
|
||||
* Initialize stats collection subsystem (this does NOT start the
|
||||
* collector process!)
|
||||
|
Loading…
Reference in New Issue
Block a user