mirror of
https://github.com/postgres/postgres.git
synced 2026-05-22 02:08:24 -04:00
Make plpgsql_trap test more robust and less resource-intensive.
We were using "select count(*) into x from generate_series(1, 1_000_000_000_000)" to waste one second waiting for a statement timeout trap. Aside from consuming CPU to little purpose, this could easily eat several hundred MB of temporary file space, which has been observed to cause out-of-disk-space errors in the buildfarm. Let's just use "pg_sleep(10)", which is far less resource-intensive. Also update the "when others" exception handler so that if it does ever again trap an error, it will tell us what error. The cause of these intermittent buildfarm failures had been obscure for awhile. Discussion: https://postgr.es/m/557992.1776779694@sss.pgh.pa.us Backpatch-through: 14
This commit is contained in:
parent
e528bfe971
commit
496169e525
2 changed files with 5 additions and 9 deletions
|
|
@ -138,13 +138,11 @@ select * from foo;
|
|||
drop table foo;
|
||||
create function trap_timeout() returns void as $$
|
||||
begin
|
||||
declare x int;
|
||||
begin
|
||||
-- we assume this will take longer than 1 second:
|
||||
select count(*) into x from generate_series(1, 1_000_000_000_000);
|
||||
perform pg_sleep(10);
|
||||
exception
|
||||
when others then
|
||||
raise notice 'caught others?';
|
||||
raise notice 'caught others: %', sqlerrm;
|
||||
when query_canceled then
|
||||
raise notice 'nyeah nyeah, can''t stop me';
|
||||
end;
|
||||
|
|
@ -157,7 +155,7 @@ set statement_timeout to 1000;
|
|||
select trap_timeout();
|
||||
NOTICE: nyeah nyeah, can't stop me
|
||||
ERROR: end of function
|
||||
CONTEXT: PL/pgSQL function trap_timeout() line 15 at RAISE
|
||||
CONTEXT: PL/pgSQL function trap_timeout() line 13 at RAISE
|
||||
rollback;
|
||||
-- Test for pass-by-ref values being stored in proper context
|
||||
create function test_variable_storage() returns text as $$
|
||||
|
|
|
|||
|
|
@ -85,13 +85,11 @@ drop table foo;
|
|||
|
||||
create function trap_timeout() returns void as $$
|
||||
begin
|
||||
declare x int;
|
||||
begin
|
||||
-- we assume this will take longer than 1 second:
|
||||
select count(*) into x from generate_series(1, 1_000_000_000_000);
|
||||
perform pg_sleep(10);
|
||||
exception
|
||||
when others then
|
||||
raise notice 'caught others?';
|
||||
raise notice 'caught others: %', sqlerrm;
|
||||
when query_canceled then
|
||||
raise notice 'nyeah nyeah, can''t stop me';
|
||||
end;
|
||||
|
|
|
|||
Loading…
Reference in a new issue