v4-0001-Improve-PID-XXXX-is-not-a-PostgreSQL-server-proce.patch
application/x-patch
Filename: v4-0001-Improve-PID-XXXX-is-not-a-PostgreSQL-server-proce.patch
Type: application/x-patch
Part: 0
Patch
Format: format-patch
Series: patch v4-0001
Subject: Improve PID XXXX is not a PostgreSQL server process message
| File | + | − |
|---|---|---|
| src/backend/storage/ipc/signalfuncs.c | 33 | 5 |
From 24800ffa999f527ac9c526ef11e6679d18269d39 Mon Sep 17 00:00:00 2001
From: Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>
Date: Fri, 19 Nov 2021 02:09:49 +0000
Subject: [PATCH v4] Improve PID XXXX is not a PostgreSQL server process
message
Currently, pg_signal_backend emits generic WARNING "PID XXXX is
not a PostgreSQL server process" for postmaster and auxiliary
processes which doesn't sound sensible. This patch tries to
improve this message.
---
src/backend/storage/ipc/signalfuncs.c | 38 +++++++++++++++++++++++----
1 file changed, 33 insertions(+), 5 deletions(-)
diff --git a/src/backend/storage/ipc/signalfuncs.c b/src/backend/storage/ipc/signalfuncs.c
index de69d60e79..8d0f0fea65 100644
--- a/src/backend/storage/ipc/signalfuncs.c
+++ b/src/backend/storage/ipc/signalfuncs.c
@@ -48,7 +48,17 @@
static int
pg_signal_backend(int pid, int sig)
{
- PGPROC *proc = BackendPidGetProc(pid);
+ PGPROC *proc;
+
+ if (PostmasterPid == pid)
+ {
+ ereport(WARNING,
+ (errmsg("cannot send signal to postmaster %d", pid)));
+
+ return SIGNAL_BACKEND_ERROR;
+ }
+
+ proc = BackendPidGetProc(pid);
/*
* BackendPidGetProc returns NULL if the pid isn't valid; but by the time
@@ -61,11 +71,29 @@ pg_signal_backend(int pid, int sig)
if (proc == NULL)
{
/*
- * This is just a warning so a loop-through-resultset will not abort
- * if one backend terminated on its own during the run.
+ * AuxiliaryProcs are still PostgreSQL server processes, do a little
+ * more work and report a proper warning that says we cannot signal
+ * them.
+ *
+ * For an auxiliary process, retrieve process info from AuxiliaryProcs
+ * stored in shared-memory.
*/
- ereport(WARNING,
- (errmsg("PID %d is not a PostgreSQL server process", pid)));
+ proc = AuxiliaryPidGetProc(pid);
+
+ if (proc)
+ ereport(WARNING,
+ (errmsg("cannot send signal to PostgreSQL server process %d",
+ pid)));
+ else
+ {
+ /*
+ * This is just a warning so a loop-through-resultset will not
+ * abort if one backend terminated on its own during the run.
+ */
+ ereport(WARNING,
+ (errmsg("PID %d is not a PostgreSQL backend process", pid)));
+ }
+
return SIGNAL_BACKEND_ERROR;
}
--
2.25.1