On Fri, Jun 11, 2021 at 08:54:08PM -0500, Justin Pryzby wrote:
> On Sat, Jun 05, 2021 at 12:08:01PM -0700, Noah Misch wrote:
> > > > My preference is to remove pg_wait_for_backend_termination().  The use 
> > > > case
> > > > that prompted this thread used pg_terminate_backend(pid, 180000); it 
> > > > doesn't
> > > > need pg_wait_for_backend_termination().
> 
> Is this an Opened Issue ?

An Open Item?  Not really, since there's no objective defect.  Nonetheless,
the attached is what I'd like to use.
Author:     Noah Misch <n...@leadboat.com>
Commit:     Noah Misch <n...@leadboat.com>

    Remove pg_wait_for_backend_termination().
    
    It was unable wait on a backend that had already left the procarray.
    Users tolerant of that limitation can poll pg_stat_activity.  Other
    users can employ the "timeout" argument of pg_terminate_backend().
    
    Reviewed by FIXME.
    
    Discussion: https://postgr.es/m/20210605013236.ga208...@rfd.leadboat.com

diff --git a/doc/src/sgml/func.sgml b/doc/src/sgml/func.sgml
index fbc80c1..d387a32 100644
--- a/doc/src/sgml/func.sgml
+++ b/doc/src/sgml/func.sgml
@@ -25002,23 +25002,6 @@ SELECT collation for ('foo' COLLATE "de_DE");
         <literal>false</literal> is returned.
        </para></entry>
       </row>
-
-      <row>
-       <entry role="func_table_entry"><para role="func_signature">
-        <indexterm>
-         <primary>pg_wait_for_backend_termination</primary>
-        </indexterm>
-        <function>pg_wait_for_backend_termination</function> ( 
<parameter>pid</parameter> <type>integer</type>, <parameter>timeout</parameter> 
<type>bigint</type> <literal>DEFAULT</literal> <literal>5000</literal> )
-        <returnvalue>boolean</returnvalue>
-       </para>
-       <para>
-        Waits for the backend process with the specified Process ID to
-        terminate.  If the process terminates before
-        the <parameter>timeout</parameter> (in milliseconds)
-        expires, <literal>true</literal> is returned.  On timeout, a warning
-        is emitted and <literal>false</literal> is returned.
-       </para></entry>
-      </row>
      </tbody>
     </tgroup>
    </table>
diff --git a/doc/src/sgml/release-14.sgml b/doc/src/sgml/release-14.sgml
index a2ad120..045f2b0 100644
--- a/doc/src/sgml/release-14.sgml
+++ b/doc/src/sgml/release-14.sgml
@@ -611,13 +611,7 @@ Author: Magnus Hagander <mag...@hagander.net>
 -->
 
       <para>
-       Add function <link
-       
linkend="functions-admin-signal"><function>pg_wait_for_backend_termination()</function></link>
-       that waits for session exit (Bharath Rupireddy)
-      </para>
-
-      <para>
-       Also add a similar optional wait parameter to <link
+       Add an optional wait parameter to <link
        
linkend="functions-admin-signal"><function>pg_terminate_backend()</function></link>
       </para>
      </listitem>
diff --git a/src/backend/catalog/system_functions.sql 
b/src/backend/catalog/system_functions.sql
index a4373b1..a416e94 100644
--- a/src/backend/catalog/system_functions.sql
+++ b/src/backend/catalog/system_functions.sql
@@ -397,11 +397,6 @@ CREATE OR REPLACE FUNCTION
   RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 'pg_terminate_backend'
   PARALLEL SAFE;
 
-CREATE OR REPLACE FUNCTION
-  pg_wait_for_backend_termination(pid integer, timeout int8 DEFAULT 5000)
-  RETURNS boolean STRICT VOLATILE LANGUAGE INTERNAL AS 
'pg_wait_for_backend_termination'
-  PARALLEL SAFE;
-
 -- legacy definition for compatibility with 9.3
 CREATE OR REPLACE FUNCTION
   json_populate_record(base anyelement, from_json json, use_json_as_text 
boolean DEFAULT false)
diff --git a/src/backend/storage/ipc/signalfuncs.c 
b/src/backend/storage/ipc/signalfuncs.c
index 8376994..5ed8b2e 100644
--- a/src/backend/storage/ipc/signalfuncs.c
+++ b/src/backend/storage/ipc/signalfuncs.c
@@ -231,42 +231,6 @@ pg_terminate_backend(PG_FUNCTION_ARGS)
 }
 
 /*
- * Wait for a backend process with the given PID to exit or until the given
- * timeout milliseconds occurs. Returns true if the backend has exited. On
- * timeout a warning is emitted and false is returned.
- *
- * We allow any user to call this function, consistent with any user being
- * able to view the pid of the process in pg_stat_activity etc.
- */
-Datum
-pg_wait_for_backend_termination(PG_FUNCTION_ARGS)
-{
-       int                     pid;
-       int64           timeout;
-       PGPROC     *proc = NULL;
-
-       pid = PG_GETARG_INT32(0);
-       timeout = PG_GETARG_INT64(1);
-
-       if (timeout <= 0)
-               ereport(ERROR,
-                               (errcode(ERRCODE_NUMERIC_VALUE_OUT_OF_RANGE),
-                                errmsg("\"timeout\" must not be negative or 
zero")));
-
-       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));
-}
-
-/*
  * Signal to reload the database configuration
  *
  * Permission checking for this function is managed through the normal
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index acbcae4..2d45765 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -6191,10 +6191,6 @@
   proname => 'pg_terminate_backend', provolatile => 'v', prorettype => 'bool',
   proargtypes => 'int4 int8', proargnames => '{pid,timeout}',
   prosrc => 'pg_terminate_backend' },
-{ oid => '2137', descr => 'wait for a backend process exit or timeout occurs',
-  proname => 'pg_wait_for_backend_termination', provolatile => 'v',
-  prorettype => 'bool', proargtypes => 'int4 int8',
-  proargnames => '{pid,timeout}', prosrc => 'pg_wait_for_backend_termination' 
},
 { oid => '2172', descr => 'prepare for taking an online backup',
   proname => 'pg_start_backup', provolatile => 'v', proparallel => 'r',
   prorettype => 'pg_lsn', proargtypes => 'text bool bool',

Reply via email to