提交 5104ca08 编写于 作者: H Heikki Linnakangas

Replace gpfaultinject binary with gp_inject_fault extension in tests.

This replaces all places in regression tests, where the gpfaultinject binary
was used, with the SQL-callable function in the new gp_inject_fault
extension. The SQL function is more forgivin about the dev environemnt, and
doesn't need gpfaultinject to be in $PATH, for starters. Also, it's just
good to harmonize and have just one way of injecting faults.

More uses of gpfaultinject remain in the TINC tests, so we cannot get rid
of it any time soon, but this is a step in that direction, anyway.
上级 f52fbe57
......@@ -4,6 +4,7 @@
* Parameter combination tests
* Improve code coverage tests
*/
CREATE EXTENSION IF NOT EXISTS gp_inject_fault;
CREATE SCHEMA ic_udp_test;
SET search_path = ic_udp_test;
-- Prepare some tables
......@@ -461,7 +462,19 @@ NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column(s) named 'c1
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
begin;
declare ic_test_cursor_c1 cursor for select * from ic_test_1;
\! gpfaultinjector -q -f interconnect_stop_ack_is_lost -y reset -s 1
\! gpfaultinjector -q -f interconnect_stop_ack_is_lost -y skip -s 1
select gp_inject_fault('interconnect_stop_ack_is_lost', 'reset', 1);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select gp_inject_fault('interconnect_stop_ack_is_lost', 'skip', 1);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
commit;
drop table ic_test_1;
CREATE EXTENSION IF NOT EXISTS gp_inject_fault;
drop table if exists _tmp_table;
NOTICE: table "_tmp_table" does not exist, skipping
create table _tmp_table (i1 int, i2 int, i3 int, i4 int);
......@@ -8,15 +9,21 @@ insert into _tmp_table select i, i % 100, i % 10000, i % 75 from generate_series
set statement_mem="2MB";
set gp_enable_mk_sort=on;
set gp_cte_sharing=on;
\! gpfaultinjector -f execsort_mksort_mergeruns -y reset --seg_dbid 2
20170125:11:06:26:002993 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execsort_mksort_mergeruns -y reset --seg_dbid 2
20170125:11:06:26:002993 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:26:002993 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execsort_mksort_mergeruns', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
-- set QueryFinishPending=true in sort mergeruns. This will stop sort and set result_tape to NULL
\! gpfaultinjector -f execsort_mksort_mergeruns -y finish_pending --seg_dbid 2
20170125:11:06:26:003005 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execsort_mksort_mergeruns -y finish_pending --seg_dbid 2
20170125:11:06:26:003005 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:26:003005 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execsort_mksort_mergeruns', 'finish_pending', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
-- return results although sort will be interrupted in one of the segments
select DISTINCT S from (select row_number() over(partition by i1 order by i2) AS T, count(*) over (partition by i1) AS S from _tmp_table) AS TMP;
s
......@@ -24,11 +31,13 @@ select DISTINCT S from (select row_number() over(partition by i1 order by i2) AS
1
(1 row)
\! gpfaultinjector -f execsort_mksort_mergeruns -y status --seg_dbid 2
20170125:11:06:27:003020 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execsort_mksort_mergeruns -y status --seg_dbid 2
20170125:11:06:27:003020 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:27:003020 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'execsort_mksort_mergeruns' fault type:'finish_pending' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'completed' num times hit:'1'
20170125:11:06:27:003020 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execsort_mksort_mergeruns', 'status', 2);
NOTICE: Success: fault name:'execsort_mksort_mergeruns' fault type:'finish_pending' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'completed' num times hit:'1'
gp_inject_fault
-----------------
t
(1 row)
-- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed,
-- where the child is a Sort node
drop table if exists testsisc;
......@@ -42,16 +51,22 @@ insert into testsisc select i, i % 1000, i % 100000, i % 75 from
set gp_resqueue_print_operator_memory_limits=on;
set statement_mem='2MB';
set gp_enable_mk_sort=off;
\! gpfaultinjector -f execshare_input_next -y reset --seg_dbid 2
20170125:11:06:27:003032 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execshare_input_next -y reset --seg_dbid 2
20170125:11:06:27:003032 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:27:003032 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execshare_input_next', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
-- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple.
-- This will eagerly free the memory context of shared input scan's child node.
\! gpfaultinjector -f execshare_input_next -y finish_pending --seg_dbid 2
20170125:11:06:27:003047 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execshare_input_next -y finish_pending --seg_dbid 2
20170125:11:06:27:003047 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:27:003047 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execshare_input_next', 'finish_pending', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select COUNT(i2) over(partition by i1)
from testsisc
LIMIT 2;
......@@ -61,24 +76,32 @@ LIMIT 2;
1
(2 rows)
\! gpfaultinjector -f execshare_input_next -y status --seg_dbid 2
20170125:11:06:28:003059 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execshare_input_next -y status --seg_dbid 2
20170125:11:06:28:003059 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:28:003059 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'execshare_input_next' fault type:'finish_pending' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'completed' num times hit:'1'
20170125:11:06:28:003059 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execshare_input_next', 'status', 2);
NOTICE: Success: fault name:'execshare_input_next' fault type:'finish_pending' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'completed' num times hit:'1'
gp_inject_fault
-----------------
t
(1 row)
-- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed,
-- where the child is a Sort node and sort_mk algorithm is used
set gp_enable_mk_sort=on;
\! gpfaultinjector -f execshare_input_next -y reset --seg_dbid 2
20170125:11:06:28:003071 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execshare_input_next -y reset --seg_dbid 2
20170125:11:06:28:003071 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:28:003071 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execshare_input_next', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
-- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple.
-- This will eagerly free the memory context of shared input scan's child node.
\! gpfaultinjector -f execshare_input_next -y finish_pending --seg_dbid 2
20170125:11:06:28:003083 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execshare_input_next -y finish_pending --seg_dbid 2
20170125:11:06:28:003083 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:28:003083 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execshare_input_next', 'finish_pending', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select COUNT(i2) over(partition by i1)
from testsisc
LIMIT 2;
......@@ -88,18 +111,26 @@ LIMIT 2;
1
(2 rows)
\! gpfaultinjector -f execshare_input_next -y status --seg_dbid 2
20170125:11:06:28:003095 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execshare_input_next -y status --seg_dbid 2
20170125:11:06:28:003095 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:28:003095 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'execshare_input_next' fault type:'finish_pending' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'completed' num times hit:'1'
20170125:11:06:28:003095 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execshare_input_next', 'status', 2);
NOTICE: Success: fault name:'execshare_input_next' fault type:'finish_pending' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'completed' num times hit:'1'
gp_inject_fault
-----------------
t
(1 row)
reset gp_enable_mk_sort;
-- Disable faultinjectors
\! gpfaultinjector -f execsort_mksort_mergeruns -y reset --seg_dbid 2
20170125:11:06:29:003107 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execsort_mksort_mergeruns -y reset --seg_dbid 2
20170125:11:06:29:003107 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:29:003107 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
\! gpfaultinjector -f execshare_input_next -y reset --seg_dbid 2
20170125:11:06:29:003119 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execshare_input_next -y reset --seg_dbid 2
20170125:11:06:29:003119 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:29:003119 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execsort_mksort_mergeruns', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select gp_inject_fault('execshare_input_next', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
CREATE EXTENSION IF NOT EXISTS gp_inject_fault;
drop table if exists _tmp_table;
NOTICE: table "_tmp_table" does not exist, skipping
create table _tmp_table (i1 int, i2 int, i3 int, i4 int);
......@@ -8,15 +9,21 @@ insert into _tmp_table select i, i % 100, i % 10000, i % 75 from generate_series
set statement_mem="2MB";
set gp_enable_mk_sort=on;
set gp_cte_sharing=on;
\! gpfaultinjector -f execsort_mksort_mergeruns -y reset --seg_dbid 2
20170125:11:06:26:002993 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execsort_mksort_mergeruns -y reset --seg_dbid 2
20170125:11:06:26:002993 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:26:002993 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execsort_mksort_mergeruns', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
-- set QueryFinishPending=true in sort mergeruns. This will stop sort and set result_tape to NULL
\! gpfaultinjector -f execsort_mksort_mergeruns -y finish_pending --seg_dbid 2
20170125:11:06:26:003005 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execsort_mksort_mergeruns -y finish_pending --seg_dbid 2
20170125:11:06:26:003005 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:26:003005 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execsort_mksort_mergeruns', 'finish_pending', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
-- return results although sort will be interrupted in one of the segments
select DISTINCT S from (select row_number() over(partition by i1 order by i2) AS T, count(*) over (partition by i1) AS S from _tmp_table) AS TMP;
s
......@@ -24,11 +31,13 @@ select DISTINCT S from (select row_number() over(partition by i1 order by i2) AS
1
(1 row)
\! gpfaultinjector -f execsort_mksort_mergeruns -y status --seg_dbid 2
20170125:11:06:27:003020 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execsort_mksort_mergeruns -y status --seg_dbid 2
20170125:11:06:27:003020 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:27:003020 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'execsort_mksort_mergeruns' fault type:'finish_pending' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'completed' num times hit:'1'
20170125:11:06:27:003020 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execsort_mksort_mergeruns', 'status', 2);
NOTICE: Success: fault name:'execsort_mksort_mergeruns' fault type:'finish_pending' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'completed' num times hit:'1'
gp_inject_fault
-----------------
t
(1 row)
-- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed,
-- where the child is a Sort node
drop table if exists testsisc;
......@@ -42,16 +51,22 @@ insert into testsisc select i, i % 1000, i % 100000, i % 75 from
set gp_resqueue_print_operator_memory_limits=on;
set statement_mem='2MB';
set gp_enable_mk_sort=off;
\! gpfaultinjector -f execshare_input_next -y reset --seg_dbid 2
20170125:11:06:27:003032 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execshare_input_next -y reset --seg_dbid 2
20170125:11:06:27:003032 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:27:003032 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execshare_input_next', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
-- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple.
-- This will eagerly free the memory context of shared input scan's child node.
\! gpfaultinjector -f execshare_input_next -y finish_pending --seg_dbid 2
20170125:11:06:27:003047 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execshare_input_next -y finish_pending --seg_dbid 2
20170125:11:06:27:003047 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:27:003047 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execshare_input_next', 'finish_pending', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select COUNT(i2) over(partition by i1)
from testsisc
LIMIT 2;
......@@ -61,24 +76,32 @@ LIMIT 2;
1
(2 rows)
\! gpfaultinjector -f execshare_input_next -y status --seg_dbid 2
20170125:11:16:02:005049 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execshare_input_next -y status --seg_dbid 2
20170125:11:16:02:005049 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:16:02:005049 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'execshare_input_next' fault type:'finish_pending' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'set' num times hit:'0'
20170125:11:16:02:005049 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execshare_input_next', 'status', 2);
NOTICE: Success: fault name:'execshare_input_next' fault type:'finish_pending' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'set' num times hit:'0'
gp_inject_fault
-----------------
t
(1 row)
-- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed,
-- where the child is a Sort node and sort_mk algorithm is used
set gp_enable_mk_sort=on;
\! gpfaultinjector -f execshare_input_next -y reset --seg_dbid 2
20170125:11:06:28:003071 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execshare_input_next -y reset --seg_dbid 2
20170125:11:06:28:003071 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:28:003071 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execshare_input_next', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
-- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple.
-- This will eagerly free the memory context of shared input scan's child node.
\! gpfaultinjector -f execshare_input_next -y finish_pending --seg_dbid 2
20170125:11:06:28:003083 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execshare_input_next -y finish_pending --seg_dbid 2
20170125:11:06:28:003083 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:28:003083 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execshare_input_next', 'finish_pending', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select COUNT(i2) over(partition by i1)
from testsisc
LIMIT 2;
......@@ -88,18 +111,26 @@ LIMIT 2;
1
(2 rows)
\! gpfaultinjector -f execshare_input_next -y status --seg_dbid 2
20170125:11:16:03:005085 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execshare_input_next -y status --seg_dbid 2
20170125:11:16:03:005085 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:16:03:005085 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'execshare_input_next' fault type:'finish_pending' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'set' num times hit:'0'
20170125:11:16:03:005085 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execshare_input_next', 'status', 2);
NOTICE: Success: fault name:'execshare_input_next' fault type:'finish_pending' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'set' num times hit:'0'
gp_inject_fault
-----------------
t
(1 row)
reset gp_enable_mk_sort;
-- Disable faultinjectors
\! gpfaultinjector -f execsort_mksort_mergeruns -y reset --seg_dbid 2
20170125:11:06:29:003107 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execsort_mksort_mergeruns -y reset --seg_dbid 2
20170125:11:06:29:003107 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:29:003107 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
\! gpfaultinjector -f execshare_input_next -y reset --seg_dbid 2
20170125:11:06:29:003119 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f execshare_input_next -y reset --seg_dbid 2
20170125:11:06:29:003119 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:29:003119 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('execsort_mksort_mergeruns', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select gp_inject_fault('execshare_input_next', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
--
-- Tests the spill files disk space accounting mechanism
--
CREATE EXTENSION IF NOT EXISTS gp_inject_fault;
-- check segspace before test
reset statement_mem;
select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used_diskspace;
......@@ -28,14 +29,20 @@ ANALYZE segspace_test_hj_skew;
--
------------ Interrupting SELECT query that spills -------------------
-- enable the fault injector
\! gpfaultinjector -f exec_hashjoin_new_batch -y reset --seg_dbid 2
20170125:11:06:30:003151 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f exec_hashjoin_new_batch -y reset --seg_dbid 2
20170125:11:06:30:003151 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:30:003151 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
\! gpfaultinjector -f exec_hashjoin_new_batch -y interrupt --seg_dbid 2
20170125:11:06:30:003163 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f exec_hashjoin_new_batch -y interrupt --seg_dbid 2
20170125:11:06:30:003163 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:30:003163 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('exec_hashjoin_new_batch', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select gp_inject_fault('exec_hashjoin_new_batch', 'interrupt', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
set gp_workfile_type_hashjoin=buffile;
set statement_mem=2048;
set gp_autostats_mode = none;
......@@ -44,11 +51,13 @@ begin;
SELECT t1.* FROM segspace_test_hj_skew AS t1, segspace_test_hj_skew AS t2 WHERE t1.i1=t2.i2;
ERROR: canceling MPP operation (seg0 slice2 127.0.0.1:25432 pid=26876)
rollback;
\! gpfaultinjector -f exec_hashjoin_new_batch -y status --seg_dbid 2
20170125:11:06:31:003178 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f exec_hashjoin_new_batch -y status --seg_dbid 2
20170125:11:06:31:003178 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:31:003178 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'exec_hashjoin_new_batch' fault type:'interrupt' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'completed' num times hit:'1'
20170125:11:06:31:003178 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('exec_hashjoin_new_batch', 'status', 2);
NOTICE: Success: fault name:'exec_hashjoin_new_batch' fault type:'interrupt' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'completed' num times hit:'1'
gp_inject_fault
-----------------
t
(1 row)
-- check used segspace after test
select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used_diskspace;
max | min
......@@ -84,24 +93,32 @@ set statement_mem=2048;
set gp_autostats_mode = none;
set gp_hashjoin_metadata_memory_percent=0;
-- enable the fault injector
\! gpfaultinjector -f exec_hashjoin_new_batch -y reset --seg_dbid 2
20170125:11:06:32:003198 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f exec_hashjoin_new_batch -y reset --seg_dbid 2
20170125:11:06:32:003198 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:32:003198 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
\! gpfaultinjector -f exec_hashjoin_new_batch -y interrupt --seg_dbid 2
20170125:11:06:32:003210 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f exec_hashjoin_new_batch -y interrupt --seg_dbid 2
20170125:11:06:32:003210 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:32:003210 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('exec_hashjoin_new_batch', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select gp_inject_fault('exec_hashjoin_new_batch', 'interrupt', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
begin;
insert into segspace_t1_created
SELECT t1.* FROM segspace_test_hj_skew AS t1, segspace_test_hj_skew AS t2 WHERE t1.i1=t2.i2;
ERROR: canceling MPP operation (seg0 127.0.0.1:25432 pid=26876)
rollback;
\! gpfaultinjector -f exec_hashjoin_new_batch -y status --seg_dbid 2
20170125:11:06:33:003224 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f exec_hashjoin_new_batch -y status --seg_dbid 2
20170125:11:06:33:003224 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:33:003224 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'exec_hashjoin_new_batch' fault type:'interrupt' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'completed' num times hit:'1'
20170125:11:06:33:003224 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('exec_hashjoin_new_batch', 'status', 2);
NOTICE: Success: fault name:'exec_hashjoin_new_batch' fault type:'interrupt' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'completed' num times hit:'1'
gp_inject_fault
-----------------
t
(1 row)
-- check used segspace after test
select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used_diskspace;
max | min
......@@ -133,14 +150,20 @@ set statement_mem=2048;
set gp_autostats_mode = none;
set gp_hashjoin_metadata_memory_percent=0;
-- enable the fault injector
\! gpfaultinjector -f exec_hashjoin_new_batch -y reset --seg_dbid 2
20170125:11:06:34:003244 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f exec_hashjoin_new_batch -y reset --seg_dbid 2
20170125:11:06:34:003244 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:34:003244 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
\! gpfaultinjector -f exec_hashjoin_new_batch -y interrupt --seg_dbid 2
20170125:11:06:35:003256 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f exec_hashjoin_new_batch -y interrupt --seg_dbid 2
20170125:11:06:35:003256 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:35:003256 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('exec_hashjoin_new_batch', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select gp_inject_fault('exec_hashjoin_new_batch', 'interrupt', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
begin;
create table segspace_t1_created AS
SELECT t1.* FROM segspace_test_hj_skew AS t1, segspace_test_hj_skew AS t2 WHERE t1.i1=t2.i2;
......@@ -148,11 +171,13 @@ NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column(s) named 'i1
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
ERROR: canceling MPP operation (seg0 127.0.0.1:25432 pid=26876)
rollback;
\! gpfaultinjector -f exec_hashjoin_new_batch -y status --seg_dbid 2
20170125:11:06:35:003270 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f exec_hashjoin_new_batch -y status --seg_dbid 2
20170125:11:06:35:003270 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:35:003270 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'exec_hashjoin_new_batch' fault type:'interrupt' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'completed' num times hit:'1'
20170125:11:06:35:003270 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('exec_hashjoin_new_batch', 'status', 2);
NOTICE: Success: fault name:'exec_hashjoin_new_batch' fault type:'interrupt' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'completed' num times hit:'1'
gp_inject_fault
-----------------
t
(1 row)
-- check used segspace after test
select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used_diskspace;
max | min
......@@ -194,14 +219,20 @@ set gp_resqueue_print_operator_memory_limits=on;
set gp_enable_mk_sort=on;
set gp_cte_sharing=on;
-- enable the fault injector
\! gpfaultinjector -f workfile_write_failure -y reset --seg_dbid 2
20170125:11:06:37:003290 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_write_failure -y reset --seg_dbid 2
20170125:11:06:37:003290 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:37:003290 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
\! gpfaultinjector -f workfile_write_failure -y error --seg_dbid 2
20170125:11:06:37:003302 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_write_failure -y error --seg_dbid 2
20170125:11:06:37:003302 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:37:003302 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('workfile_write_failure', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select gp_inject_fault('workfile_write_failure', 'error', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
-- LEAK in UPDATE: update with sisc xslice sort
update foo set j=m.cc1 from (
with ctesisc as
......@@ -210,11 +241,13 @@ update foo set j=m.cc1 from (
from ctesisc as t1, ctesisc as t2
where t1.i1 = t2.i2 ) as m;
ERROR: fault triggered, fault name:'workfile_write_failure' fault type:'error' (seg0 slice3 127.0.0.1:25432 pid=3175)
\! gpfaultinjector -f exec_hashjoin_new_batch -y status --seg_dbid 2
20170125:11:06:38:003328 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f exec_hashjoin_new_batch -y status --seg_dbid 2
20170125:11:06:38:003328 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:38:003328 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'exec_hashjoin_new_batch' fault type:'interrupt' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'completed' num times hit:'1'
20170125:11:06:38:003328 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('exec_hashjoin_new_batch', 'status', 2);
NOTICE: Success: fault name:'exec_hashjoin_new_batch' fault type:'interrupt' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'completed' num times hit:'1'
gp_inject_fault
-----------------
t
(1 row)
select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used_diskspace;
max | min
-----+-----
......@@ -257,25 +290,33 @@ insert into foo select i, i % 1000 from
(select count(*) as nsegments from gp_segment_configuration where role='p' and content >= 0) foo) bar;
set statement_mem=1024; -- 1mb for 3 segment to get leak.
-- enable the fault injector
\! gpfaultinjector -f workfile_write_failure -y reset --seg_dbid 2
20170125:11:06:39:003348 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_write_failure -y reset --seg_dbid 2
20170125:11:06:39:003348 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:39:003348 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
\! gpfaultinjector -f workfile_write_failure -y error --seg_dbid 2
20170125:11:06:39:003360 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_write_failure -y error --seg_dbid 2
20170125:11:06:39:003360 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:39:003360 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('workfile_write_failure', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select gp_inject_fault('workfile_write_failure', 'error', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
-- LEAK in DELETE with APPEND ONLY tables
delete from testsisc using (
select *
from foo
) src where testsisc.i1 = src.i;
ERROR: fault triggered, fault name:'workfile_write_failure' fault type:'error' (seg0 127.0.0.1:25432 pid=3143)
\! gpfaultinjector -f exec_hashjoin_new_batch -y status --seg_dbid 2
20170125:11:06:39:003374 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f exec_hashjoin_new_batch -y status --seg_dbid 2
20170125:11:06:39:003374 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:39:003374 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'exec_hashjoin_new_batch' fault type:'interrupt' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'completed' num times hit:'1'
20170125:11:06:39:003374 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('exec_hashjoin_new_batch', 'status', 2);
NOTICE: Success: fault name:'exec_hashjoin_new_batch' fault type:'interrupt' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'completed' num times hit:'1'
gp_inject_fault
-----------------
t
(1 row)
select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used_diskspace;
max | min
-----+-----
......@@ -309,14 +350,20 @@ create table foo (c int, d int);
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'c' as the Greenplum Database data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
-- enable the fault injector
\! gpfaultinjector -f workfile_write_failure -y reset --seg_dbid 2
20170125:11:06:41:003394 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_write_failure -y reset --seg_dbid 2
20170125:11:06:41:003394 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:41:003394 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
\! gpfaultinjector -f workfile_write_failure -y error --seg_dbid 2
20170125:11:06:42:003406 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_write_failure -y error --seg_dbid 2
20170125:11:06:42:003406 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:42:003406 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('workfile_write_failure', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select gp_inject_fault('workfile_write_failure', 'error', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
-- expect to see leak if we hit error
update foo set d = i1 from (select i1,i2 from testsort order by i2) x;
ERROR: fault triggered, fault name:'workfile_write_failure' fault type:'error' (seg0 slice1 127.0.0.1:25432 pid=27014)
......@@ -327,11 +374,13 @@ select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used
0 | 0
(1 row)
\! gpfaultinjector -f exec_hashjoin_new_batch -y status --seg_dbid 2
20170125:11:06:42:003430 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f exec_hashjoin_new_batch -y status --seg_dbid 2
20170125:11:06:42:003430 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:42:003430 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'exec_hashjoin_new_batch' fault type:'interrupt' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'completed' num times hit:'1'
20170125:11:06:42:003430 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('exec_hashjoin_new_batch', 'status', 2);
NOTICE: Success: fault name:'exec_hashjoin_new_batch' fault type:'interrupt' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'completed' num times hit:'1'
gp_inject_fault
-----------------
t
(1 row)
-- Run the test without fault injection
-- expect to see leak if we hit error
update foo set d = i1 from (select i1,i2 from testsort order by i2) x;
......@@ -357,24 +406,32 @@ NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'c' as
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
-- expect to see leak if we hit error
-- enable the fault injector
\! gpfaultinjector -f workfile_write_failure -y reset --seg_dbid 2
20170125:11:06:45:003446 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_write_failure -y reset --seg_dbid 2
20170125:11:06:45:003446 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:45:003446 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
\! gpfaultinjector -f workfile_write_failure -y error --seg_dbid 2
20170125:11:06:45:003458 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_write_failure -y error --seg_dbid 2
20170125:11:06:45:003458 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:45:003458 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('workfile_write_failure', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select gp_inject_fault('workfile_write_failure', 'error', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
update foo set d = i1 from (with ctesisc as (select * from testsisc order by i2)
select * from
(select count(*) from ctesisc) x(a), ctesisc
where x.a = ctesisc.i1) y;
ERROR: fault triggered, fault name:'workfile_write_failure' fault type:'error' (seg0 slice1 127.0.0.1:25432 pid=3175)
\! gpfaultinjector -f exec_hashjoin_new_batch -y status --seg_dbid 2
20170125:11:06:45:003477 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f exec_hashjoin_new_batch -y status --seg_dbid 2
20170125:11:06:45:003477 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:45:003477 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'exec_hashjoin_new_batch' fault type:'interrupt' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'completed' num times hit:'1'
20170125:11:06:45:003477 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('exec_hashjoin_new_batch', 'status', 2);
NOTICE: Success: fault name:'exec_hashjoin_new_batch' fault type:'interrupt' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'completed' num times hit:'1'
gp_inject_fault
-----------------
t
(1 row)
-- check counter leak
select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used_diskspace;
max | min
......
CREATE EXTENSION IF NOT EXISTS gp_inject_fault;
DROP TABLE IF EXISTS test_zlib_hashjoin;
NOTICE: table "test_zlib_hashjoin" does not exist, skipping
CREATE TABLE test_zlib_hashjoin (i1 int, i2 int, i3 int, i4 int, i5 int, i6 int, i7 int, i8 int) WITH (APPENDONLY=true) DISTRIBUTED BY (i1) ;
......@@ -8,21 +9,29 @@ SET gp_workfile_type_hashjoin=bfz;
SET gp_workfile_compress_algorithm=zlib;
SET statement_mem=5000;
--Fail after workfile creation and before add it to workfile set
\! gpfaultinjector -f workfile_creation_failure -y reset --seg_dbid 2
20170125:11:06:19:002833 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_creation_failure -y reset --seg_dbid 2
20170125:11:06:19:002833 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:19:002833 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
\! gpfaultinjector -f workfile_creation_failure -y error --seg_dbid 2
20170125:11:06:19:002845 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_creation_failure -y error --seg_dbid 2
20170125:11:06:19:002845 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:19:002845 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('workfile_creation_failure', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select gp_inject_fault('workfile_creation_failure', 'error', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
SELECT COUNT(t1.*) FROM test_zlib_hashjoin AS t1, test_zlib_hashjoin AS t2 WHERE t1.i1=t2.i2;
ERROR: fault triggered, fault name:'workfile_creation_failure' fault type:'error' (seg0 slice2 127.0.0.1:25432 pid=2829)
\! gpfaultinjector -f workfile_creation_failure -y status --seg_dbid 2
20170125:11:06:20:002864 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_creation_failure -y status --seg_dbid 2
20170125:11:06:20:002864 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:20:002864 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'workfile_creation_failure' fault type:'error' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'completed' num times hit:'1'
20170125:11:06:20:002864 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('workfile_creation_failure', 'status', 2);
NOTICE: Success: fault name:'workfile_creation_failure' fault type:'error' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'completed' num times hit:'1'
gp_inject_fault
-----------------
t
(1 row)
RESET statement_mem;
DROP TABLE IF EXISTS test_zlib_hagg;
NOTICE: table "test_zlib_hagg" does not exist, skipping
......@@ -34,26 +43,37 @@ INSERT INTO test_zlib_hagg SELECT i,i,i,i FROM
(select count(*) as nsegments from gp_segment_configuration where role='p' and content >= 0) foo) bar;
SET statement_mem=2000;
--Fail after workfile creation and before add it to workfile set
\! gpfaultinjector -f workfile_creation_failure -y reset --seg_dbid 2
20170125:11:06:21:002876 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_creation_failure -y reset --seg_dbid 2
20170125:11:06:21:002876 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:21:002876 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
\! gpfaultinjector -f workfile_creation_failure -y error --seg_dbid 2
20170125:11:06:21:002891 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_creation_failure -y error --seg_dbid 2
20170125:11:06:21:002891 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:21:002891 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('workfile_creation_failure', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select gp_inject_fault('workfile_creation_failure', 'error', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
SELECT MAX(i1) FROM test_zlib_hagg GROUP BY i2;
ERROR: fault triggered, fault name:'workfile_creation_failure' fault type:'error' (seg0 slice2 127.0.0.1:25432 pid=2829)
\! gpfaultinjector -f workfile_creation_failure -y status --seg_dbid 2
20170125:11:06:22:002907 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_creation_failure -y status --seg_dbid 2
20170125:11:06:22:002907 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:22:002907 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'workfile_creation_failure' fault type:'error' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'completed' num times hit:'1'
20170125:11:06:22:002907 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('workfile_creation_failure', 'status', 2);
NOTICE: Success: fault name:'workfile_creation_failure' fault type:'error' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'completed' num times hit:'1'
gp_inject_fault
-----------------
t
(1 row)
-- Reset faultinjectors
\! gpfaultinjector -f workfile_creation_failure -y reset --seg_dbid 2
20170125:11:06:22:002919 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_creation_failure -y reset --seg_dbid 2
20170125:11:06:22:002919 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:22:002919 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('workfile_creation_failure', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
create table t (i int, j text);
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'i' as the Greenplum Database data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
......@@ -76,14 +96,20 @@ EXCEPTION WHEN others THEN
end
$body$ language plpgsql;
-- Inject fault before we close workfile in ExecHashJoinNewBatch
\! gpfaultinjector -f workfile_hashjoin_failure -y reset --seg_dbid 2
20170125:11:06:24:002931 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_hashjoin_failure -y reset --seg_dbid 2
20170125:11:06:24:002931 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:24:002931 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
\! gpfaultinjector -f workfile_hashjoin_failure -y error --seg_dbid 2
20170125:11:06:24:002943 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_hashjoin_failure -y error --seg_dbid 2
20170125:11:06:24:002943 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:24:002943 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('workfile_creation_failure', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select gp_inject_fault('workfile_creation_failure', 'error', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
select FuncA();
NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column(s) named 'i' as the Greenplum Database data distribution key for this table.
HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew.
......@@ -99,15 +125,20 @@ select * from t1;
---+---
(0 rows)
\! gpfaultinjector -f workfile_hashjoin_failure -y status --seg_dbid 2
20170125:11:06:25:002955 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_hashjoin_failure -y status --seg_dbid 2
20170125:11:06:25:002955 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:25:002955 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-fault name:'workfile_hashjoin_failure' fault type:'error' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'10' fault injection state:'completed' num times hit:'1'
20170125:11:06:25:002955 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('workfile_creation_failure', 'status', 2);
NOTICE: Success: fault name:'workfile_creation_failure' fault type:'error' ddl statement:'' database name:'' table name:'' occurrence:'1' sleep time:'0' fault injection state:'completed' num times hit:'1'
gp_inject_fault
-----------------
t
(1 row)
drop function FuncA();
drop table t;
drop table t1;
\! gpfaultinjector -f workfile_hashjoin_failure -y reset --seg_dbid 2
20170125:11:06:26:002967 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Starting gpfaultinjector with args: -f workfile_hashjoin_failure -y reset --seg_dbid 2
20170125:11:06:26:002967 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-Injecting fault on content=0:dbid=2:mode=s:status=u
20170125:11:06:26:002967 gpfaultinjector:nikos-mac:narmenatzoglou-[INFO]:-DONE
select gp_inject_fault('workfile_creation_failure', 'reset', 2);
NOTICE: Success:
gp_inject_fault
-----------------
t
(1 row)
......@@ -87,10 +87,6 @@ s/overlaps existing partition "r\d+"/partition "r##########"/
m/Table "pg_temp_\d+.temp/
s/Table "pg_temp_\d+.temp/Table "pg_temp_#####/
# Mask out timestamp and whoami message for gpfaultinjector
m/^\d+.*gpfaultinjector.*-\[INFO\]:-/
s/^\d+.*gpfaultinjector.*-\[INFO\]:-//
# Mask out oid in error concurrent drop message
m/\d+ was concurrently dropped/
s/\d+ was concurrently dropped/##### was concurrently dropped/
......
......@@ -4,6 +4,8 @@
* Parameter combination tests
* Improve code coverage tests
*/
CREATE EXTENSION IF NOT EXISTS gp_inject_fault;
CREATE SCHEMA ic_udp_test;
SET search_path = ic_udp_test;
......@@ -194,7 +196,7 @@ drop table if exists ic_test_1;
create table ic_test_1 as select i as c1, i as c2 from generate_series(1, 100000) i;
begin;
declare ic_test_cursor_c1 cursor for select * from ic_test_1;
\! gpfaultinjector -q -f interconnect_stop_ack_is_lost -y reset -s 1
\! gpfaultinjector -q -f interconnect_stop_ack_is_lost -y skip -s 1
select gp_inject_fault('interconnect_stop_ack_is_lost', 'reset', 1);
select gp_inject_fault('interconnect_stop_ack_is_lost', 'skip', 1);
commit;
drop table ic_test_1;
CREATE EXTENSION IF NOT EXISTS gp_inject_fault;
drop table if exists _tmp_table;
create table _tmp_table (i1 int, i2 int, i3 int, i4 int);
insert into _tmp_table select i, i % 100, i % 10000, i % 75 from generate_series(0,99999) i;
......@@ -7,14 +9,14 @@ set statement_mem="2MB";
set gp_enable_mk_sort=on;
set gp_cte_sharing=on;
\! gpfaultinjector -f execsort_mksort_mergeruns -y reset --seg_dbid 2
select gp_inject_fault('execsort_mksort_mergeruns', 'reset', 2);
-- set QueryFinishPending=true in sort mergeruns. This will stop sort and set result_tape to NULL
\! gpfaultinjector -f execsort_mksort_mergeruns -y finish_pending --seg_dbid 2
select gp_inject_fault('execsort_mksort_mergeruns', 'finish_pending', 2);
-- return results although sort will be interrupted in one of the segments
select DISTINCT S from (select row_number() over(partition by i1 order by i2) AS T, count(*) over (partition by i1) AS S from _tmp_table) AS TMP;
\! gpfaultinjector -f execsort_mksort_mergeruns -y status --seg_dbid 2
select gp_inject_fault('execsort_mksort_mergeruns', 'status', 2);
-- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed,
-- where the child is a Sort node
......@@ -28,34 +30,34 @@ set gp_resqueue_print_operator_memory_limits=on;
set statement_mem='2MB';
set gp_enable_mk_sort=off;
\! gpfaultinjector -f execshare_input_next -y reset --seg_dbid 2
select gp_inject_fault('execshare_input_next', 'reset', 2);
-- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple.
-- This will eagerly free the memory context of shared input scan's child node.
\! gpfaultinjector -f execshare_input_next -y finish_pending --seg_dbid 2
select gp_inject_fault('execshare_input_next', 'finish_pending', 2);
select COUNT(i2) over(partition by i1)
from testsisc
LIMIT 2;
\! gpfaultinjector -f execshare_input_next -y status --seg_dbid 2
select gp_inject_fault('execshare_input_next', 'status', 2);
-- test if shared input scan deletes memory correctly when QueryFinishPending and its child has been eagerly freed,
-- where the child is a Sort node and sort_mk algorithm is used
set gp_enable_mk_sort=on;
\! gpfaultinjector -f execshare_input_next -y reset --seg_dbid 2
select gp_inject_fault('execshare_input_next', 'reset', 2);
-- Set QueryFinishPending to true after SharedInputScan has retrieved the first tuple.
-- This will eagerly free the memory context of shared input scan's child node.
\! gpfaultinjector -f execshare_input_next -y finish_pending --seg_dbid 2
select gp_inject_fault('execshare_input_next', 'finish_pending', 2);
select COUNT(i2) over(partition by i1)
from testsisc
LIMIT 2;
\! gpfaultinjector -f execshare_input_next -y status --seg_dbid 2
select gp_inject_fault('execshare_input_next', 'status', 2);
reset gp_enable_mk_sort;
-- Disable faultinjectors
\! gpfaultinjector -f execsort_mksort_mergeruns -y reset --seg_dbid 2
\! gpfaultinjector -f execshare_input_next -y reset --seg_dbid 2
select gp_inject_fault('execsort_mksort_mergeruns', 'reset', 2);
select gp_inject_fault('execshare_input_next', 'reset', 2);
......@@ -2,6 +2,8 @@
-- Tests the spill files disk space accounting mechanism
--
CREATE EXTENSION IF NOT EXISTS gp_inject_fault;
-- check segspace before test
reset statement_mem;
select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used_diskspace;
......@@ -31,8 +33,8 @@ ANALYZE segspace_test_hj_skew;
------------ Interrupting SELECT query that spills -------------------
-- enable the fault injector
\! gpfaultinjector -f exec_hashjoin_new_batch -y reset --seg_dbid 2
\! gpfaultinjector -f exec_hashjoin_new_batch -y interrupt --seg_dbid 2
select gp_inject_fault('exec_hashjoin_new_batch', 'reset', 2);
select gp_inject_fault('exec_hashjoin_new_batch', 'interrupt', 2);
set gp_workfile_type_hashjoin=buffile;
set statement_mem=2048;
......@@ -43,7 +45,7 @@ begin;
SELECT t1.* FROM segspace_test_hj_skew AS t1, segspace_test_hj_skew AS t2 WHERE t1.i1=t2.i2;
rollback;
\! gpfaultinjector -f exec_hashjoin_new_batch -y status --seg_dbid 2
select gp_inject_fault('exec_hashjoin_new_batch', 'status', 2);
-- check used segspace after test
select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used_diskspace;
......@@ -71,8 +73,8 @@ set gp_autostats_mode = none;
set gp_hashjoin_metadata_memory_percent=0;
-- enable the fault injector
\! gpfaultinjector -f exec_hashjoin_new_batch -y reset --seg_dbid 2
\! gpfaultinjector -f exec_hashjoin_new_batch -y interrupt --seg_dbid 2
select gp_inject_fault('exec_hashjoin_new_batch', 'reset', 2);
select gp_inject_fault('exec_hashjoin_new_batch', 'interrupt', 2);
begin;
......@@ -81,7 +83,7 @@ SELECT t1.* FROM segspace_test_hj_skew AS t1, segspace_test_hj_skew AS t2 WHERE
rollback;
\! gpfaultinjector -f exec_hashjoin_new_batch -y status --seg_dbid 2
select gp_inject_fault('exec_hashjoin_new_batch', 'status', 2);
-- check used segspace after test
select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used_diskspace;
......@@ -111,8 +113,8 @@ set gp_autostats_mode = none;
set gp_hashjoin_metadata_memory_percent=0;
-- enable the fault injector
\! gpfaultinjector -f exec_hashjoin_new_batch -y reset --seg_dbid 2
\! gpfaultinjector -f exec_hashjoin_new_batch -y interrupt --seg_dbid 2
select gp_inject_fault('exec_hashjoin_new_batch', 'reset', 2);
select gp_inject_fault('exec_hashjoin_new_batch', 'interrupt', 2);
begin;
......@@ -121,7 +123,7 @@ SELECT t1.* FROM segspace_test_hj_skew AS t1, segspace_test_hj_skew AS t2 WHERE
rollback;
\! gpfaultinjector -f exec_hashjoin_new_batch -y status --seg_dbid 2
select gp_inject_fault('exec_hashjoin_new_batch', 'status', 2);
-- check used segspace after test
select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used_diskspace;
......@@ -157,8 +159,8 @@ set gp_enable_mk_sort=on;
set gp_cte_sharing=on;
-- enable the fault injector
\! gpfaultinjector -f workfile_write_failure -y reset --seg_dbid 2
\! gpfaultinjector -f workfile_write_failure -y error --seg_dbid 2
select gp_inject_fault('workfile_write_failure', 'reset', 2);
select gp_inject_fault('workfile_write_failure', 'error', 2);
-- LEAK in UPDATE: update with sisc xslice sort
update foo set j=m.cc1 from (
......@@ -168,7 +170,7 @@ update foo set j=m.cc1 from (
from ctesisc as t1, ctesisc as t2
where t1.i1 = t2.i2 ) as m;
\! gpfaultinjector -f exec_hashjoin_new_batch -y status --seg_dbid 2
select gp_inject_fault('exec_hashjoin_new_batch', 'status', 2);
select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used_diskspace;
......@@ -207,8 +209,8 @@ insert into foo select i, i % 1000 from
set statement_mem=1024; -- 1mb for 3 segment to get leak.
-- enable the fault injector
\! gpfaultinjector -f workfile_write_failure -y reset --seg_dbid 2
\! gpfaultinjector -f workfile_write_failure -y error --seg_dbid 2
select gp_inject_fault('workfile_write_failure', 'reset', 2);
select gp_inject_fault('workfile_write_failure', 'error', 2);
-- LEAK in DELETE with APPEND ONLY tables
delete from testsisc using (
......@@ -216,7 +218,7 @@ delete from testsisc using (
from foo
) src where testsisc.i1 = src.i;
\! gpfaultinjector -f exec_hashjoin_new_batch -y status --seg_dbid 2
select gp_inject_fault('exec_hashjoin_new_batch', 'status', 2);
select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used_diskspace;
......@@ -243,8 +245,8 @@ drop table if exists foo;
create table foo (c int, d int);
-- enable the fault injector
\! gpfaultinjector -f workfile_write_failure -y reset --seg_dbid 2
\! gpfaultinjector -f workfile_write_failure -y error --seg_dbid 2
select gp_inject_fault('workfile_write_failure', 'reset', 2);
select gp_inject_fault('workfile_write_failure', 'error', 2);
-- expect to see leak if we hit error
update foo set d = i1 from (select i1,i2 from testsort order by i2) x;
......@@ -252,7 +254,7 @@ update foo set d = i1 from (select i1,i2 from testsort order by i2) x;
-- check counter leak
select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used_diskspace;
\! gpfaultinjector -f exec_hashjoin_new_batch -y status --seg_dbid 2
select gp_inject_fault('exec_hashjoin_new_batch', 'status', 2);
-- Run the test without fault injection
-- expect to see leak if we hit error
......@@ -276,15 +278,15 @@ create table foo (c int, d int);
-- expect to see leak if we hit error
-- enable the fault injector
\! gpfaultinjector -f workfile_write_failure -y reset --seg_dbid 2
\! gpfaultinjector -f workfile_write_failure -y error --seg_dbid 2
select gp_inject_fault('workfile_write_failure', 'reset', 2);
select gp_inject_fault('workfile_write_failure', 'error', 2);
update foo set d = i1 from (with ctesisc as (select * from testsisc order by i2)
select * from
(select count(*) from ctesisc) x(a), ctesisc
where x.a = ctesisc.i1) y;
\! gpfaultinjector -f exec_hashjoin_new_batch -y status --seg_dbid 2
select gp_inject_fault('exec_hashjoin_new_batch', 'status', 2);
-- check counter leak
select max(bytes) as max, min(bytes) as min from gp_toolkit.gp_workfile_mgr_used_diskspace;
......@@ -328,4 +330,4 @@ begin
end;
$func$ language plpgsql;
select workset_cleanup_test();
\ No newline at end of file
select workset_cleanup_test();
CREATE EXTENSION IF NOT EXISTS gp_inject_fault;
DROP TABLE IF EXISTS test_zlib_hashjoin;
CREATE TABLE test_zlib_hashjoin (i1 int, i2 int, i3 int, i4 int, i5 int, i6 int, i7 int, i8 int) WITH (APPENDONLY=true) DISTRIBUTED BY (i1) ;
INSERT INTO test_zlib_hashjoin SELECT i,i,i,i,i,i,i,i FROM
......@@ -9,12 +11,12 @@ SET gp_workfile_compress_algorithm=zlib;
SET statement_mem=5000;
--Fail after workfile creation and before add it to workfile set
\! gpfaultinjector -f workfile_creation_failure -y reset --seg_dbid 2
\! gpfaultinjector -f workfile_creation_failure -y error --seg_dbid 2
select gp_inject_fault('workfile_creation_failure', 'reset', 2);
select gp_inject_fault('workfile_creation_failure', 'error', 2);
SELECT COUNT(t1.*) FROM test_zlib_hashjoin AS t1, test_zlib_hashjoin AS t2 WHERE t1.i1=t2.i2;
\! gpfaultinjector -f workfile_creation_failure -y status --seg_dbid 2
select gp_inject_fault('workfile_creation_failure', 'status', 2);
RESET statement_mem;
DROP TABLE IF EXISTS test_zlib_hagg;
......@@ -26,15 +28,15 @@ INSERT INTO test_zlib_hagg SELECT i,i,i,i FROM
SET statement_mem=2000;
--Fail after workfile creation and before add it to workfile set
\! gpfaultinjector -f workfile_creation_failure -y reset --seg_dbid 2
\! gpfaultinjector -f workfile_creation_failure -y error --seg_dbid 2
select gp_inject_fault('workfile_creation_failure', 'reset', 2);
select gp_inject_fault('workfile_creation_failure', 'error', 2);
SELECT MAX(i1) FROM test_zlib_hagg GROUP BY i2;
\! gpfaultinjector -f workfile_creation_failure -y status --seg_dbid 2
select gp_inject_fault('workfile_creation_failure', 'status', 2);
-- Reset faultinjectors
\! gpfaultinjector -f workfile_creation_failure -y reset --seg_dbid 2
select gp_inject_fault('workfile_creation_failure', 'reset', 2);
create table t (i int, j text);
insert into t select i, i from generate_series(1,1000000) as i;
......@@ -57,16 +59,16 @@ end
$body$ language plpgsql;
-- Inject fault before we close workfile in ExecHashJoinNewBatch
\! gpfaultinjector -f workfile_hashjoin_failure -y reset --seg_dbid 2
\! gpfaultinjector -f workfile_hashjoin_failure -y error --seg_dbid 2
select gp_inject_fault('workfile_creation_failure', 'reset', 2);
select gp_inject_fault('workfile_creation_failure', 'error', 2);
select FuncA();
select * from t1;
\! gpfaultinjector -f workfile_hashjoin_failure -y status --seg_dbid 2
select gp_inject_fault('workfile_creation_failure', 'status', 2);
drop function FuncA();
drop table t;
drop table t1;
\! gpfaultinjector -f workfile_hashjoin_failure -y reset --seg_dbid 2
select gp_inject_fault('workfile_creation_failure', 'reset', 2);
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册