On Tue, Jun 27, 2017 at 11:41 AM, Mithun Cy <mithun...@enterprisedb.com> wrote: > On Fri, Jun 23, 2017 at 5:45 AM, Thom Brown <t...@linux.com> wrote: >> >> Also, I find it a bit messy that launch_autoprewarm_dump() doesn't >> detect an autoprewarm process already running. I'd want this to >> return NULL or an error if called for a 2nd time. > > We log instead of error as we try to check only after launching the > worker and inside worker. One solution could be as similar to > autoprewam_dump_now(), the autoprewarm_start_worker() can init shared > memory and check if we can launch worker in backend itself. I will try > to fix same.
I have fixed it now as follows +Datum +autoprewarm_start_worker(PG_FUNCTION_ARGS) +{ + pid_t pid; + + init_apw_shmem(); + pid = apw_state->bgworker_pid; + if (pid != InvalidPid) + ereport(ERROR, + (errmsg("autoprewarm worker is already running under PID %d", + pid))); + + autoprewarm_dump_launcher(); + PG_RETURN_VOID(); +} In backend itself, we shall check if an autoprewarm worker is running then only start the server. There is a possibility if this function is executed concurrently when there is no worker already running (Which I think is not a normal usage) then both call will say it has successfully launched the worker even though only one could have successfully done that (other will log and silently die). I think that is okay as the objective was to get one worker up and running. I have changed the return value to void. The worker could be restarted when there is an error. So returned pid is not going to be same as worker pid in such cases. Also, I do not see any use of pid. Made documentation changes regarding above changes. -- Thanks and Regards Mithun C Y EnterpriseDB: http://www.enterprisedb.com
autoprewarm_17.patch
Description: Binary data
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers