worker_spi: Fix race condition in newly-added TAP tests

The second portion of the tests had a race condition where it would be
possible for the startup of the dynamic workers to fail, in the event
where the static workers started before them with the library loading in
shared_preload_libraries did not finish to create their respective
schemas.  The conflict is caused by the fact that the dynamic and static
workers used the same IDs, overlapping each other, so, for now, switch
the dynamic workers to use different IDs, leading to different schemas
created.

Reported-by: Andres Freund
Discussion: https://postgr.es/m/20230728022332.egqzobhskmlf6ntr@awork3.anarazel.de
This commit is contained in:
Michael Paquier 2023-07-29 11:34:53 +09:00
parent 6d982e3b3b
commit b68e356a68

View File

@ -65,9 +65,11 @@ ok( $node->poll_query_until(
) or die "Timed out while waiting for bgworkers to be launched"; ) or die "Timed out while waiting for bgworkers to be launched";
# Ask worker_spi to launch dynamic bgworkers with the library loaded, then # Ask worker_spi to launch dynamic bgworkers with the library loaded, then
# check their existence. # check their existence. Use IDs that do not overlap with the schemas created
my $worker1_pid = $node->safe_psql('mydb', 'SELECT worker_spi_launch(1);'); # by the previous workers.
my $worker2_pid = $node->safe_psql('mydb', 'SELECT worker_spi_launch(2);'); my $worker1_pid = $node->safe_psql('mydb', 'SELECT worker_spi_launch(10);');
my $worker2_pid = $node->safe_psql('mydb', 'SELECT worker_spi_launch(11);');
ok( $node->poll_query_until( ok( $node->poll_query_until(
'mydb', 'mydb',
qq[SELECT datname, count(datname) FROM pg_stat_activity qq[SELECT datname, count(datname) FROM pg_stat_activity