|
| 1 | +use Carp; |
| 2 | +use POSIX; |
1 | 3 | use strict;
|
| 4 | +use Test::More; |
| 5 | +use TestLib; |
| 6 | +use Time::HiRes qw(usleep); |
2 | 7 | use warnings;
|
3 |
| -use Carp; |
| 8 | + |
4 | 9 | use PostgresNode;
|
5 | 10 | use Cluster;
|
6 |
| -use TestLib; |
7 |
| -use Test::More; |
| 11 | + |
| 12 | +use Test::More tests => Cluster::is_ee() ? 6 : 5; |
8 | 13 |
|
9 | 14 | my $cluster = new Cluster(3);
|
10 | 15 | $cluster->init();
|
|
42 | 47 | $hash2 = $cluster->safe_psql(2, $hash_query);
|
43 | 48 | note("$hash0, $hash1, $hash2");
|
44 | 49 | is( (($hash0 eq $hash1) and ($hash1 eq $hash2)) , 1,
|
45 |
| - "Check that hash is the same after query"); |
| 50 | + "Check that hash is the same after query"); |
46 | 51 | }
|
47 | 52 |
|
48 | 53 | $cluster->safe_psql(0, q{
|
|
72 | 77 | $hash2 = $cluster->safe_psql(2, $hash_query);
|
73 | 78 | note("$hash0, $hash1, $hash2");
|
74 | 79 | is( (($hash0 eq $hash1) and ($hash1 eq $hash2)) , 1,
|
75 |
| - "Check that hash is the same after query"); |
| 80 | + "Check that hash is the same after query"); |
76 | 81 |
|
77 | 82 | # ##############################################################################
|
78 | 83 | #
|
|
93 | 98 |
|
94 | 99 | # Simulate payload
|
95 | 100 | $cluster->pgbench(0, ('-i', '-n', -s => '1') );
|
96 |
| -my $pgb1 = $cluster->pgbench_async(0, ('-n', -T => '15', -j=>'5', -c => '5') ); |
97 |
| -sleep(5); |
| 101 | +note( strftime('%Y-%m-%d %H:%M:%S', localtime) . ": starting async pgbench" ); |
| 102 | +my $pgb1 = $cluster->pgbench_async(0, ('-n', -T => '25', -j => '1', -c => '5') ); |
98 | 103 |
|
99 | 104 | my $pid0;
|
100 | 105 | my $attempts = 0;
|
| 106 | + |
| 107 | +note( strftime('%Y-%m-%d %H:%M:%S', localtime) . ": starting polling of backend pid" ); |
101 | 108 | while (1)
|
102 | 109 | {
|
103 | 110 | $pid0 = $cluster->safe_psql(0, "SELECT pid FROM pg_stat_activity
|
104 | 111 | WHERE backend_type LIKE 'client backend'
|
105 | 112 | AND query LIKE 'UPDATE%' LIMIT 1;");
|
106 | 113 |
|
107 | 114 | # bf says we might be really unlucky to find no backend doing update
|
108 |
| - if ($pid0 ne "") |
| 115 | + # It does not make much sense to try longer than pgbench run lasts, |
| 116 | + # since we need an active backend to kill. So let it be 25 seconds |
| 117 | + # both for pgbench_async() and this pg_stat_activity polling. |
| 118 | + if ( ($pid0 ne "") || $attempts >= 25*10 ) |
109 | 119 | {
|
110 | 120 | last;
|
111 | 121 | }
|
| 122 | + |
112 | 123 | # Wait 0.1 second before retrying.
|
113 | 124 | usleep(100_000);
|
114 | 125 | $attempts++;
|
115 |
| - if ($attempts >= 180*10) |
116 |
| - { |
117 |
| - croak 'failed to fetch backend pid'; |
118 |
| - } |
119 | 126 | }
|
| 127 | +note( strftime('%Y-%m-%d %H:%M:%S', localtime) . ": finished polling of backend pid" ); |
| 128 | +is( ($pid0 ne ""), 1, |
| 129 | + "found an active backend doing UPDATE" ); |
120 | 130 |
|
121 | 131 | # Simulate hard crash
|
122 | 132 | note("Simulate hard crash of a backend by SIGKILL to $pid0");
|
|
0 commit comments