For cascading replication, wake physical and logical walsenders separately
authorAndres Freund <[email protected]>
Sat, 8 Apr 2023 07:24:24 +0000 (00:24 -0700)
committerAndres Freund <[email protected]>
Sat, 8 Apr 2023 08:06:00 +0000 (01:06 -0700)
commite101dfac3a53c20bfbf1ca85d30a368c2954facf
tree1a5c755d9eb0a2f6f1d6251d9dd9f185654534cb
parent26669757b6a7665c1069e77e6472bd8550193ca6
For cascading replication, wake physical and logical walsenders separately

Physical walsenders can't send data until it's been flushed; logical
walsenders can't decode and send data until it's been applied. On the
standby, the WAL is flushed first, which will only wake up physical
walsenders; and then applied, which will only wake up logical
walsenders.

Previously, all walsenders were awakened when the WAL was flushed. That
was fine for logical walsenders on the primary; but on the standby the
flushed WAL would have been not applied yet, so logical walsenders were
awakened too early.

Per idea from Jeff Davis and Amit Kapila.

Author: "Drouvot, Bertrand" <[email protected]>
Reviewed-By: Jeff Davis <[email protected]>
Reviewed-By: Robert Haas <[email protected]>
Reviewed-by: Amit Kapila <[email protected]>
Reviewed-by: Masahiko Sawada <[email protected]>
Discussion: https://postgr.es/m/CAA4eK1+zO5LUeisabX10c81LU-fWMKO4M9Wyg1cdkbW7Hqh6vQ@mail.gmail.com
src/backend/access/transam/xlog.c
src/backend/access/transam/xlogarchive.c
src/backend/access/transam/xlogrecovery.c
src/backend/replication/walreceiver.c
src/backend/replication/walsender.c
src/include/replication/walsender.h
src/include/replication/walsender_private.h