Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 6da65a3

Browse files
Add function to pump IPC process until string match
Refactor the recovery tests to not carry a local duplicated copy of the pump_until function which pumps a process until a defined string is seen on a stream. This reduces duplication, and is in preparation for another patch which will also use this functionality. Reviewed-by: Michael Paquier <michael@paquier.xyz> Discussion https://postgr.es/m/YgynUafCyIu3jIhC@paquier.xyz
1 parent 91d3580 commit 6da65a3

File tree

3 files changed

+41
-73
lines changed

3 files changed

+41
-73
lines changed

src/test/perl/PostgreSQL/Test/Utils.pm

+23
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ our @EXPORT = qw(
7373
system_log
7474
run_log
7575
run_command
76+
pump_until
7677
7778
command_ok
7879
command_fails
@@ -408,6 +409,28 @@ sub run_command
408409

409410
=pod
410411
412+
=item pump_until(proc, timeout, stream, until)
413+
414+
Pump until string is matched on the specified stream, or timeout occurs.
415+
416+
=cut
417+
418+
sub pump_until
419+
{
420+
my ($proc, $timeout, $stream, $until) = @_;
421+
$proc->pump_nb();
422+
while (1)
423+
{
424+
last if $$stream =~ /$until/;
425+
return 0 if ($timeout->is_expired);
426+
return 0 if (not $proc->pumpable());
427+
$proc->pump();
428+
}
429+
return 1;
430+
}
431+
432+
=pod
433+
411434
=item generate_ascii_string(from_char, to_char)
412435
413436
Generate a string made of the given range of ASCII characters.

src/test/recovery/t/013_crash_restart.pl

+10-36
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
INSERT INTO alive VALUES($$committed-before-sigquit$$);
7272
SELECT pg_backend_pid();
7373
];
74-
ok(pump_until($killme, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
74+
ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
7575
'acquired pid for SIGQUIT');
7676
my $pid = $killme_stdout;
7777
chomp($pid);
@@ -83,7 +83,7 @@
8383
BEGIN;
8484
INSERT INTO alive VALUES($$in-progress-before-sigquit$$) RETURNING status;
8585
];
86-
ok(pump_until($killme, \$killme_stdout, qr/in-progress-before-sigquit/m),
86+
ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/in-progress-before-sigquit/m),
8787
'inserted in-progress-before-sigquit');
8888
$killme_stdout = '';
8989
$killme_stderr = '';
@@ -96,7 +96,7 @@
9696
SELECT $$psql-connected$$;
9797
SELECT pg_sleep(3600);
9898
];
99-
ok(pump_until($monitor, \$monitor_stdout, qr/psql-connected/m),
99+
ok(pump_until($monitor, $psql_timeout, \$monitor_stdout, qr/psql-connected/m),
100100
'monitor connected');
101101
$monitor_stdout = '';
102102
$monitor_stderr = '';
@@ -113,6 +113,7 @@
113113
];
114114
ok( pump_until(
115115
$killme,
116+
$psql_timeout,
116117
\$killme_stderr,
117118
qr/WARNING: terminating connection because of crash of another server process|server closed the connection unexpectedly|connection to server was lost/m
118119
),
@@ -126,6 +127,7 @@
126127
# sending.
127128
ok( pump_until(
128129
$monitor,
130+
$psql_timeout,
129131
\$monitor_stderr,
130132
qr/WARNING: terminating connection because of crash of another server process|server closed the connection unexpectedly|connection to server was lost/m
131133
),
@@ -148,7 +150,7 @@
148150
$killme_stdin .= q[
149151
SELECT pg_backend_pid();
150152
];
151-
ok(pump_until($killme, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
153+
ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
152154
"acquired pid for SIGKILL");
153155
$pid = $killme_stdout;
154156
chomp($pid);
@@ -161,7 +163,7 @@
161163
BEGIN;
162164
INSERT INTO alive VALUES($$in-progress-before-sigkill$$) RETURNING status;
163165
];
164-
ok(pump_until($killme, \$killme_stdout, qr/in-progress-before-sigkill/m),
166+
ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/in-progress-before-sigkill/m),
165167
'inserted in-progress-before-sigkill');
166168
$killme_stdout = '';
167169
$killme_stderr = '';
@@ -173,7 +175,7 @@
173175
SELECT $$psql-connected$$;
174176
SELECT pg_sleep(3600);
175177
];
176-
ok(pump_until($monitor, \$monitor_stdout, qr/psql-connected/m),
178+
ok(pump_until($monitor, $psql_timeout, \$monitor_stdout, qr/psql-connected/m),
177179
'monitor connected');
178180
$monitor_stdout = '';
179181
$monitor_stderr = '';
@@ -191,6 +193,7 @@
191193
];
192194
ok( pump_until(
193195
$killme,
196+
$psql_timeout,
194197
\$killme_stderr,
195198
qr/server closed the connection unexpectedly|connection to server was lost/m
196199
),
@@ -202,6 +205,7 @@
202205
# sending.
203206
ok( pump_until(
204207
$monitor,
208+
$psql_timeout,
205209
\$monitor_stderr,
206210
qr/WARNING: terminating connection because of crash of another server process|server closed the connection unexpectedly|connection to server was lost/m
207211
),
@@ -240,34 +244,4 @@
240244

241245
$node->stop();
242246

243-
# Pump until string is matched, or timeout occurs
244-
sub pump_until
245-
{
246-
my ($proc, $stream, $untl) = @_;
247-
$proc->pump_nb();
248-
while (1)
249-
{
250-
last if $$stream =~ /$untl/;
251-
if ($psql_timeout->is_expired)
252-
{
253-
diag("aborting wait: program timed out");
254-
diag("stream contents: >>", $$stream, "<<");
255-
diag("pattern searched for: ", $untl);
256-
257-
return 0;
258-
}
259-
if (not $proc->pumpable())
260-
{
261-
diag("aborting wait: program died");
262-
diag("stream contents: >>", $$stream, "<<");
263-
diag("pattern searched for: ", $untl);
264-
265-
return 0;
266-
}
267-
$proc->pump();
268-
}
269-
return 1;
270-
271-
}
272-
273247
done_testing();

src/test/recovery/t/022_crash_temp_files.pl

+8-37
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@
5757
$killme_stdin .= q[
5858
SELECT pg_backend_pid();
5959
];
60-
ok(pump_until($killme, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
60+
ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
6161
'acquired pid for SIGKILL');
6262
my $pid = $killme_stdout;
6363
chomp($pid);
@@ -86,7 +86,7 @@
8686
INSERT INTO tab_crash (a) VALUES(1);
8787
SELECT $$insert-tuple-to-lock-next-insert$$;
8888
];
89-
pump_until($killme2, \$killme_stdout2, qr/insert-tuple-to-lock-next-insert/m);
89+
pump_until($killme2, $psql_timeout, \$killme_stdout2, qr/insert-tuple-to-lock-next-insert/m);
9090
$killme_stdout2 = '';
9191
$killme_stderr2 = '';
9292

@@ -99,7 +99,7 @@
9999
SELECT $$in-progress-before-sigkill$$;
100100
INSERT INTO tab_crash (a) SELECT i FROM generate_series(1, 5000) s(i);
101101
];
102-
ok(pump_until($killme, \$killme_stdout, qr/in-progress-before-sigkill/m),
102+
ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/in-progress-before-sigkill/m),
103103
'insert in-progress-before-sigkill');
104104
$killme_stdout = '';
105105
$killme_stderr = '';
@@ -121,7 +121,7 @@ BEGIN
121121
SELECT $$insert-tuple-lock-waiting$$;
122122
];
123123

