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
PostmasterContext = NULL;
}
- MyBackendType = B_AUTOVAC_LAUNCHER;
init_ps_display(NULL);
ereport(DEBUG1,
PostmasterContext = NULL;
}
- MyBackendType = B_AUTOVAC_WORKER;
init_ps_display(NULL);
Assert(GetProcessingMode() == InitProcessing);
}
MyBgworkerEntry = worker;
- MyBackendType = B_BG_WORKER;
init_ps_display(worker->bgw_name);
Assert(GetProcessingMode() == InitProcessing);
Assert(startup_data_len == 0);
- MyBackendType = B_BG_WRITER;
AuxiliaryProcessMainCommon();
/*
Assert(startup_data_len == 0);
- MyBackendType = B_CHECKPOINTER;
AuxiliaryProcessMainCommon();
CheckpointerShmem->checkpointer_pid = MyProcPid;
pid = fork_process();
if (pid == 0) /* child */
{
+ MyBackendType = child_type;
+
/* Capture and transfer timings that may be needed for logging */
if (IsExternalConnectionBackend(child_type))
{
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);
{
Assert(startup_data_len == 0);
- MyBackendType = B_ARCHIVER;
AuxiliaryProcessMainCommon();
/*
{
Assert(startup_data_len == 0);
- MyBackendType = B_STARTUP;
AuxiliaryProcessMainCommon();
/* Arrange to clean up at startup process exit */
now = MyStartTime;
- MyBackendType = B_LOGGER;
init_ps_display(NULL);
/*
Assert(startup_data_len == 0);
- MyBackendType = B_WAL_SUMMARIZER;
AuxiliaryProcessMainCommon();
ereport(DEBUG1,
Assert(startup_data_len == 0);
- MyBackendType = B_WAL_WRITER;
AuxiliaryProcessMainCommon();
/*
Assert(startup_data_len == 0);
- MyBackendType = B_SLOTSYNC_WORKER;
-
init_ps_display(NULL);
Assert(GetProcessingMode() == InitProcessing);
Assert(startup_data_len == 0);
- MyBackendType = B_WAL_RECEIVER;
AuxiliaryProcessMainCommon();
/*
volatile int error_errno = 0;
char cmd[128];
- MyBackendType = B_IO_WORKER;
AuxiliaryProcessMainCommon();
pqsignal(SIGHUP, SignalHandlerForConfigReload);
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
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);