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

Lines changed: 23 additions & 0 deletions
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

Lines changed: 10 additions & 36 deletions
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

Lines changed: 8 additions & 37 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy