Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit6da65a3

Browse files
Add function to pump IPC process until string match
Refactor the recovery tests to not carry a local duplicated copy ofthe pump_until function which pumps a process until a defined stringis seen on a stream. This reduces duplication, and is in preparationfor another patch which will also use this functionality.Reviewed-by: Michael Paquier <michael@paquier.xyz>Discussionhttps://postgr.es/m/YgynUafCyIu3jIhC@paquier.xyz
1 parent91d3580 commit6da65a3

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+
=itempump_until(proc, timeout, stream, until)
413+
414+
Pump until string is matched on the specified stream, or timeout occurs.
415+
416+
=cut
417+
418+
subpump_until
419+
{
420+
my ($proc,$timeout,$stream,$until) =@_;
421+
$proc->pump_nb();
422+
while (1)
423+
{
424+
lastif$$stream =~/$until/;
425+
return 0if ($timeout->is_expired);
426+
return 0if (not$proc->pumpable());
427+
$proc->pump();
428+
}
429+
return 1;
430+
}
431+
432+
=pod
433+
411434
=itemgenerate_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-
subpump_until
245-
{
246-
my ($proc,$stream,$untl) =@_;
247-
$proc->pump_nb();
248-
while (1)
249-
{
250-
lastif$$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-
subpump_until
247-
{
248-
my ($proc,$stream,$untl) =@_;
249-
$proc->pump_nb();
250-
while (1)
251-
{
252-
lastif$$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)

[8]ページ先頭

©2009-2025 Movatter.jp