v43_changes_amit_1.patch.txt
text/plain
Filename: v43_changes_amit_1.patch.txt
Type: text/plain
Part: 0
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;