Stablize tests added in 3abe9dc188.
authorAmit Kapila <[email protected]>
Fri, 28 Mar 2025 05:33:05 +0000 (11:03 +0530)
committerAmit Kapila <[email protected]>
Fri, 28 Mar 2025 05:33:05 +0000 (11:03 +0530)
The problem is that after the ALTER SUBSCRIPTION tap_sub SET PUBLICATION
command, we didn't wait for the new walsender to start on the publisher.
Immediately after ALTER, we performed Insert and expected it to replicate.
However, the replication could start from a point after the INSERT location,
and as the subscription isn't copying initial data, we could miss such an
Insert.

The fix is to wait for connection to be established between publisher and
subscriber before starting DML operations that are expected to replicate.

As per CI.

Reported-by: Andres Freund <[email protected]>
Author: Hayato Kuroda <[email protected]>
Discussion: https://postgr.es/m/CALDaNm2ms1deM5EYNLFEfESv_Kw=Y4AiTB0LP=qGS-UpFwGbPg@mail.gmail.com

src/test/subscription/t/007_ddl.pl

index 7d4c2d51c3a587baba31d1b1418e1cfa7598aea4..de846193bb5c00fbba2a97a320a58965e61498d3 100644 (file)
@@ -130,16 +130,18 @@ $node_publisher->safe_psql('postgres', qq[
    CREATE PUBLICATION pub_for_all_tables FOR ALL TABLES;
 ]);
 $node_subscriber->safe_psql('postgres',
-   "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION pub_for_tab WITH (copy_data = off)"
+   "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION pub_for_tab"
 );
+$node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub');
 
 # Confirms RENAME command works well for a publication
 test_swap('test1', 'pub_for_tab', 'tap_sub');
 
 # Switches a publication which includes all tables
 $node_subscriber->safe_psql('postgres',
-   "ALTER SUBSCRIPTION tap_sub SET PUBLICATION pub_for_all_tables WITH (refresh = true, copy_data = false);"
+   "ALTER SUBSCRIPTION tap_sub SET PUBLICATION pub_for_all_tables;"
 );
+$node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub');
 
 # Confirms RENAME command works well for ALL TABLES publication
 test_swap('test2', 'pub_for_all_tables', 'tap_sub');