v43_changes_amit_1.patch.txt

text/plain

Filename: v43_changes_amit_1.patch.txt
Type: text/plain
Part: 0
Message: Re: Synchronizing slots from primary to standby
diff --git a/src/backend/replication/walsender.c b/src/backend/replication/walsender.c
index 58e298af89..ef486ca92c 100644
--- a/src/backend/replication/walsender.c
+++ b/src/backend/replication/walsender.c
@@ -1674,33 +1674,38 @@ WalSndFilterStandbySlots(XLogRecPtr wait_for_lsn, List **standby_slots)
 
 			continue;
 		}
-
-		/*
-		 * It may happen that the slot specified in standby_slot_names GUC
-		 * value is dropped, so let's skip over it.
-		 */
 		else if (!slot)
+		{
+			/*
+			 * It may happen that the slot specified in standby_slot_names GUC
+			 * value is dropped, so let's skip over it.
+			 */
 			warningfmt = _("replication slot \"%s\" specified in parameter \"%s\" does not exist, ignoring");
-
-		/*
-		 * If a logical slot name is provided in standby_slot_names, issue a
-		 * WARNING and skip it. Although logical slots are disallowed in the
-		 * GUC check_hook(validate_standby_slots), it is still possible for a
-		 * user to drop an existing physical slot and recreate a logical slot
-		 * with the same name. Since it is harmless, a WARNING should be
-		 * enough, no need to error-out.
-		 */
+		}
 		else if (SlotIsLogical(slot))
+		{
+			/*
+			 * If a logical slot name is provided in standby_slot_names, issue
+			 * a WARNING and skip it. Although logical slots are disallowed in
+			 * the GUC check_hook(validate_standby_slots), it is still possible
+			 * for a user to drop an existing physical slot and recreate a
+			 * logical slot with the same name. Since it is harmless, a WARNING
+			 * should be enough, no need to error-out.
+			 */
 			warningfmt = _("cannot have logical replication slot \"%s\" in parameter \"%s\", ignoring");
-
-		/*
-		 * Specified physical slot may have been invalidated, so no point in
-		 * waiting for it.
-		 */
+		}
 		else if (XLogRecPtrIsInvalid(restart_lsn) || invalidated)
+		{
+			/*
+			 * Specified physical slot may have been invalidated, so no point in
+			 * waiting for it.
+			 */
 			warningfmt = _("physical slot \"%s\" specified in parameter \"%s\" has been invalidated, ignoring");
+		}
 		else
+		{
 			Assert(restart_lsn >= wait_for_lsn);
+		}
 
 		/*
 		 * Reaching here indicates that either the slot has passed the
@@ -1768,9 +1773,9 @@ WalSndWaitForStandbyConfirmation(XLogRecPtr wait_for_lsn)
 /*
  * Wait till WAL < loc is flushed to disk so it can be safely sent to client.
  *
- * If the walsender holds a logical slot that has enabled failover, the
- * function also waits for all the specified streaming replication standby
- * servers to confirm receipt of WAL up to RecentFlushPtr.
+ * If the walsender holds a logical slot that has enabled failover, we also
+ * wait for all the specified streaming replication standby servers to
+ * confirm receipt of WAL up to RecentFlushPtr.
  *
  * Returns end LSN of flushed WAL.  Normally this will be >= loc, but if we
  * detect a shutdown request (either from postmaster or client) we will return
@@ -1790,7 +1795,7 @@ WalSndWaitForWal(XLogRecPtr loc)
 
 	/*
 	 * Check if all the standby servers have confirmed receipt of WAL up to
-	 * RecentFlushPtr if we already know we have enough WAL available.
+	 * RecentFlushPtr even when we already know we have enough WAL available.
 	 *
 	 * Note that we cannot directly return without checking the status of
 	 * standby servers because the standby_slot_names may have changed, which
@@ -1892,7 +1897,10 @@ WalSndWaitForWal(XLogRecPtr loc)
 			wait_for_standby = true;
 		}
 		else
+		{
+			/* already caught up and doesn't need to wait for standby_slots */
 			break;
+		}
 
 		/* Waiting for new WAL. Since we need to wait, we're now caught up. */
 		WalSndCaughtUp = true;