Fix the warnings introduced in commit ce0fdbfe97.
authorAmit Kapila <akapila@postgresql.org>
Mon, 15 Feb 2021 01:58:02 +0000 (07:28 +0530)
committerAmit Kapila <akapila@postgresql.org>
Mon, 15 Feb 2021 01:58:02 +0000 (07:28 +0530)
Author: Amit Kapila
Reviewed-by: Tom Lane
Discussion: https://postgr.es/m/1610789.1613170207@sss.pgh.pa.us

src/backend/commands/subscriptioncmds.c
src/backend/replication/logical/tablesync.c
src/include/replication/slot.h
src/include/replication/worker_internal.h

index 5cf874e0b46101223ee2424d6a03364e25dec936..e5ae4534ae4fcbf8fd5c33c420c23682b965e952 100644 (file)
@@ -715,7 +715,8 @@ AlterSubscription_refresh(Subscription *sub, bool copy_data)
                                         * the origin might be already removed. For these reasons,
                                         * passing missing_ok = true.
                                         */
-                                       ReplicationOriginNameForTablesync(sub->oid, relid, originname);
+                                       ReplicationOriginNameForTablesync(sub->oid, relid, originname,
+                                                                                                         sizeof(originname));
                                        replorigin_drop_by_name(originname, true, false);
                                }
 
@@ -749,7 +750,8 @@ AlterSubscription_refresh(Subscription *sub, bool copy_data)
                                 * dropped slots and fail. For these reasons, we allow
                                 * missing_ok = true for the drop.
                                 */
-                               ReplicationSlotNameForTablesync(sub->oid, sub_remove_rels[off].relid, syncslotname);
+                               ReplicationSlotNameForTablesync(sub->oid, sub_remove_rels[off].relid,
+                                                                                               syncslotname, sizeof(syncslotname));
                                ReplicationSlotDropAtPubNode(wrconn, syncslotname, true);
                        }
                }
@@ -1174,7 +1176,8 @@ DropSubscription(DropSubscriptionStmt *stmt, bool isTopLevel)
                 * worker so passing missing_ok = true. This can happen for the states
                 * before SUBREL_STATE_FINISHEDCOPY.
                 */
-               ReplicationOriginNameForTablesync(subid, relid, originname);
+               ReplicationOriginNameForTablesync(subid, relid, originname,
+                                                                                 sizeof(originname));
                replorigin_drop_by_name(originname, true, false);
        }
 
@@ -1254,7 +1257,8 @@ DropSubscription(DropSubscriptionStmt *stmt, bool isTopLevel)
                        {
                                char            syncslotname[NAMEDATALEN] = {0};
 
-                               ReplicationSlotNameForTablesync(subid, relid, syncslotname);
+                               ReplicationSlotNameForTablesync(subid, relid, syncslotname,
+                                                                                               sizeof(syncslotname));
                                ReplicationSlotDropAtPubNode(wrconn, syncslotname, true);
                        }
                }
@@ -1532,7 +1536,8 @@ ReportSlotConnectionError(List *rstates, Oid subid, char *slotname, char *err)
                {
                        char            syncslotname[NAMEDATALEN] = {0};
 
-                       ReplicationSlotNameForTablesync(subid, relid, syncslotname);
+                       ReplicationSlotNameForTablesync(subid, relid, syncslotname,
+                                                                                       sizeof(syncslotname));
                        elog(WARNING, "could not drop tablesync replication slot \"%s\"",
                                 syncslotname);
                }
index 19cc80467867953040c50606e7164217395bdb72..24a6ce5d8ed605c8281f1cc09a4acd60e0d40f29 100644 (file)
@@ -314,7 +314,8 @@ process_syncing_tables_for_sync(XLogRecPtr current_lsn)
                 */
                ReplicationSlotNameForTablesync(MyLogicalRepWorker->subid,
                                                                                MyLogicalRepWorker->relid,
-                                                                               syncslotname);
+                                                                               syncslotname,
+                                                                               sizeof(syncslotname));
 
                /*
                 * It is important to give an error if we are unable to drop the slot,
@@ -462,7 +463,8 @@ process_syncing_tables_for_apply(XLogRecPtr current_lsn)
                                 */
                                ReplicationOriginNameForTablesync(MyLogicalRepWorker->subid,
                                                                                                  rstate->relid,
-                                                                                                 originname);
+                                                                                                 originname,
+                                                                                                 sizeof(originname));
                                replorigin_drop_by_name(originname, true, false);
 
                                /*
@@ -871,27 +873,20 @@ copy_table(Relation rel)
  * pg_%u_sync_%u_UINT64_FORMAT (3 + 10 + 6 + 10 + 20 + '\0'), the maximum
  * length of slot_name will be 50.
  *
- * The returned slot name is either:
- * - stored in the supplied buffer (syncslotname), or
- * - palloc'ed in current memory context (if syncslotname = NULL).
+ * The returned slot name is stored in the supplied buffer (syncslotname) with
+ * the given size.
  *
  * Note: We don't use the subscription slot name as part of tablesync slot name
  * because we are responsible for cleaning up these slots and it could become
  * impossible to recalculate what name to cleanup if the subscription slot name
  * had changed.
  */
