Mike Palmiotto <mike.palmio...@crunchydata.com> writes: > I've been looking through the startup code for postmaster forks and > saw a couple of mechanisms used. Most forks seem to be using > StartChildProcess with a MyAuxProc emumerator, but then some > (autovacuum launcher/worker, syslogger, bgworker, archiver) are forked > through their own start functions.
> I noticed some implication in the pgsql-hackers archives [1] that > non-AuxProcs are as such because they don't need access to shared > memory. Is this an accurate explanation? That was the original idea, but it hasn't stood the test of time very well. In particular, the AuxProcType enum only works for child processes that there's supposed to be exactly one of, so we haven't used it for autovac workers or bgworkers, although those certainly have to be connected to shmem (hm, maybe that's not true for all types of bgworker, not sure). The autovac launcher is kind of a weird special case --- I think it could have been included in AuxProcType, but it wasn't, possibly to minimize the cosmetic difference between it and autovac workers. > For some context, I'm trying to come up with a patch to set the > process identifier (MyAuxProc/am_autovacuumworker/launcher, > am_archiver, etc.) immediately after forking, Don't we do that already? > With the current startup architecture, we have to touch multiple > entrypoints to achieve the desired effect. Is there any particular > reason we couldn't fold all of the startup processes into the > StartChildProcess code and assign MyAuxProc for processes that don't > currently have one, or is this a non-starter? If memory serves, StartChildProcess already was an attempt to unify the treatment of postmaster children. It's possible that another round of unification would be productive, but I think you'll find that there are random small differences in requirements that'd make it messy. regards, tom lane