Fix a race in 035_standby_logical_decoding.pl

Buildfarm animals francolin and kestrel reported intermittent failures
in 035_standby_logical_decoding.pl.

The test checks that replaying DROP DATABASE on a standby terminates
pg_recvlogical with the expected recovery-conflict message and removes
the database's replication slots. To exercise this while pg_recvlogical
is streaming, the test must wait for streaming to start before dropping
the database on the primary.

Previously, the test treated an active slot in pg_replication_slots as
confirmation that pg_recvlogical was streaming. However, the slot can
become active before pg_recvlogical has entered streaming mode. If
DROP DATABASE is replayed during this window, pg_recvlogical can report
a connection-closed error instead of the recovery-conflict message,
causing the test to fail.

Run pg_recvlogical with --verbose and wait for "streaming initiated"
instead of checking whether the slot is active. This ensures that
pg_recvlogical has entered streaming mode before the database is
dropped on the primary.

Back-patch to v16, where this test was introduced.

Reported-by: Alexander Lakhin <[email protected]>
Author: Hayato Kuroda <[email protected]>
Reviewed-by: Alexander Lakhin <[email protected]>
Reviewed-by: Bertrand Drouvot <[email protected]>
Reviewed-by: Fujii Masao <[email protected]>
Discussion: https://postgr.es/m/[email protected]
Backpatch-through: 16

Branch
------
REL_19_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/9c0d6057c604fec1febc3385853ad83555736994

Modified Files
--------------
src/test/recovery/t/035_standby_logical_decoding.pl | 16 +++++++++-------
1 file changed, 9 insertions(+), 7 deletions(-)

Reply via email to