agora inbox for [email protected]
help / color / mirror / Atom feedFrom: Mike Palmiotto <[email protected]>
Subject: [PATCH v2 04/12] Add AutoVacuumWorkerType to subprocess struct
Date: Tue, 10 Mar 2020 23:33:39 +0000
---
src/backend/postmaster/autovacuum.c | 69 +----------------------------
src/backend/postmaster/postmaster.c | 17 +------
src/backend/postmaster/subprocess.c | 7 +++
src/include/postmaster/autovacuum.h | 4 +-
src/include/postmaster/subprocess.h | 1 +
5 files changed, 13 insertions(+), 85 deletions(-)
diff --git a/src/backend/postmaster/autovacuum.c b/src/backend/postmaster/autovacuum.c
index d0fdb7e5ee..ba19a9c5d2 100644
--- a/src/backend/postmaster/autovacuum.c
+++ b/src/backend/postmaster/autovacuum.c
@@ -83,7 +83,6 @@
#include "nodes/makefuncs.h"
#include "pgstat.h"
#include "postmaster/autovacuum.h"
-#include "postmaster/fork_process.h"
#include "postmaster/interrupt.h"
#include "postmaster/postmaster.h"
#include "storage/bufmgr.h"
@@ -303,11 +302,6 @@ static WorkerInfo MyWorkerInfo = NULL;
/* PID of launcher, valid only in worker while shutting down */
int AutovacuumLauncherPid = 0;
-#ifdef EXEC_BACKEND
-static pid_t avworker_forkexec(void);
-#endif
-NON_EXEC_STATIC void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn();
-
static Oid do_start_worker(void);
static void HandleAutoVacLauncherInterrupts(void);
static void AutoVacLauncherShutdown(void) pg_attribute_noreturn();
@@ -1364,27 +1358,6 @@ avl_sigusr2_handler(SIGNAL_ARGS)
********************************************************************/
#ifdef EXEC_BACKEND
-/*
- * forkexec routines for the autovacuum worker.
- *
- * Format up the arglist, then fork and exec.
- */
-static pid_t
-avworker_forkexec(void)
-{
- char *av[10];
- int ac = 0;
-
- av[ac++] = "postgres";
- av[ac++] = "--forkavworker";
- av[ac++] = NULL; /* filled in by postmaster_forkexec */
- av[ac] = NULL;
-
- Assert(ac < lengthof(av));
-
- return postmaster_forkexec(ac, av);
-}
-
/*
* We need this set from the outside, before InitProcess is called
*/
@@ -1395,50 +1368,10 @@ AutovacuumWorkerIAm(void)
}
#endif
-/*
- * Main entry point for autovacuum worker process.
- *
- * This code is heavily based on pgarch.c, q.v.
- */
-int
-StartAutoVacWorker(void)
-{
- pid_t worker_pid;
-
-#ifdef EXEC_BACKEND
- switch ((worker_pid = avworker_forkexec()))
-#else
- switch ((worker_pid = fork_process()))
-#endif
- {
- case -1:
- ereport(LOG,
- (errmsg("could not fork autovacuum worker process: %m")));
- return 0;
-
-#ifndef EXEC_BACKEND
- case 0:
- /* in postmaster child ... */
- InitPostmasterChild();
-
- /* Close the postmaster's sockets */
- ClosePostmasterPorts(false);
-
- AutoVacWorkerMain(0, NULL);
- break;
-#endif
- default:
- return (int) worker_pid;
- }
-
- /* shouldn't get here */
- return 0;
-}
-
/*
* AutoVacWorkerMain
*/
-NON_EXEC_STATIC void
+void
AutoVacWorkerMain(int argc, char *argv[])
{
sigjmp_buf local_sigjmp_buf;
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
index 2251303589..21bbbf8194 100644
--- a/src/backend/postmaster/postmaster.c
+++ b/src/backend/postmaster/postmaster.c
@@ -5041,19 +5041,6 @@ SubPostmasterMain(int argc, char *argv[])
/* And run the backend */
BackendRun(&port); /* does not return */
}
- if (strcmp(argv[1], "--forkavworker") == 0)
- {
- /* Restore basic shared memory pointers */
- InitShmemAccess(UsedShmemSegAddr);
-
- /* Need a PGPROC to run CreateSharedMemoryAndSemaphores */
- InitProcess();
-
- /* Attach process to shared data structures */
- CreateSharedMemoryAndSemaphores();
-
- AutoVacWorkerMain(argc - 2, argv + 2); /* does not return */
- }
if (strncmp(argv[1], "--forkbgworker=", 15) == 0)
{
int shmem_slot;
@@ -5573,7 +5560,7 @@ StartAutovacuumWorker(void)
bn->child_slot = MyPMChildSlot = AssignPostmasterChildSlot();
bn->bgworker_notify = false;
- bn->pid = StartAutoVacWorker();
+ bn->pid = StartSubprocess(AutoVacuumWorkerType);
if (bn->pid > 0)
{
bn->bkend_type = BACKEND_TYPE_AUTOVAC;
@@ -5587,7 +5574,7 @@ StartAutovacuumWorker(void)
/*
* fork failed, fall through to report -- actual error message was
- * logged by StartAutoVacWorker
+ * logged by StartSubprocess
*/
(void) ReleasePostmasterChildSlot(bn->child_slot);
free(bn);
diff --git a/src/backend/postmaster/subprocess.c b/src/backend/postmaster/subprocess.c
index 9aa60cc93e..0fbd067310 100644
--- a/src/backend/postmaster/subprocess.c
+++ b/src/backend/postmaster/subprocess.c
@@ -79,6 +79,13 @@ static PgSubprocess process_types[] = {
.needs_aux_proc = false,
.entrypoint = AutoVacLauncherMain,
.fork_failure = NULL
+ },
+ {
+ .name = "avworker",
+ .desc = "autovacuum worker",
+ .needs_aux_proc = false,
+ .entrypoint = AutoVacWorkerMain,
+ .fork_failure = NULL
}
};
diff --git a/src/include/postmaster/autovacuum.h b/src/include/postmaster/autovacuum.h
index 08050cd81c..51546fd4c9 100644
--- a/src/include/postmaster/autovacuum.h
+++ b/src/include/postmaster/autovacuum.h
@@ -58,7 +58,8 @@ extern void autovac_init(void);
extern int StartAutoVacLauncher(void);
extern int StartAutoVacWorker(void);
-extern void AutoVacLauncherMain(int argc, char *argv[]);
+extern void AutoVacLauncherMain(int argc, char *argv[]) pg_attribute_noreturn();
+extern void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn();
/* called from postmaster when a worker could not be forked */
extern void AutoVacWorkerFailed(void);
@@ -67,7 +68,6 @@ extern void AutoVacWorkerFailed(void);
extern void AutoVacuumUpdateDelay(void);
#ifdef EXEC_BACKEND
-extern void AutoVacWorkerMain(int argc, char *argv[]) pg_attribute_noreturn();
extern void AutovacuumWorkerIAm(void);
extern void AutovacuumLauncherIAm(void);
#endif
diff --git a/src/include/postmaster/subprocess.h b/src/include/postmaster/subprocess.h
index 9e3c743333..e11c24cc62 100644
--- a/src/include/postmaster/subprocess.h
+++ b/src/include/postmaster/subprocess.h
@@ -24,6 +24,7 @@ typedef enum
WalWriterType,
WalReceiverType, /* end of Auxiliary Process Forks */
AutoVacuumLauncherType,
+ AutoVacuumWorkerType,
NUMSUBPROCESSTYPES /* Must be last! */
} SubprocessType;
--
2.17.0
--FcSpk3Icpd/Pbul4
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment;
filename="v2-0005-Add-PgstatCollectorType-to-subprocess-struct.patch"
view thread (2+ messages) latest in thread
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: [email protected]
Cc: [email protected]
Subject: Re: [PATCH v2 04/12] Add AutoVacuumWorkerType to subprocess struct
In-Reply-To: <no-message-id-198785@localhost>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox