Eliminate replication protocol error related to IDENTIFY_SYSTEM.
authorJeff Davis <[email protected]>
Fri, 9 Jul 2021 15:48:19 +0000 (08:48 -0700)
committerJeff Davis <[email protected]>
Fri, 9 Jul 2021 18:37:45 +0000 (11:37 -0700)
The requirement that IDENTIFY_SYSTEM be run before START_REPLICATION
was both undocumented and unnecessary. Remove the error and ensure
that ThisTimeLineID is initialized in START_REPLICATION.

Elect not to backport because this requirement was expected behavior
(even if inconsistently enforced), and is not likely to cause any
major problem.

Author: Jeff Davis
Reviewed-by: Andres Freund
Discussion: https://postgr.es/m/de4bbf05b7cd94227841c433ea6ff71d2130c713.camel%40j-davis.com

src/backend/replication/walsender.c

index 92c755f346eba61fd61679944eeff3fb19d07e97..3ca2a11389dc26ca881a845ec2286d9744f331e2 100644 (file)
@@ -573,11 +573,6 @@ StartReplication(StartReplicationCmd *cmd)
    StringInfoData buf;
    XLogRecPtr  FlushPtr;
 
-   if (ThisTimeLineID == 0)
-       ereport(ERROR,
-               (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
-                errmsg("IDENTIFY_SYSTEM has not been run before START_REPLICATION")));
-
    /* create xlogreader for physical replication */
    xlogreader =
        XLogReaderAllocate(wal_segment_size, NULL,
@@ -619,6 +614,7 @@ StartReplication(StartReplicationCmd *cmd)
     * that. Otherwise use the timeline of the last replayed record, which is
     * kept in ThisTimeLineID.
     */
+   am_cascading_walsender = RecoveryInProgress();
    if (am_cascading_walsender)
    {
        /* this also updates ThisTimeLineID */