Commit e082ef9c authored by Amit Kapila's avatar Amit Kapila

Back-Patch "Add wait_for_subscription_sync for TAP tests."

This was originally done in commit 0c20dd33db for 16 only, to eliminate
duplicate code and as an infrastructure that makes it easier to write
future tests. However, it has been suggested that it would be good to
back-patch this testing infrastructure to aid future tests in
back-branches.

Backpatch to all supported versions.

Author: Masahiko Sawada
Reviewed by: Amit Kapila, Shi yu
Discussion: https://postgr.es/m/CAD21AoC-fvAkaKHa4t1urupwL8xbAcWRePeETvshvy80f6WV1A@mail.gmail.com
Discussion: https://postgr.es/m/E1oJBIf-0006sw-SA@gemulon.postgresql.org
parent 68dcce24
...@@ -2572,6 +2572,50 @@ sub wait_for_slot_catchup ...@@ -2572,6 +2572,50 @@ sub wait_for_slot_catchup
=pod =pod
=item $node->wait_for_subscription_sync(publisher, subname, dbname)
Wait for all tables in pg_subscription_rel to complete the initial
synchronization (i.e to be either in 'syncdone' or 'ready' state).
If the publisher node is given, additionally, check if the subscriber has
caught up to what has been committed on the primary. This is useful to
ensure that the initial data synchronization has been completed after
creating a new subscription.
If there is no active replication connection from this peer, wait until
poll_query_until timeout.
This is not a test. It die()s on failure.
=cut
sub wait_for_subscription_sync
{
my ($self, $publisher, $subname, $dbname) = @_;
my $name = $self->name;
$dbname = defined($dbname) ? $dbname : 'postgres';
# Wait for all tables to finish initial sync.
print "Waiting for all subscriptions in \"$name\" to synchronize data\n";
my $query =
qq[SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');];
$self->poll_query_until($dbname, $query)
or croak "timed out waiting for subscriber to synchronize data";
# Then, wait for the replication to catchup if required.
if (defined($publisher))
{
croak 'subscription name must be specified' unless defined($subname);
$publisher->wait_for_catchup($subname);
}
print "done\n";
return;
}
=pod
=item $node->wait_for_log(regexp, offset) =item $node->wait_for_log(regexp, offset)
Waits for the contents of the server log file, starting at the given offset, to Waits for the contents of the server log file, starting at the given offset, to
......
...@@ -102,13 +102,8 @@ $node_subscriber->safe_psql('postgres', ...@@ -102,13 +102,8 @@ $node_subscriber->safe_psql('postgres',
"CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub, tap_pub_ins_only" "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub, tap_pub_ins_only"
); );
$node_publisher->wait_for_catchup('tap_sub'); # Wait for initial table sync to finish
$node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub');
# Also wait for initial table sync to finish
my $synced_query =
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');";
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
my $result = my $result =
$node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab_notrep"); $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab_notrep");
...@@ -237,13 +232,8 @@ $node_subscriber->safe_psql('postgres', ...@@ -237,13 +232,8 @@ $node_subscriber->safe_psql('postgres',
"CREATE SUBSCRIPTION tap_sub_temp1 CONNECTION '$publisher_connstr' PUBLICATION tap_pub_temp1, tap_pub_temp2" "CREATE SUBSCRIPTION tap_sub_temp1 CONNECTION '$publisher_connstr' PUBLICATION tap_pub_temp1, tap_pub_temp2"
); );
$node_publisher->wait_for_catchup('tap_sub_temp1'); # Wait for initial table sync to finish
$node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub_temp1');
# Also wait for initial table sync to finish
$synced_query =
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');";
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
# Subscriber table will have no rows initially # Subscriber table will have no rows initially
$result = $result =
......
...@@ -114,13 +114,8 @@ $node_subscriber->safe_psql('postgres', ...@@ -114,13 +114,8 @@ $node_subscriber->safe_psql('postgres',
"CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub WITH (slot_name = tap_sub_slot)" "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub WITH (slot_name = tap_sub_slot)"
); );
$node_publisher->wait_for_catchup('tap_sub'); # Wait for initial sync to finish
$node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub');
# Wait for initial sync to finish as well
my $synced_query =
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('s', 'r');";
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
# Insert initial test data # Insert initial test data
$node_publisher->safe_psql( $node_publisher->safe_psql(
......
...@@ -39,13 +39,8 @@ $node_subscriber->safe_psql('postgres', ...@@ -39,13 +39,8 @@ $node_subscriber->safe_psql('postgres',
"CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub" "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub"
); );
$node_publisher->wait_for_catchup('tap_sub'); # Wait for initial table sync to finish
$node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub');
# Also wait for initial table sync to finish
my $synced_query =
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');";
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
my $result = my $result =
$node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab_rep"); $node_subscriber->safe_psql('postgres', "SELECT count(*) FROM tab_rep");
...@@ -71,8 +66,7 @@ $node_subscriber->poll_query_until('postgres', $started_query) ...@@ -71,8 +66,7 @@ $node_subscriber->poll_query_until('postgres', $started_query)
$node_subscriber->safe_psql('postgres', "DELETE FROM tab_rep;"); $node_subscriber->safe_psql('postgres', "DELETE FROM tab_rep;");
# wait for sync to finish this time # wait for sync to finish this time
$node_subscriber->poll_query_until('postgres', $synced_query) $node_subscriber->wait_for_subscription_sync;
or die "Timed out while waiting for subscriber to synchronize data";
# check that all data is synced # check that all data is synced
$result = $result =
...@@ -107,8 +101,7 @@ $node_subscriber->safe_psql('postgres', ...@@ -107,8 +101,7 @@ $node_subscriber->safe_psql('postgres',
); );
# and wait for data sync to finish again # and wait for data sync to finish again
$node_subscriber->poll_query_until('postgres', $synced_query) $node_subscriber->wait_for_subscription_sync;
or die "Timed out while waiting for subscriber to synchronize data";
# check that all data is synced # check that all data is synced
$result = $result =
...@@ -133,8 +126,7 @@ $node_subscriber->safe_psql('postgres', ...@@ -133,8 +126,7 @@ $node_subscriber->safe_psql('postgres',
"ALTER SUBSCRIPTION tap_sub REFRESH PUBLICATION"); "ALTER SUBSCRIPTION tap_sub REFRESH PUBLICATION");
# wait for sync to finish # wait for sync to finish
$node_subscriber->poll_query_until('postgres', $synced_query) $node_subscriber->wait_for_subscription_sync;
or die "Timed out while waiting for subscriber to synchronize data";
$result = $node_subscriber->safe_psql('postgres', $result = $node_subscriber->safe_psql('postgres',
"SELECT count(*) FROM tab_rep_next"); "SELECT count(*) FROM tab_rep_next");
......
...@@ -32,13 +32,8 @@ $node_subscriber->safe_psql('postgres', ...@@ -32,13 +32,8 @@ $node_subscriber->safe_psql('postgres',
"CREATE SUBSCRIPTION mysub CONNECTION '$publisher_connstr' PUBLICATION mypub;" "CREATE SUBSCRIPTION mysub CONNECTION '$publisher_connstr' PUBLICATION mypub;"
); );
$node_publisher->wait_for_catchup('mysub'); # Wait for initial sync to finish
$node_subscriber->wait_for_subscription_sync($node_publisher, 'mysub');
# Wait for initial sync to finish as well
my $synced_query =
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('s', 'r');";
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
$node_publisher->safe_psql('postgres', $node_publisher->safe_psql('postgres',
q{INSERT INTO test1 VALUES (1, E'Mot\xc3\xb6rhead')}); # hand-rolled UTF-8 q{INSERT INTO test1 VALUES (1, E'Mot\xc3\xb6rhead')}); # hand-rolled UTF-8
......
...@@ -28,13 +28,8 @@ $node_subscriber->safe_psql('postgres', ...@@ -28,13 +28,8 @@ $node_subscriber->safe_psql('postgres',
"CREATE SUBSCRIPTION mysub CONNECTION '$publisher_connstr' PUBLICATION mypub;" "CREATE SUBSCRIPTION mysub CONNECTION '$publisher_connstr' PUBLICATION mypub;"
); );
$node_publisher->wait_for_catchup('mysub'); # Wait for initial sync to finish
$node_subscriber->wait_for_subscription_sync($node_publisher, 'mysub');
# Wait for initial sync to finish as well
my $synced_query =
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('s', 'r');";
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
$node_publisher->safe_psql('postgres', $node_publisher->safe_psql('postgres',
q{INSERT INTO test1 (a, b) VALUES (1, 'one'), (2, 'two');}); q{INSERT INTO test1 (a, b) VALUES (1, 'one'), (2, 'two');});
......
...@@ -38,13 +38,8 @@ $node_subscriber->safe_psql('postgres', ...@@ -38,13 +38,8 @@ $node_subscriber->safe_psql('postgres',
"CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub" "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub"
); );
$node_publisher->wait_for_catchup('tap_sub'); # Wait for initial table sync to finish
$node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub');
# Also wait for initial table sync to finish
my $synced_query =
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');";
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
my $result = my $result =
$node_subscriber->safe_psql('postgres', $node_subscriber->safe_psql('postgres',
...@@ -105,8 +100,7 @@ $node_subscriber->safe_psql('postgres', "CREATE TABLE test_tab2 (a int)"); ...@@ -105,8 +100,7 @@ $node_subscriber->safe_psql('postgres', "CREATE TABLE test_tab2 (a int)");
$node_subscriber->safe_psql('postgres', $node_subscriber->safe_psql('postgres',
"ALTER SUBSCRIPTION tap_sub REFRESH PUBLICATION"); "ALTER SUBSCRIPTION tap_sub REFRESH PUBLICATION");
$node_subscriber->poll_query_until('postgres', $synced_query) $node_subscriber->wait_for_subscription_sync;
or die "Timed out while waiting for subscriber to synchronize data";
# Add replica identity column. (The serial is not necessary, but it's # Add replica identity column. (The serial is not necessary, but it's
# a convenient way to get a default on the new column so that rows # a convenient way to get a default on the new column so that rows
......
...@@ -67,10 +67,7 @@ $node_subscriber->safe_psql('postgres', ...@@ -67,10 +67,7 @@ $node_subscriber->safe_psql('postgres',
); );
# Wait for initial sync of all subscriptions # Wait for initial sync of all subscriptions
my $synced_query = $node_subscriber->wait_for_subscription_sync;
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');";
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
# insert data to truncate # insert data to truncate
...@@ -211,8 +208,7 @@ $node_subscriber->safe_psql('postgres', ...@@ -211,8 +208,7 @@ $node_subscriber->safe_psql('postgres',
); );
# wait for initial data sync # wait for initial data sync
$node_subscriber->poll_query_until('postgres', $synced_query) $node_subscriber->wait_for_subscription_sync;
or die "Timed out while waiting for subscriber to synchronize data";
# insert data to truncate # insert data to truncate
......
...@@ -40,10 +40,7 @@ $node_subscriber->safe_psql('postgres', ...@@ -40,10 +40,7 @@ $node_subscriber->safe_psql('postgres',
); );
# Wait for initial sync of all subscriptions # Wait for initial sync of all subscriptions
my $synced_query = $node_subscriber->wait_for_subscription_sync;
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');";
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
my $result = $node_subscriber->safe_psql('postgres', "SELECT a, b FROM tab1"); my $result = $node_subscriber->safe_psql('postgres', "SELECT a, b FROM tab1");
is( $result, qq(1|22 is( $result, qq(1|22
......
...@@ -153,12 +153,8 @@ ALTER TABLE ONLY tab1_2 ENABLE REPLICA TRIGGER sub2_tab1_2_log_op_trigger; ...@@ -153,12 +153,8 @@ ALTER TABLE ONLY tab1_2 ENABLE REPLICA TRIGGER sub2_tab1_2_log_op_trigger;
}); });
# Wait for initial sync of all subscriptions # Wait for initial sync of all subscriptions
my $synced_query = $node_subscriber1->wait_for_subscription_sync;
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');"; $node_subscriber2->wait_for_subscription_sync;
$node_subscriber1->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
$node_subscriber2->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
# Tests for replication using leaf partition identity and schema # Tests for replication using leaf partition identity and schema
...@@ -483,10 +479,8 @@ $node_subscriber2->safe_psql('postgres', ...@@ -483,10 +479,8 @@ $node_subscriber2->safe_psql('postgres',
"ALTER SUBSCRIPTION sub2 SET PUBLICATION pub_lower_level, pub_all"); "ALTER SUBSCRIPTION sub2 SET PUBLICATION pub_lower_level, pub_all");
# Wait for initial sync of all subscriptions # Wait for initial sync of all subscriptions
$node_subscriber1->poll_query_until('postgres', $synced_query) $node_subscriber1->wait_for_subscription_sync;
or die "Timed out while waiting for subscriber to synchronize data"; $node_subscriber2->wait_for_subscription_sync;
$node_subscriber2->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
# check that data is synced correctly # check that data is synced correctly
$result = $node_subscriber1->safe_psql('postgres', $result = $node_subscriber1->safe_psql('postgres',
...@@ -557,8 +551,7 @@ $node_subscriber2->safe_psql('postgres', ...@@ -557,8 +551,7 @@ $node_subscriber2->safe_psql('postgres',
# make sure the subscription on the second subscriber is synced, before # make sure the subscription on the second subscriber is synced, before
# continuing # continuing
$node_subscriber2->poll_query_until('postgres', $synced_query) $node_subscriber2->wait_for_subscription_sync;
or die "Timed out while waiting for subscriber to synchronize data";
# Insert a change into the leaf partition, should be replicated through # Insert a change into the leaf partition, should be replicated through
# the partition root (thanks to the FOR ALL TABLES partition). # the partition root (thanks to the FOR ALL TABLES partition).
...@@ -813,8 +806,7 @@ $node_subscriber2->safe_psql( ...@@ -813,8 +806,7 @@ $node_subscriber2->safe_psql(
$node_subscriber2->safe_psql('postgres', $node_subscriber2->safe_psql('postgres',
"ALTER SUBSCRIPTION sub2 REFRESH PUBLICATION"); "ALTER SUBSCRIPTION sub2 REFRESH PUBLICATION");
$node_subscriber2->poll_query_until('postgres', $synced_query) $node_subscriber2->wait_for_subscription_sync;
or die "Timed out while waiting for subscriber to synchronize data";
# Make partition map cache # Make partition map cache
$node_publisher->safe_psql('postgres', "INSERT INTO tab5 VALUES (1, 1)"); $node_publisher->safe_psql('postgres', "INSERT INTO tab5 VALUES (1, 1)");
......
...@@ -46,10 +46,7 @@ $node_subscriber->safe_psql('postgres', ...@@ -46,10 +46,7 @@ $node_subscriber->safe_psql('postgres',
. "PUBLICATION tpub WITH (slot_name = tpub_slot, binary = true)"); . "PUBLICATION tpub WITH (slot_name = tpub_slot, binary = true)");
# Ensure nodes are in sync with each other # Ensure nodes are in sync with each other
$node_publisher->wait_for_catchup('tsub'); $node_subscriber->wait_for_subscription_sync($node_publisher, 'tsub');
$node_subscriber->poll_query_until('postgres',
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('s', 'r');"
) or die "Timed out while waiting for subscriber to synchronize data";
# Insert some content and make sure it's replicated across # Insert some content and make sure it's replicated across
$node_publisher->safe_psql( $node_publisher->safe_psql(
......
...@@ -41,13 +41,8 @@ $node_subscriber->safe_psql('postgres', ...@@ -41,13 +41,8 @@ $node_subscriber->safe_psql('postgres',
"CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)" "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)"
); );
$node_publisher->wait_for_catchup($appname); # Wait for initial table sync to finish
$node_subscriber->wait_for_subscription_sync($node_publisher, $appname);
# Also wait for initial table sync to finish
my $synced_query =
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');";
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
my $result = my $result =
$node_subscriber->safe_psql('postgres', $node_subscriber->safe_psql('postgres',
......
...@@ -41,13 +41,8 @@ $node_subscriber->safe_psql('postgres', ...@@ -41,13 +41,8 @@ $node_subscriber->safe_psql('postgres',
"CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)" "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)"
); );
$node_publisher->wait_for_catchup($appname); # Wait for initial table sync to finish
$node_subscriber->wait_for_subscription_sync($node_publisher, $appname);
# Also wait for initial table sync to finish
my $synced_query =
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');";
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
my $result = my $result =
$node_subscriber->safe_psql('postgres', $node_subscriber->safe_psql('postgres',
......
...@@ -41,13 +41,8 @@ $node_subscriber->safe_psql('postgres', ...@@ -41,13 +41,8 @@ $node_subscriber->safe_psql('postgres',
"CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)" "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)"
); );
$node_publisher->wait_for_catchup($appname); # Wait for initial table sync to finish
$node_subscriber->wait_for_subscription_sync($node_publisher, $appname);
# Also wait for initial table sync to finish
my $synced_query =
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');";
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
my $result = my $result =
$node_subscriber->safe_psql('postgres', $node_subscriber->safe_psql('postgres',
......
...@@ -40,13 +40,8 @@ $node_subscriber->safe_psql('postgres', ...@@ -40,13 +40,8 @@ $node_subscriber->safe_psql('postgres',
"CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)" "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)"
); );
$node_publisher->wait_for_catchup($appname); # Wait for initial table sync to finish
$node_subscriber->wait_for_subscription_sync($node_publisher, $appname);
# Also wait for initial table sync to finish
my $synced_query =
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');";
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
my $result = my $result =
$node_subscriber->safe_psql('postgres', $node_subscriber->safe_psql('postgres',
......
...@@ -41,13 +41,8 @@ $node_subscriber->safe_psql('postgres', ...@@ -41,13 +41,8 @@ $node_subscriber->safe_psql('postgres',
"CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)" "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr application_name=$appname' PUBLICATION tap_pub WITH (streaming = on)"
); );
$node_publisher->wait_for_catchup($appname); # Wait for initial table sync to finish
$node_subscriber->wait_for_subscription_sync($node_publisher, $appname);
# Also wait for initial table sync to finish
my $synced_query =
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');";
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
my $result = my $result =
$node_subscriber->safe_psql('postgres', $node_subscriber->safe_psql('postgres',
......
...@@ -38,13 +38,7 @@ $node_subscriber->safe_psql('postgres', ...@@ -38,13 +38,7 @@ $node_subscriber->safe_psql('postgres',
); );
# Wait for initial table sync to finish # Wait for initial table sync to finish
my $synced_query = $node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub');
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');";
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
$node_publisher->wait_for_catchup('tap_sub');
# Check the initial data of tab_1 is copied to subscriber # Check the initial data of tab_1 is copied to subscriber
my $result = $node_subscriber->safe_psql('postgres', my $result = $node_subscriber->safe_psql('postgres',
...@@ -68,10 +62,7 @@ $node_subscriber->safe_psql('postgres', ...@@ -68,10 +62,7 @@ $node_subscriber->safe_psql('postgres',
"ALTER SUBSCRIPTION tap_sub DROP PUBLICATION tap_pub_1"); "ALTER SUBSCRIPTION tap_sub DROP PUBLICATION tap_pub_1");
# Wait for initial table sync to finish # Wait for initial table sync to finish
$node_subscriber->poll_query_until('postgres', $synced_query) $node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub');
or die "Timed out while waiting for subscriber to synchronize data";
$node_publisher->wait_for_catchup('tap_sub');
# Check the initial data of tab_drop_refresh was copied to subscriber # Check the initial data of tab_drop_refresh was copied to subscriber
$result = $node_subscriber->safe_psql('postgres', $result = $node_subscriber->safe_psql('postgres',
...@@ -83,10 +74,7 @@ $node_subscriber->safe_psql('postgres', ...@@ -83,10 +74,7 @@ $node_subscriber->safe_psql('postgres',
"ALTER SUBSCRIPTION tap_sub ADD PUBLICATION tap_pub_1"); "ALTER SUBSCRIPTION tap_sub ADD PUBLICATION tap_pub_1");
# Wait for initial table sync to finish # Wait for initial table sync to finish
$node_subscriber->poll_query_until('postgres', $synced_query) $node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub');
or die "Timed out while waiting for subscriber to synchronize data";
$node_publisher->wait_for_catchup('tap_sub');
# Check the initial data of tab_1 was copied to subscriber again # Check the initial data of tab_1 was copied to subscriber again
$result = $node_subscriber->safe_psql('postgres', $result = $node_subscriber->safe_psql('postgres',
......
...@@ -144,12 +144,7 @@ $node_twoways->safe_psql('d2', ...@@ -144,12 +144,7 @@ $node_twoways->safe_psql('d2',
# We cannot rely solely on wait_for_catchup() here; it isn't sufficient # We cannot rely solely on wait_for_catchup() here; it isn't sufficient
# when tablesync workers might still be running. So in addition to that, # when tablesync workers might still be running. So in addition to that,
# verify that tables are synced. # verify that tables are synced.
# XXX maybe this should be integrated in wait_for_catchup() itself. $node_twoways->wait_for_subscription_sync($node_twoways, 'testsub', 'd2');
$node_twoways->wait_for_catchup('testsub');
my $synced_query =
"SELECT count(1) = 0 FROM pg_subscription_rel WHERE srsubstate NOT IN ('r', 's');";
$node_twoways->poll_query_until('d2', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
is($node_twoways->safe_psql('d2', "SELECT count(f) FROM t"), is($node_twoways->safe_psql('d2', "SELECT count(f) FROM t"),
$rows * 2, "2x$rows rows in t"); $rows * 2, "2x$rows rows in t");
...@@ -278,11 +273,8 @@ $node_subscriber->safe_psql('postgres', ...@@ -278,11 +273,8 @@ $node_subscriber->safe_psql('postgres',
"CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub" "CREATE SUBSCRIPTION tap_sub CONNECTION '$publisher_connstr' PUBLICATION tap_pub"
); );
$node_publisher->wait_for_catchup('tap_sub'); # Wait for initial table sync to finish
$node_subscriber->wait_for_subscription_sync($node_publisher, 'tap_sub');
# Also wait for initial table sync to finish
$node_subscriber->poll_query_until('postgres', $synced_query)
or die "Timed out while waiting for subscriber to synchronize data";
is( $node_subscriber->safe_psql( is( $node_subscriber->safe_psql(
'postgres', "SELECT * FROM tab_replidentity_index"), 'postgres', "SELECT * FROM tab_replidentity_index"),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment