diff options
| author | Noah Misch | 2024-09-18 02:53:11 +0000 |
|---|---|---|
| committer | Noah Misch | 2024-09-18 02:54:26 +0000 |
| commit | 507b72bd9f7de95a224ae5af8797f42bfce1ed9c (patch) | |
| tree | 949db3287d2bc0cda064b7763b3d013d3215339e /src/test | |
| parent | 011659d498357f4c0f243816140b09085422d309 (diff) | |
Don't enter parallel mode when holding interrupts.
Doing so caused the leader to hang in wait_event=ParallelFinish, which
required an immediate shutdown to resolve. Back-patch to v12 (all
supported versions).
Francesco Degrassi
Discussion: https://postgr.es/m/CAC-SaSzHUKT=vZJ8MPxYdC_URPfax+yoA1hKTcF4ROz_Q6z0_Q@mail.gmail.com
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/regress/expected/select_parallel.out | 24 | ||||
| -rw-r--r-- | src/test/regress/sql/select_parallel.sql | 31 |
2 files changed, 55 insertions, 0 deletions
diff --git a/src/test/regress/expected/select_parallel.out b/src/test/regress/expected/select_parallel.out index c5943e55a0e..7df008c3c3f 100644 --- a/src/test/regress/expected/select_parallel.out +++ b/src/test/regress/expected/select_parallel.out @@ -1207,3 +1207,27 @@ reset force_parallel_mode; drop function set_and_report_role(); drop function set_role_and_error(int); drop role regress_parallel_worker; +-- don't freeze in ParallelFinish while holding an LWLock +BEGIN; +CREATE FUNCTION my_cmp (int4, int4) +RETURNS int LANGUAGE sql AS +$$ + SELECT + CASE WHEN $1 < $2 THEN -1 + WHEN $1 > $2 THEN 1 + ELSE 0 + END; +$$; +CREATE TABLE parallel_hang (i int4); +INSERT INTO parallel_hang + (SELECT * FROM generate_series(1, 400) gs); +CREATE OPERATOR CLASS int4_custom_ops FOR TYPE int4 USING btree AS + OPERATOR 1 < (int4, int4), OPERATOR 2 <= (int4, int4), + OPERATOR 3 = (int4, int4), OPERATOR 4 >= (int4, int4), + OPERATOR 5 > (int4, int4), FUNCTION 1 my_cmp(int4, int4); +CREATE UNIQUE INDEX parallel_hang_idx + ON parallel_hang + USING btree (i int4_custom_ops); +SET force_parallel_mode = on; +DELETE FROM parallel_hang WHERE 380 <= i AND i <= 420; +ROLLBACK; diff --git a/src/test/regress/sql/select_parallel.sql b/src/test/regress/sql/select_parallel.sql index a31770cfc34..2f7f7563d21 100644 --- a/src/test/regress/sql/select_parallel.sql +++ b/src/test/regress/sql/select_parallel.sql @@ -477,3 +477,34 @@ reset force_parallel_mode; drop function set_and_report_role(); drop function set_role_and_error(int); drop role regress_parallel_worker; + +-- don't freeze in ParallelFinish while holding an LWLock +BEGIN; + +CREATE FUNCTION my_cmp (int4, int4) +RETURNS int LANGUAGE sql AS +$$ + SELECT + CASE WHEN $1 < $2 THEN -1 + WHEN $1 > $2 THEN 1 + ELSE 0 + END; +$$; + +CREATE TABLE parallel_hang (i int4); +INSERT INTO parallel_hang + (SELECT * FROM generate_series(1, 400) gs); + +CREATE OPERATOR CLASS int4_custom_ops FOR TYPE int4 USING btree AS + OPERATOR 1 < (int4, int4), OPERATOR 2 <= (int4, int4), + OPERATOR 3 = (int4, int4), OPERATOR 4 >= (int4, int4), + OPERATOR 5 > (int4, int4), FUNCTION 1 my_cmp(int4, int4); + +CREATE UNIQUE INDEX parallel_hang_idx + ON parallel_hang + USING btree (i int4_custom_ops); + +SET force_parallel_mode = on; +DELETE FROM parallel_hang WHERE 380 <= i AND i <= 420; + +ROLLBACK; |
