blob: 37b767e0e2bf4e96a0b24fc0ff42739a717fbd48 [file] [log] [blame]
--
-- Test queries that can lead to deadlock. This is in a different file to
-- isolate the test & quickly identify it if ICG doesn't complete for a very
-- long time.
--
create schema deadlock;
set search_path = deadlock;
-- Test "Motion deadlock hazard" when Joins have Motions in both branches.
-- see src/backend/cdb/cdbllize.c
create table l (i int, j int) distributed by (i);
create table r (i int, j int) distributed by (j);
-- Sanity check the distribution hash algorithm to make sure value (1) and
-- value (2) are stored in different segments.
create table sanity_check_distribution (j int) distributed by (j);
insert into sanity_check_distribution values(1),(2); -- Values of l.j + 1 and r.j.
select count(distinct gp_segment_id) from sanity_check_distribution; -- should be 2.
insert into l select i, 1 from generate_series(1, 100000) i; -- one segment destination
insert into r select i, 1 from generate_series(1, 100000) i; -- one segment destination
set enable_mergejoin = off;
set enable_hashjoin = on;
set enable_nestloop = off;
-- Pick HJ
select count(*) from gp_dist_random('l') left join gp_dist_random('r') on l.j + 1 = r.j;
set enable_mergejoin = off;
set enable_hashjoin = off;
set enable_nestloop = on;
-- Pick NLJ, gp_dist_random() forces MJ
select count(*) from l left join r on l.j + 1 = r.j;
set enable_mergejoin = on;
set enable_hashjoin = off;
set enable_nestloop = off;
-- Pick MJ
select count(*) from gp_dist_random('l') left outer join gp_dist_random('r') on l.j + 1 = r.j;
drop schema if exists deadlock cascade;
-- Check gp_dist_wait_status not failing within a transaction
-- Github issue: https://github.com/greenplum-db/gpdb/issues/13795
BEGIN;
select * from gp_dist_wait_status();
COMMIT;