mirror of
https://github.com/postgres/postgres.git
synced 2026-04-22 14:47:29 -04:00
Assign "backend" type earlier during process start-up
Instead of assigning the backend type in the Main function of each postmaster child, do it right after fork(), by which time it is already known by postmaster_child_launch(). This reduces the time frame during which MyBackendType is incorrect. Before this commit, ProcessStartupPacket would overwrite MyBackendType to B_BACKEND for dead-end backends, which is quite dubious. Stop that. We may now see MyBackendType == B_BG_WORKER before setting up MyBgworkerEntry. As far as I can see this is only a problem if we try to log a message and %b is in log_line_prefix, so we now have a constant string to cover that case. Previously, it would print "unrecognized", which seems strictly worse. Author: Euler Taveira <euler@eulerto.com> Discussion: https://postgr.es/m/e85c6671-1600-4112-8887-f97a8a5d07b2@app.fastmail.com
This commit is contained in:
parent
36ead71232
commit
0c8e082fba
15 changed files with 10 additions and 17 deletions
|
|
@ -385,7 +385,6 @@ AutoVacLauncherMain(const void *startup_data, size_t startup_data_len)
|
|||
PostmasterContext = NULL;
|
||||
}
|
||||
|
||||
MyBackendType = B_AUTOVAC_LAUNCHER;
|
||||
init_ps_display(NULL);
|
||||
|
||||
ereport(DEBUG1,
|
||||
|
|
@ -1398,7 +1397,6 @@ AutoVacWorkerMain(const void *startup_data, size_t startup_data_len)
|
|||
PostmasterContext = NULL;
|
||||
}
|
||||
|
||||
MyBackendType = B_AUTOVAC_WORKER;
|
||||
init_ps_display(NULL);
|
||||
|
||||
Assert(GetProcessingMode() == InitProcessing);
|
||||
|
|
|
|||
|
|
@ -759,7 +759,6 @@ BackgroundWorkerMain(const void *startup_data, size_t startup_data_len)
|
|||
}
|
||||
|
||||
MyBgworkerEntry = worker;
|
||||
MyBackendType = B_BG_WORKER;
|
||||
init_ps_display(worker->bgw_name);
|
||||
|
||||
Assert(GetProcessingMode() == InitProcessing);
|
||||
|
|
|
|||
|
|
@ -94,7 +94,6 @@ BackgroundWriterMain(const void *startup_data, size_t startup_data_len)
|
|||
|
||||
Assert(startup_data_len == 0);
|
||||
|
||||
MyBackendType = B_BG_WRITER;
|
||||
AuxiliaryProcessMainCommon();
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -199,7 +199,6 @@ CheckpointerMain(const void *startup_data, size_t startup_data_len)
|
|||
|
||||
Assert(startup_data_len == 0);
|
||||
|
||||
MyBackendType = B_CHECKPOINTER;
|
||||
AuxiliaryProcessMainCommon();
|
||||
|
||||
CheckpointerShmem->checkpointer_pid = MyProcPid;
|
||||
|
|
|
|||
|
|
@ -223,6 +223,8 @@ postmaster_child_launch(BackendType child_type, int child_slot,
|
|||
pid = fork_process();
|
||||
if (pid == 0) /* child */
|
||||
{
|
||||
MyBackendType = child_type;
|
||||
|
||||
/* Capture and transfer timings that may be needed for logging */
|
||||
if (IsExternalConnectionBackend(child_type))
|
||||
{
|
||||
|
|
@ -607,6 +609,7 @@ SubPostmasterMain(int argc, char *argv[])
|
|||
child_type = (BackendType) atoi(child_kind);
|
||||
if (child_type <= B_INVALID || child_type > BACKEND_NUM_TYPES - 1)
|
||||
elog(ERROR, "unknown child kind %s", child_kind);
|
||||
MyBackendType = child_type;
|
||||
|
||||
/* Read in the variables file */
|
||||
read_backend_variables(argv[2], &startup_data, &startup_data_len);
|
||||
|
|
|
|||
|
|
@ -222,7 +222,6 @@ PgArchiverMain(const void *startup_data, size_t startup_data_len)
|
|||
{
|
||||
Assert(startup_data_len == 0);
|
||||
|
||||
MyBackendType = B_ARCHIVER;
|
||||
AuxiliaryProcessMainCommon();
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -217,7 +217,6 @@ StartupProcessMain(const void *startup_data, size_t startup_data_len)
|
|||
{
|
||||
Assert(startup_data_len == 0);
|
||||
|
||||
MyBackendType = B_STARTUP;
|
||||
AuxiliaryProcessMainCommon();
|
||||
|
||||
/* Arrange to clean up at startup process exit */
|
||||
|
|
|
|||
|
|
@ -206,7 +206,6 @@ SysLoggerMain(const void *startup_data, size_t startup_data_len)
|
|||
|
||||
now = MyStartTime;
|
||||
|
||||
MyBackendType = B_LOGGER;
|
||||
init_ps_display(NULL);
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -234,7 +234,6 @@ WalSummarizerMain(const void *startup_data, size_t startup_data_len)
|
|||
|
||||
Assert(startup_data_len == 0);
|
||||
|
||||
MyBackendType = B_WAL_SUMMARIZER;
|
||||
AuxiliaryProcessMainCommon();
|
||||
|
||||
ereport(DEBUG1,
|
||||
|
|
|
|||
|
|
@ -94,7 +94,6 @@ WalWriterMain(const void *startup_data, size_t startup_data_len)
|
|||
|
||||
Assert(startup_data_len == 0);
|
||||
|
||||
MyBackendType = B_WAL_WRITER;
|
||||
AuxiliaryProcessMainCommon();
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -1541,8 +1541,6 @@ ReplSlotSyncWorkerMain(const void *startup_data, size_t startup_data_len)
|
|||
|
||||
Assert(startup_data_len == 0);
|
||||
|
||||
MyBackendType = B_SLOTSYNC_WORKER;
|
||||
|
||||
init_ps_display(NULL);
|
||||
|
||||
Assert(GetProcessingMode() == InitProcessing);
|
||||
|
|
|
|||
|
|
@ -169,7 +169,6 @@ WalReceiverMain(const void *startup_data, size_t startup_data_len)
|
|||
|
||||
Assert(startup_data_len == 0);
|
||||
|
||||
MyBackendType = B_WAL_RECEIVER;
|
||||
AuxiliaryProcessMainCommon();
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -390,7 +390,6 @@ IoWorkerMain(const void *startup_data, size_t startup_data_len)
|
|||
volatile int error_errno = 0;
|
||||
char cmd[128];
|
||||
|
||||
MyBackendType = B_IO_WORKER;
|
||||
AuxiliaryProcessMainCommon();
|
||||
|
||||
pqsignal(SIGHUP, SignalHandlerForConfigReload);
|
||||
|
|
|
|||
|
|
@ -846,10 +846,9 @@ ProcessStartupPacket(Port *port, bool ssl_done, bool gss_done)
|
|||
if (strlen(port->user_name) >= NAMEDATALEN)
|
||||
port->user_name[NAMEDATALEN - 1] = '\0';
|
||||
|
||||
Assert(MyBackendType == B_BACKEND || MyBackendType == B_DEAD_END_BACKEND);
|
||||
if (am_walsender)
|
||||
MyBackendType = B_WAL_SENDER;
|
||||
else
|
||||
MyBackendType = B_BACKEND;
|
||||
|
||||
/*
|
||||
* Normal walsender backends, e.g. for streaming replication, are not
|
||||
|
|
|
|||
|
|
@ -2779,7 +2779,12 @@ get_backend_type_for_log(void)
|
|||
if (MyProcPid == PostmasterPid)
|
||||
backend_type_str = "postmaster";
|
||||
else if (MyBackendType == B_BG_WORKER)
|
||||
backend_type_str = MyBgworkerEntry->bgw_type;
|
||||
{
|
||||
if (MyBgworkerEntry)
|
||||
backend_type_str = MyBgworkerEntry->bgw_type;
|
||||
else
|
||||
backend_type_str = "early bgworker";
|
||||
}
|
||||
else
|
||||
backend_type_str = GetBackendTypeDesc(MyBackendType);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue