Reload configuration more frequently in apply worker.
authorAmit Kapila <[email protected]>
Wed, 7 Jun 2023 03:49:17 +0000 (09:19 +0530)
committerAmit Kapila <[email protected]>
Wed, 7 Jun 2023 03:49:17 +0000 (09:19 +0530)
The apply worker was not reloading the configuration while processing
messages if there is a continuous flow of messages from upstream. It was
also not reloading the configuration if there is a change in the
configuration after it has waited for the message and before receiving the
new replication message. This can lead to failure in tests because we
expect that after reload, the behavior of apply worker to respect the
changed GUCs.

We found this while analyzing a rare buildfarm failure.

Author: Hou Zhijie
Reviewed-by: Amit Kapila
Discussion: https://postgr.es/m/OS0PR01MB5716AF9079CC0755CD015322947E9@OS0PR01MB5716.jpnprd01.prod.outlook.com

src/backend/replication/logical/worker.c

index 78926f8647bfaabec15bc496a6c8a18e1e67d3fc..0ee764d68f1cbef803ee6555ed79a237a5c6b621 100644 (file)
@@ -3562,6 +3562,12 @@ LogicalRepApplyLoop(XLogRecPtr last_received)
                    int         c;
                    StringInfoData s;
 
+                   if (ConfigReloadPending)
+                   {
+                       ConfigReloadPending = false;
+                       ProcessConfigFile(PGC_SIGHUP);
+                   }
+
                    /* Reset timeout. */
                    last_recv_timestamp = GetCurrentTimestamp();
                    ping_sent = false;