aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Eisentraut <peter@eisentraut.org>2020-03-11 16:36:40 +0100
committerPeter Eisentraut <peter@eisentraut.org>2020-03-13 14:01:10 +0100
commit8e8a0becb335529c66a9f82f88e1419e49b458ae (patch)
tree20eb3ec548fcf2d37ae150f44c1c7949ee9fda5a /src
parent1cc9c2412cc9a2fbe6a381170097d315fd40ccca (diff)
downloadpostgresql-8e8a0becb335529c66a9f82f88e1419e49b458ae.tar.gz
postgresql-8e8a0becb335529c66a9f82f88e1419e49b458ae.zip
Unify several ways to tracking backend type
Add a new global variable MyBackendType that uses the same BackendType enum that was previously only used by the stats collector. That way several duplicate ways of checking what type a particular process is can be simplified. Since it's no longer just for stats, move to miscinit.c and rename existing functions to match the expanded purpose. Reviewed-by: Julien Rouhaud <rjuju123@gmail.com> Reviewed-by: Kuntal Ghosh <kuntalghosh.2007@gmail.com> Reviewed-by: Alvaro Herrera <alvherre@2ndquadrant.com> Discussion: https://www.postgresql.org/message-id/flat/c65e5196-4f04-4ead-9353-6088c19615a3@2ndquadrant.com
Diffstat (limited to 'src')
-rw-r--r--src/backend/bootstrap/bootstrap.c48
-rw-r--r--src/backend/postmaster/autovacuum.c8
-rw-r--r--src/backend/postmaster/bgworker.c2
-rw-r--r--src/backend/postmaster/pgarch.c6
-rw-r--r--src/backend/postmaster/pgstat.c105
-rw-r--r--src/backend/postmaster/postmaster.c7
-rw-r--r--src/backend/postmaster/syslogger.c3
-rw-r--r--src/backend/utils/adt/pgstatfuncs.c2
-rw-r--r--src/backend/utils/init/miscinit.c55
-rw-r--r--src/backend/utils/misc/ps_status.c11
-rw-r--r--src/include/miscadmin.h22
-rw-r--r--src/include/pgstat.h21
12 files changed, 126 insertions, 164 deletions
diff --git a/src/backend/bootstrap/bootstrap.c b/src/backend/bootstrap/bootstrap.c
index 7923d1ec9b2..5480a024e05 100644
--- a/src/backend/bootstrap/bootstrap.c
+++ b/src/backend/bootstrap/bootstrap.c
@@ -314,36 +314,28 @@ AuxiliaryProcessMain(int argc, char *argv[])
proc_exit(1);
}
- /*
- * Identify myself via ps
- */
- if (IsUnderPostmaster)
+ switch (MyAuxProcType)
{
- const char *statmsg;
-
- switch (MyAuxProcType)
- {
- case StartupProcess:
- statmsg = pgstat_get_backend_desc(B_STARTUP);
- break;
- case BgWriterProcess:
- statmsg = pgstat_get_backend_desc(B_BG_WRITER);
- break;
- case CheckpointerProcess:
- statmsg = pgstat_get_backend_desc(B_CHECKPOINTER);
- break;
- case WalWriterProcess:
- statmsg = pgstat_get_backend_desc(B_WAL_WRITER);
- break;
- case WalReceiverProcess:
- statmsg = pgstat_get_backend_desc(B_WAL_RECEIVER);
- break;
- default:
- statmsg = "??? process";
- break;
- }
- init_ps_display(statmsg);
+ case StartupProcess:
+ MyBackendType = B_STARTUP;
+ break;
+ case BgWriterProcess:
+ MyBackendType = B_BG_WRITER;
+ break;
+ case CheckpointerProcess:
+ MyBackendType = B_CHECKPOINTER;
+ break;
+ case WalWriterProcess:
+ MyBackendType = B_WAL_WRITER;
+ break;
+ case WalReceiverProcess:
+ MyBackendType = B_WAL_RECEIVER;
+ break;
+ default:
+ MyBackendType = B_INVALID;
}
+ if (IsUnderPostmaster)
+ init_ps_display(NULL);
/* Acquire configuration parameters, unless inherited from postmaster */
if (!IsUnderPostmaster)
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index a6499fc3da6..da75e755f0f 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -433,8 +433,8 @@ AutoVacLauncherMain(int argc, char *argv[])
am_autovacuum_launcher = true;
- /* Identify myself via ps */
- init_ps_display(pgstat_get_backend_desc(B_AUTOVAC_LAUNCHER));
+ MyBackendType = B_AUTOVAC_LAUNCHER;
+ init_ps_display(NULL);
ereport(DEBUG1,
(errmsg("autovacuum launcher started")));
@@ -1506,8 +1506,8 @@ AutoVacWorkerMain(int argc, char *argv[])
am_autovacuum_worker = true;
- /* Identify myself via ps */
- init_ps_display(pgstat_get_backend_desc(B_AUTOVAC_WORKER));
+ MyBackendType = B_AUTOVAC_WORKER;
+ init_ps_display(NULL);
SetProcessingMode(InitProcessing);
diff --git a/src/backend/postmaster/bgworker.c b/src/backend/postmaster/bgworker.c
index 684250984d4..6c684b5e12b 100644
--- a/src/backend/postmaster/bgworker.c
+++ b/src/backend/postmaster/bgworker.c
@@ -688,7 +688,7 @@ StartBackgroundWorker(void)
IsBackgroundWorker = true;
- /* Identify myself via ps */
+ MyBackendType = B_BG_WORKER;
init_ps_display(worker->bgw_name);
/*
diff --git a/src/backend/postmaster/pgarch.c b/src/backend/postmaster/pgarch.c
index 58f54544f60..01ffd6513c7 100644
--- a/src/backend/postmaster/pgarch.c
+++ b/src/backend/postmaster/pgarch.c
@@ -238,10 +238,8 @@ PgArchiverMain(int argc, char *argv[])
pqsignal(SIGCHLD, SIG_DFL);
PG_SETMASK(&UnBlockSig);
- /*
- * Identify myself via ps
- */
- init_ps_display("archiver");
+ MyBackendType = B_ARCHIVER;
+ init_ps_display(NULL);
pgarch_MainLoop();
diff --git a/src/backend/postmaster/pgstat.c b/src/backend/postmaster/pgstat.c
index 107c9653366..f9287b79425 100644
--- a/src/backend/postmaster/pgstat.c
+++ b/src/backend/postmaster/pgstat.c
@@ -2892,62 +2892,7 @@ pgstat_bestart(void)
* out-of-line data. Those have to be handled separately, below.
*/
lbeentry.st_procpid = MyProcPid;
-
- if (MyBackendId != InvalidBackendId)
- {
- if (IsAutoVacuumLauncherProcess())
- {
- /* Autovacuum Launcher */
- lbeentry.st_backendType = B_AUTOVAC_LAUNCHER;
- }
- else if (IsAutoVacuumWorkerProcess())
- {
- /* Autovacuum Worker */
- lbeentry.st_backendType = B_AUTOVAC_WORKER;
- }
- else if (am_walsender)
- {
- /* Wal sender */
- lbeentry.st_backendType = B_WAL_SENDER;
- }
- else if (IsBackgroundWorker)
- {
- /* bgworker */
- lbeentry.st_backendType = B_BG_WORKER;
- }
- else
- {
- /* client-backend */
- lbeentry.st_backendType = B_BACKEND;
- }
- }
- else
- {
- /* Must be an auxiliary process */
- Assert(MyAuxProcType != NotAnAuxProcess);
- switch (MyAuxProcType)
- {
- case StartupProcess:
- lbeentry.st_backendType = B_STARTUP;
- break;
- case BgWriterProcess:
- lbeentry.st_backendType = B_BG_WRITER;
- break;
- case CheckpointerProcess:
- lbeentry.st_backendType = B_CHECKPOINTER;
- break;
- case WalWriterProcess:
- lbeentry.st_backendType = B_WAL_WRITER;
- break;
- case WalReceiverProcess:
- lbeentry.st_backendType = B_WAL_RECEIVER;
- break;
- default:
- elog(FATAL, "unrecognized process type: %d",
- (int) MyAuxProcType);
- }
- }
-
+ lbeentry.st_backendType = MyBackendType;
lbeentry.st_proc_start_timestamp = MyStartTimestamp;
lbeentry.st_activity_start_timestamp = 0;
lbeentry.st_state_start_timestamp = 0;
@@ -4269,48 +4214,6 @@ pgstat_get_crashed_backend_activity(int pid, char *buffer, int buflen)
return NULL;
}
-const char *
-pgstat_get_backend_desc(BackendType backendType)
-{
- const char *backendDesc = "unknown process type";
-
- switch (backendType)
- {
- case B_AUTOVAC_LAUNCHER:
- backendDesc = "autovacuum launcher";
- break;
- case B_AUTOVAC_WORKER:
- backendDesc = "autovacuum worker";
- break;
- case B_BACKEND:
- backendDesc = "client backend";
- break;
- case B_BG_WORKER:
- backendDesc = "background worker";
- break;
- case B_BG_WRITER:
- backendDesc = "background writer";
- break;
- case B_CHECKPOINTER:
- backendDesc = "checkpointer";
- break;
- case B_STARTUP:
- backendDesc = "startup";
- break;
- case B_WAL_RECEIVER:
- backendDesc = "walreceiver";
- break;
- case B_WAL_SENDER:
- backendDesc = "walsender";
- break;
- case B_WAL_WRITER:
- backendDesc = "walwriter";
- break;
- }
-
- return backendDesc;
-}
-
/* ------------------------------------------------------------
* Local support functions follow
* ------------------------------------------------------------
@@ -4447,10 +4350,8 @@ PgstatCollectorMain(int argc, char *argv[])
pqsignal(SIGCHLD, SIG_DFL);
PG_SETMASK(&UnBlockSig);
- /*
- * Identify myself via ps
- */
- init_ps_display("stats collector");
+ MyBackendType = B_STATS_COLLECTOR;
+ init_ps_display(NULL);
/*
* Read in existing stats files or initialize the stats to zero.
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 46be78aadbf..2b9ab322931 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -2259,6 +2259,11 @@ retry1:
if (strlen(port->user_name) >= NAMEDATALEN)
port->user_name[NAMEDATALEN - 1] = '\0';
+ if (am_walsender)
+ MyBackendType = B_WAL_SENDER;
+ else
+ MyBackendType = B_BACKEND;
+
/*
* Normal walsender backends, e.g. for streaming replication, are not
* connected to a particular database. But walsenders used for logical
@@ -4422,7 +4427,7 @@ BackendInitialize(Port *port)
*/
initStringInfo(&ps_data);
if (am_walsender)
- appendStringInfo(&ps_data, "%s ", pgstat_get_backend_desc(B_WAL_SENDER));
+ appendStringInfo(&ps_data, "%s ", GetBackendTypeDesc(B_WAL_SENDER));
appendStringInfo(&ps_data, "%s ", port->user_name);
if (!am_walsender)
appendStringInfo(&ps_data, "%s ", port->database_name);
diff --git a/src/backend/postmaster/syslogger.c b/src/backend/postmaster/syslogger.c
index b394599236f..3b708c3f670 100644
--- a/src/backend/postmaster/syslogger.c
+++ b/src/backend/postmaster/syslogger.c
@@ -179,7 +179,8 @@ SysLoggerMain(int argc, char *argv[])
am_syslogger = true;
- init_ps_display("logger");
+ MyBackendType = B_LOGGER;
+ init_ps_display(NULL);
/*
* If we restarted, our stderr is already redirected into our own input
diff --git a/src/backend/utils/adt/pgstatfuncs.c b/src/backend/utils/adt/pgstatfuncs.c
index 54d26732541..cea01534a5e 100644
--- a/src/backend/utils/adt/pgstatfuncs.c
+++ b/src/backend/utils/adt/pgstatfuncs.c
@@ -841,7 +841,7 @@ pg_stat_get_activity(PG_FUNCTION_ARGS)
}
else
values[17] =
- CStringGetTextDatum(pgstat_get_backend_desc(beentry->st_backendType));
+ CStringGetTextDatum(GetBackendTypeDesc(beentry->st_backendType));
/* SSL information */
if (beentry->st_ssl)
diff --git a/src/backend/utils/init/miscinit.c b/src/backend/utils/init/miscinit.c
index cd099b0c709..a7b7b12249d 100644
--- a/src/backend/utils/init/miscinit.c
+++ b/src/backend/utils/init/miscinit.c
@@ -57,6 +57,8 @@
ProcessingMode Mode = InitProcessing;
+BackendType MyBackendType;
+
/* List of lock files to be removed at proc exit */
static List *lock_files = NIL;
@@ -187,6 +189,59 @@ SwitchBackToLocalLatch(void)
SetLatch(MyLatch);
}
+const char *
+GetBackendTypeDesc(BackendType backendType)
+{
+ const char *backendDesc = "unknown process type";
+
+ switch (backendType)
+ {
+ case B_INVALID:
+ backendDesc = "not initialized";
+ break;
+ case B_AUTOVAC_LAUNCHER:
+ backendDesc = "autovacuum launcher";
+ break;
+ case B_AUTOVAC_WORKER:
+ backendDesc = "autovacuum worker";
+ break;
+ case B_BACKEND:
+ backendDesc = "client backend";
+ break;
+ case B_BG_WORKER:
+ backendDesc = "background worker";
+ break;
+ case B_BG_WRITER:
+ backendDesc = "background writer";
+ break;
+ case B_CHECKPOINTER:
+ backendDesc = "checkpointer";
+ break;
+ case B_STARTUP:
+ backendDesc = "startup";
+ break;
+ case B_WAL_RECEIVER:
+ backendDesc = "walreceiver";
+ break;
+ case B_WAL_SENDER:
+ backendDesc = "walsender";
+ break;
+ case B_WAL_WRITER:
+ backendDesc = "walwriter";
+ break;
+ case B_ARCHIVER:
+ backendDesc = "archiver";
+ break;
+ case B_STATS_COLLECTOR:
+ backendDesc = "stats collector";
+ break;
+ case B_LOGGER:
+ backendDesc = "logger";
+ break;
+ }
+
+ return backendDesc;
+}
/* ----------------------------------------------------------------
* database path / name support stuff
diff --git a/src/backend/utils/misc/ps_status.c b/src/backend/utils/misc/ps_status.c
index 8b160c0b405..584d7709575 100644
--- a/src/backend/utils/misc/ps_status.c
+++ b/src/backend/utils/misc/ps_status.c
@@ -28,6 +28,7 @@
#include "libpq/libpq.h"
#include "miscadmin.h"
+#include "pgstat.h"
#include "utils/guc.h"
#include "utils/ps_status.h"
@@ -247,14 +248,20 @@ save_ps_display_args(int argc, char **argv)
/*
* Call this once during subprocess startup to set the identification
- * values. At this point, the original argv[] array may be overwritten.
+ * values.
+ *
+ * If fixed_part is NULL, a default will be obtained from MyBackendType.
+ *
+ * At this point, the original argv[] array may be overwritten.
*/
void
init_ps_display(const char *fixed_part)
{
bool save_update_process_title;
- Assert(fixed_part);
+ Assert(fixed_part || MyBackendType);
+ if (!fixed_part)
+ fixed_part = GetBackendTypeDesc(MyBackendType);
#ifndef PS_USE_NONE
/* no ps display for stand-alone backend */
diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h
index 6b9093733fb..14fa127ab11 100644
--- a/src/include/miscadmin.h
+++ b/src/include/miscadmin.h
@@ -306,6 +306,28 @@ extern void InitStandaloneProcess(const char *argv0);
extern void SwitchToSharedLatch(void);
extern void SwitchBackToLocalLatch(void);
+typedef enum BackendType
+{
+ B_INVALID = 0,
+ B_AUTOVAC_LAUNCHER,
+ B_AUTOVAC_WORKER,
+ B_BACKEND,
+ B_BG_WORKER,
+ B_BG_WRITER,
+ B_CHECKPOINTER,
+ B_STARTUP,
+ B_WAL_RECEIVER,
+ B_WAL_SENDER,
+ B_WAL_WRITER,
+ B_ARCHIVER,
+ B_STATS_COLLECTOR,
+ B_LOGGER,
+} BackendType;
+
+extern BackendType MyBackendType;
+
+extern const char *GetBackendTypeDesc(BackendType backendType);
+
extern void SetDatabasePath(const char *path);
extern void checkDataDir(void);
extern void SetDataDir(const char *dir);
diff --git a/src/include/pgstat.h b/src/include/pgstat.h
index 7bc36c65838..1a19921f803 100644
--- a/src/include/pgstat.h
+++ b/src/include/pgstat.h
@@ -13,6 +13,7 @@
#include "datatype/timestamp.h"
#include "libpq/pqcomm.h"
+#include "miscadmin.h"
#include "port/atomics.h"
#include "portability/instr_time.h"
#include "postmaster/pgarch.h"
@@ -713,25 +714,6 @@ typedef struct PgStat_GlobalStats
/* ----------
- * Backend types
- * ----------
- */
-typedef enum BackendType
-{
- B_AUTOVAC_LAUNCHER,
- B_AUTOVAC_WORKER,
- B_BACKEND,
- B_BG_WORKER,
- B_BG_WRITER,
- B_CHECKPOINTER,
- B_STARTUP,
- B_WAL_RECEIVER,
- B_WAL_SENDER,
- B_WAL_WRITER
-} BackendType;
-
-
-/* ----------
* Backend states
* ----------
*/
@@ -1286,7 +1268,6 @@ extern const char *pgstat_get_wait_event_type(uint32 wait_event_info);
extern const char *pgstat_get_backend_current_activity(int pid, bool checkUser);
extern const char *pgstat_get_crashed_backend_activity(int pid, char *buffer,
int buflen);
-extern const char *pgstat_get_backend_desc(BackendType backendType);
extern void pgstat_progress_start_command(ProgressCommandType cmdtype,
Oid relid);