-char *
+void
 ReplicationSlotNameForTablesync(Oid suboid, Oid relid,
-                                                               char syncslotname[NAMEDATALEN])
+                                                               char *syncslotname, int szslot)
 {
-       if (syncslotname)
-               sprintf(syncslotname, "pg_%u_sync_%u_" UINT64_FORMAT, suboid, relid,
-                               GetSystemIdentifier());
-       else
-               syncslotname = psprintf("pg_%u_sync_%u_" UINT64_FORMAT, suboid, relid,
-                                                               GetSystemIdentifier());
-
-       return syncslotname;
+       snprintf(syncslotname, szslot, "pg_%u_sync_%u_" UINT64_FORMAT, suboid,
+                        relid, GetSystemIdentifier());
 }
 
 /*
@@ -901,9 +896,9 @@ ReplicationSlotNameForTablesync(Oid suboid, Oid relid,
  */
 void
 ReplicationOriginNameForTablesync(Oid suboid, Oid relid,
-                                                                 char originname[NAMEDATALEN])
+                                                                 char *originname, int szorgname)
 {
-       snprintf(originname, NAMEDATALEN, "pg_%u_%u", suboid, relid);
+       snprintf(originname, szorgname, "pg_%u_%u", suboid, relid);
 }
 
 /*
@@ -951,9 +946,11 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos)
        }
 
        /* Calculate the name of the tablesync slot. */
-       slotname = ReplicationSlotNameForTablesync(MySubscription->oid,
-                                                                                          MyLogicalRepWorker->relid,
-                                                                                          NULL /* use palloc */ );
+       slotname = (char *) palloc(NAMEDATALEN);
+       ReplicationSlotNameForTablesync(MySubscription->oid,
+                                                                       MyLogicalRepWorker->relid,
+                                                                       slotname,
+                                                                       NAMEDATALEN);
 
        /*
         * Here we use the slot name instead of the subscription name as the
@@ -972,7 +969,8 @@ LogicalRepSyncTableStart(XLogRecPtr *origin_startpos)
        /* Assign the origin tracking record name. */
        ReplicationOriginNameForTablesync(MySubscription->oid,
                                                                          MyLogicalRepWorker->relid,
-                                                                         originname);
+                                                                         originname,
+                                                                         sizeof(originname));
 
        if (MyLogicalRepWorker->relstate == SUBREL_STATE_DATASYNC)
        {
index 5f52335f15f001dcc618e418682e46a340355473..38a9a0b3fc4405fc371a18ec131fcfa435a2ab79 100644 (file)
@@ -212,7 +212,7 @@ extern bool ReplicationSlotsCountDBSlots(Oid dboid, int *nslots, int *nactive);
 extern void ReplicationSlotsDropDBSlots(Oid dboid);
 extern void InvalidateObsoleteReplicationSlots(XLogSegNo oldestSegno);
 extern ReplicationSlot *SearchNamedReplicationSlot(const char *name);
-extern char *ReplicationSlotNameForTablesync(Oid suboid, Oid relid, char *syncslotname);
+extern void ReplicationSlotNameForTablesync(Oid suboid, Oid relid, char *syncslotname, int szslot);
 extern void ReplicationSlotDropAtPubNode(WalReceiverConn *wrconn, char *slotname, bool missing_ok);
 
 extern void StartupReplicationSlots(void);
index 4a5adc2fdac2a15fc2e578dedd02c24db7f8992f..1cac75e5a9b498713e77f2f7d42e676778d45e8e 100644 (file)
@@ -82,7 +82,8 @@ extern void logicalrep_worker_wakeup_ptr(LogicalRepWorker *worker);
 
 extern int     logicalrep_sync_worker_count(Oid subid);
 
-extern void ReplicationOriginNameForTablesync(Oid suboid, Oid relid, char *originname);
+extern void ReplicationOriginNameForTablesync(Oid suboid, Oid relid,
+                                                                                         char *originname, int szorgname);
 extern char *LogicalRepSyncTableStart(XLogRecPtr *origin_startpos);
 
 void           process_syncing_tables(XLogRecPtr current_lsn);