From: | Bharath Rupireddy <bharath(dot)rupireddyforpostgres(at)gmail(dot)com> |
---|---|
To: | Noah Misch <noah(at)leadboat(dot)com> |
Cc: | Magnus Hagander <magnus(at)hagander(dot)net>, Fujii Masao <masao(dot)fujii(at)oss(dot)nttdata(dot)com>, Kyotaro Horiguchi <horikyota(dot)ntt(at)gmail(dot)com>, "Hou, Zhijie" <houzj(dot)fnst(at)cn(dot)fujitsu(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>, Muhammad Usama <m(dot)usama(at)gmail(dot)com> |
Subject: | Re: A new function to wait for the backend exit after termination |
Date: | 2021-06-01 07:55:24 |
Message-ID: | CALj2ACW0B--2ShfJ4HRuuY33=xz0YggtD7MED-wdPs173rs-EA@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On Tue, Jun 1, 2021 at 9:19 AM Noah Misch <noah(at)leadboat(dot)com> wrote:
>
> On Thu, Apr 08, 2021 at 11:41:17AM +0200, Magnus Hagander wrote:
> > I've applied this patch with some minor changes.
Thanks for taking a look at this function.
> I wondered if the new pg_wait_for_backend_termination() could replace
> regress.c:wait_pid().
I was earlier thinking of replacing the wait_pid() with the new
function but arrived at a similar conclusion as yours.
> I think it can't, because the new function requires the
> backend to still be present in the procarray:
>
> proc = BackendPidGetProc(pid);
>
> if (proc == NULL)
> {
> ereport(WARNING,
> (errmsg("PID %d is not a PostgreSQL server process", pid)));
>
> PG_RETURN_BOOL(false);
> }
>
> PG_RETURN_BOOL(pg_wait_until_termination(pid, timeout));
>
> If a backend has left the procarray but not yet left the kernel process table,
> this function will issue the warning and not wait for the final exit.
Yes, if the backend is not in procarray but still in the kernel
process table, it emits a warning "PID %d is not a PostgreSQL server
process" and returns false.
> Given that limitation, is pg_wait_for_backend_termination() useful enough? If
> waiting for procarray departure is enough, should pg_wait_until_termination()
> check BackendPidGetProc(pid) instead of kill(0, pid), so it can return
> earlier?
We can just remove BackendPidGetProc(pid) in
pg_wait_for_backend_termination. With this change, we can get rid of
the wait_pid() from regress.c. But, my concern is that the
pg_wait_for_backend_termination() can also check non-postgres server
process pid. Is this okay? In that case, this function becomes a
generic(OS level function) rather than a postgres server specific
function. I'm not sure if all agree to that. Thoughts?
> I can see the value of adding the pg_terminate_backend() timeout
> argument, in any case.
True. We can leave pg_terminate_backend() as is.
With Regards,
Bharath Rupireddy.
From | Date | Subject | |
---|---|---|---|
Next Message | houzj.fnst@fujitsu.com | 2021-06-01 08:43:05 | RE: Skip partition tuple routing with constant partition key |
Previous Message | Masahiko Sawada | 2021-06-01 07:53:41 | Re: Skipping logical replication transactions on subscriber side |