pg_createsubscriber: Remove some code bloat in the atexit() callback
authorMichael Paquier <[email protected]>
Sun, 16 Mar 2025 10:20:49 +0000 (19:20 +0900)
committerMichael Paquier <[email protected]>
Sun, 16 Mar 2025 10:20:49 +0000 (19:20 +0900)
This commit adjusts some code added by e117cfb2f6c6 in the atexit()
callback of pg_createsubscriber.c, in charge of performing post-failure
cleanup actions.  The code loops over all the databases specified, and
it is changed here to rely on a single LogicalRepInfo for each database
rather than always using LogicalRepInfos, simplifying its logic.

Author: Peter Smith <[email protected]>
Discussion: https://postgr.es/m/CAHut+PtdBSVi4iH7BObDVwDNVwOpn+H3fezOBdSTtENx+rhNMw@mail.gmail.com

src/bin/pg_basebackup/pg_createsubscriber.c

index a5a2d61165d2993cdd94679d4c0a1faa790efaa0..6baf92e80246813cfc5f4c05838b696290e26468 100644 (file)
@@ -184,17 +184,19 @@ cleanup_objects_atexit(void)
 
    for (int i = 0; i < num_dbs; i++)
    {
-       if (dbinfos.dbinfo[i].made_publication || dbinfos.dbinfo[i].made_replslot)
+       struct LogicalRepInfo *dbinfo = &dbinfos.dbinfo[i];
+
+       if (dbinfo->made_publication || dbinfo->made_replslot)
        {
            PGconn     *conn;
 
-           conn = connect_database(dbinfos.dbinfo[i].pubconninfo, false);
+           conn = connect_database(dbinfo->pubconninfo, false);
            if (conn != NULL)
            {
-               if (dbinfos.dbinfo[i].made_publication)
-                   drop_publication(conn, &dbinfos.dbinfo[i]);
-               if (dbinfos.dbinfo[i].made_replslot)
-                   drop_replication_slot(conn, &dbinfos.dbinfo[i], dbinfos.dbinfo[i].replslotname);
+               if (dbinfo->made_publication)
+                   drop_publication(conn, dbinfo);
+               if (dbinfo->made_replslot)
+                   drop_replication_slot(conn, dbinfo, dbinfo->replslotname);
                disconnect_database(conn, false);
            }
            else
@@ -204,18 +206,18 @@ cleanup_objects_atexit(void)
                 * that some objects were left on primary and should be
                 * removed before trying again.
                 */
-               if (dbinfos.dbinfo[i].made_publication)
+               if (dbinfo->made_publication)
                {
                    pg_log_warning("publication \"%s\" created in database \"%s\" on primary was left behind",
-                                  dbinfos.dbinfo[i].pubname,
-                                  dbinfos.dbinfo[i].dbname);
+                                  dbinfo->pubname,
+                                  dbinfo->dbname);
                    pg_log_warning_hint("Drop this publication before trying again.");
                }
-               if (dbinfos.dbinfo[i].made_replslot)
+               if (dbinfo->made_replslot)
                {
                    pg_log_warning("replication slot \"%s\" created in database \"%s\" on primary was left behind",
-                                  dbinfos.dbinfo[i].replslotname,
-                                  dbinfos.dbinfo[i].dbname);
+                                  dbinfo->replslotname,
+                                  dbinfo->dbname);
                    pg_log_warning_hint("Drop this replication slot soon to avoid retention of WAL files.");
                }
            }