124-
pump_until($killme2, \$killme_stdout2, qr/insert-tuple-lock-waiting/m);
124+
pump_until($killme2, $psql_timeout, \$killme_stdout2, qr/insert-tuple-lock-waiting/m);
125125
$killme_stdout2 = '';
126126
$killme_stderr2 = '';
127127

@@ -158,7 +158,7 @@ BEGIN
158158
$killme_stdin .= q[
159159
SELECT pg_backend_pid();
160160
];
161-
ok(pump_until($killme, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
161+
ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/[[:digit:]]+[\r\n]$/m),
162162
'acquired pid for SIGKILL');
163163
$pid = $killme_stdout;
164164
chomp($pid);
@@ -175,7 +175,7 @@ BEGIN
175175
INSERT INTO tab_crash (a) VALUES(1);
176176
SELECT $$insert-tuple-to-lock-next-insert$$;
177177
];
178-
pump_until($killme2, \$killme_stdout2, qr/insert-tuple-to-lock-next-insert/m);
178+
pump_until($killme2, $psql_timeout, \$killme_stdout2, qr/insert-tuple-to-lock-next-insert/m);
179179
$killme_stdout2 = '';
180180
$killme_stderr2 = '';
181181

@@ -188,7 +188,7 @@ BEGIN
188188
SELECT $$in-progress-before-sigkill$$;
189189
INSERT INTO tab_crash (a) SELECT i FROM generate_series(1, 5000) s(i);
190190
];
191-
ok(pump_until($killme, \$killme_stdout, qr/in-progress-before-sigkill/m),
191+
ok(pump_until($killme, $psql_timeout, \$killme_stdout, qr/in-progress-before-sigkill/m),
192192
'insert in-progress-before-sigkill');
193193
$killme_stdout = '';
194194
$killme_stderr = '';
@@ -210,7 +210,7 @@ BEGIN
210210
SELECT $$insert-tuple-lock-waiting$$;
211211
];
212212

213-
pump_until($killme2, \$killme_stdout2, qr/insert-tuple-lock-waiting/m);
213+
pump_until($killme2, $psql_timeout, \$killme_stdout2, qr/insert-tuple-lock-waiting/m);
214214
$killme_stdout2 = '';
215215
$killme_stderr2 = '';
216216

@@ -242,33 +242,4 @@ BEGIN
242242

243243
$node->stop();
244244

245-
# Pump until string is matched, or timeout occurs
246-
sub pump_until
247-
{
248-
my ($proc, $stream, $untl) = @_;
249-
$proc->pump_nb();
250-
while (1)
251-
{
252-
last if $$stream =~ /$untl/;
253-
if ($psql_timeout->is_expired)
254-
{
255-
diag("aborting wait: program timed out");
256-
diag("stream contents: >>", $$stream, "<<");
257-
diag("pattern searched for: ", $untl);
258-
259-
return 0;
260-
}
261-
if (not $proc->pumpable())
262-
{
263-
diag("aborting wait: program died");
264-
diag("stream contents: >>", $$stream, "<<");
265-
diag("pattern searched for: ", $untl);
266-
267-
return 0;
268-
}
269-
$proc->pump();
270-
}
271-
return 1;
272-
}
273-
274245
done_testing();

0 commit comments

Comments
 (0)