Re: A new function to wait for the backend exit after termination - Mailing list pgsql-hackers
From | Fujii Masao |
---|---|
Subject | Re: A new function to wait for the backend exit after termination |
Date | |
Msg-id | d99121ed-5e6b-89c1-3fcd-4a53561edbd2@oss.nttdata.com Whole thread Raw |
In response to | Re: A new function to wait for the backend exit after termination (Bharath Rupireddy <bharath.rupireddyforpostgres@gmail.com>) |
Responses |
Re: A new function to wait for the backend exit after termination
Re: A new function to wait for the backend exit after termination |
List | pgsql-hackers |
On 2020/10/28 20:50, Bharath Rupireddy wrote: > On Wed, Oct 21, 2020 at 6:43 PM Magnus Hagander <magnus@hagander.net> wrote: >> >> I think it would be nicer to have a pg_terminate_backend(pid, wait=false), so a function with a second parameter whichdefaults to the current behaviour of not waiting. And it might be a good idea to also give it a timeout parameter? >> > > Done. > >> >>> 2. pg_wait_backend() -- which waits for a given backend process. Note that this function has to be used carefully afterpg_terminate_backend(), if used on a backend that's not ternmited it simply keeps waiting in a loop. >> >> It seems this one also very much would need a timeout value. >> > > Done. > >> >> And surely we should show some sort of wait event when it's waiting. >> > > Added two wait events. > >> >>> If the backend is terminated within the user specified timeout then >>> the function returns true, otherwise false. >> >> I’m suggesting an option for the second case to fail instead of returning false. >> > > Done. I prefer that false is returned when the timeout happens, like pg_promote() does. > >> >>> I could imagine, in theory at least, wanting to wait for a backend to go idle as well as for it disappearing. Scopecreep in terms of this patch's goal but worth at least considering now. >> >> IIUC, do we need a new option, something like pg_wait_backend(pid, >> timeout, waituntil) where "waituntil" if specified "idle" waits until >> the given backend goes to idle mode, or "termination" waits until >> termination? Isn't this wait-for-idle mode fragile? Because there is no guarantee that the backend is still in idle state when pg_wait_backend(idle) returns. >> > > Done. > > Attaching a v2 patch herewith. > > Thoughts and feedback are welcome. Thanks for the patch! When the specified timeout is negative, the following error is thrown *after* SIGTERM is signaled to the target backend. This seems strange to me. The timeout value should be verified at the beginning of the function, instead. ERROR: timeout cannot be negative pg_terminate_backend(xxx, false) failed with the following error. I think it's more helpful if the function can work even without the timeout value. That is, what about redefining the function in src/backend/catalog/system_views.sql and specifying the DEFAULT values for the arguments "wait" and "timeout"? The similar function "pg_promote" would be good reference to you. ERROR: function pg_terminate_backend(integer, boolean) does not exist at character 8 Regards, -- Fujii Masao Advanced Computing Technology Center Research and Development Headquarters NTT DATA CORPORATION
pgsql-hackers by date: