Wait a minute ...

>From bac0fbef8b203c530e5117b0b7cfee13cfab78b9 Mon Sep 17 00:00:00 2001
From: Bharath Rupireddy <bharath.rupireddyforpostg...@gmail.com>
Date: Sat, 22 Jul 2023 10:17:48 +0000
Subject: [PATCH v13 1/2] Allow logical walsenders to wait for physical
 standbys

@@ -2498,6 +2500,13 @@ ReorderBufferProcessTXN(ReorderBuffer *rb, 
ReorderBufferTXN *txn,
                }
                else
                {
+                       /*
+                        * Before we send out the last set of changes to 
logical decoding
+                        * output plugin, wait for specified streaming 
replication standby
+                        * servers (if any) to confirm receipt of WAL upto 
commit_lsn.
+                        */
+                       WaitForStandbyLSN(commit_lsn);

OK, so we call this new function frequently enough -- once per
transaction, if I read this correctly?  So ...

+void
+WaitForStandbyLSN(XLogRecPtr wait_for_lsn)
+{
 ...

+       /* "*" means all logical walsenders should wait for physical standbys. 
*/
+       if (strcmp(synchronize_slot_names, "*") != 0)
+       {
+               bool    shouldwait = false;
+
+               rawname = pstrdup(synchronize_slot_names);
+               SplitIdentifierString(rawname, ',', &elemlist);
+
+               foreach (l, elemlist)
+               {
+                       char *name = lfirst(l);
+                       if (strcmp(name, NameStr(MyReplicationSlot->data.name)) 
== 0)
+                       {
+                               shouldwait = true;
+                               break;
+                       }
+               }
+
+               pfree(rawname);
+               rawname = NULL;
+               list_free(elemlist);
+               elemlist = NIL;
+
+               if (!shouldwait)
+                       return;
+       }
+
+       rawname = pstrdup(standby_slot_names);
+       SplitIdentifierString(rawname, ',', &elemlist);

... do we really want to be doing the GUC string parsing every time
through it?  This sounds like it could be a bottleneck, or at least slow
things down.  Maybe we should think about caching this somehow.

-- 
Álvaro Herrera        Breisgau, Deutschland  —  https://www.EnterpriseDB.com/
"No renuncies a nada. No te aferres a nada."


Reply via email to