diff --git a/src/test/regress/Makefile b/src/test/regress/Makefile index 701afa168..3dded6576 100644 --- a/src/test/regress/Makefile +++ b/src/test/regress/Makefile @@ -51,6 +51,7 @@ check-multi: all tempinstall-main check-multi-vg: all tempinstall-main $(pg_regress_multi_check) --load-extension=citus --valgrind \ + --pg_ctl-timeout=360 --connection-timeout=500000 --valgrind-path=valgrind --valgrind-log-file=$(VALGRIND_LOG_FILE) \ -- $(MULTI_REGRESS_OPTS) --schedule=$(citus_abs_srcdir)/multi_schedule $(EXTRA_TESTS) check-isolation: all tempinstall-main @@ -70,7 +71,6 @@ check-multi-task-tracker-extra: all tempinstall-main --server-option=citus.large_table_shard_count=1 \ -- $(MULTI_REGRESS_OPTS) --schedule=$(citus_abs_srcdir)/multi_task_tracker_extra_schedule $(EXTRA_TESTS) - check-multi-binary: all tempinstall-main $(pg_regress_multi_check) --load-extension=citus \ --server-option=citus.binary_worker_copy_format=on \ diff --git a/src/test/regress/expected/multi_explain.out b/src/test/regress/expected/multi_explain.out index 5fa8ea4a3..e3ae6bfd3 100644 --- a/src/test/regress/expected/multi_explain.out +++ b/src/test/regress/expected/multi_explain.out @@ -34,6 +34,9 @@ BEGIN RETURN result; END; $BODY$ LANGUAGE plpgsql; +-- VACUMM related tables to ensure test outputs are stable +VACUUM ANALYZE lineitem; +VACUUM ANALYZE orders; -- Test Text format EXPLAIN (COSTS FALSE, FORMAT TEXT) SELECT l_quantity, count(*) count_quantity FROM lineitem @@ -287,12 +290,13 @@ Limit -> Limit -> Sort Sort Key: lineitem.l_quantity - -> Hash Join - Hash Cond: (lineitem.l_orderkey = orders.o_orderkey) - -> Seq Scan on lineitem_290001 lineitem - Filter: (l_quantity < 5.0) - -> Hash - -> Seq Scan on orders_290008 orders + -> Merge Join + Merge Cond: (orders.o_orderkey = lineitem.l_orderkey) + -> Index Scan using orders_pkey_290008 on orders_290008 orders + -> Sort + Sort Key: lineitem.l_orderkey + -> Seq Scan on lineitem_290001 lineitem + Filter: (l_quantity < 5.0) -- Test insert EXPLAIN (COSTS FALSE) INSERT INTO lineitem VALUES(1,0); @@ -314,11 +318,9 @@ Custom Scan (Citus Router) -> Task Node: host=localhost port=57638 dbname=regression -> Update on lineitem_290000 - -> Bitmap Heap Scan on lineitem_290000 - Recheck Cond: (l_orderkey = 1) + -> Index Scan using lineitem_pkey_290000 on lineitem_290000 + Index Cond: (l_orderkey = 1) Filter: (l_partkey = 0) - -> Bitmap Index Scan on lineitem_pkey_290000 - Index Cond: (l_orderkey = 1) -- Test delete EXPLAIN (COSTS FALSE) DELETE FROM lineitem @@ -329,11 +331,9 @@ Custom Scan (Citus Router) -> Task Node: host=localhost port=57638 dbname=regression -> Delete on lineitem_290000 - -> Bitmap Heap Scan on lineitem_290000 - Recheck Cond: (l_orderkey = 1) + -> Index Scan using lineitem_pkey_290000 on lineitem_290000 + Index Cond: (l_orderkey = 1) Filter: (l_partkey = 0) - -> Bitmap Index Scan on lineitem_pkey_290000 - Index Cond: (l_orderkey = 1) -- Test single-shard SELECT EXPLAIN (COSTS FALSE) SELECT l_quantity FROM lineitem WHERE l_orderkey = 5; @@ -342,10 +342,8 @@ Custom Scan (Citus Router) Tasks Shown: All -> Task Node: host=localhost port=57637 dbname=regression - -> Bitmap Heap Scan on lineitem_290000 lineitem - Recheck Cond: (l_orderkey = 5) - -> Bitmap Index Scan on lineitem_pkey_290000 - Index Cond: (l_orderkey = 5) + -> Index Scan using lineitem_pkey_290000 on lineitem_290000 lineitem + Index Cond: (l_orderkey = 5) SELECT true AS valid FROM explain_xml($$ SELECT l_quantity FROM lineitem WHERE l_orderkey = 5$$); t @@ -646,10 +644,8 @@ Custom Scan (Citus Router) (cost=0.00..0.00 rows=0 width=0) Tasks Shown: All -> Task Node: host=localhost port=57637 dbname=regression - -> Bitmap Heap Scan on lineitem_290000 lineitem (cost=4.30..13.44 rows=3 width=18) - Recheck Cond: (l_orderkey = 5) - -> Bitmap Index Scan on lineitem_pkey_290000 (cost=0.00..4.30 rows=3 width=0) - Index Cond: (l_orderkey = 5) + -> Index Scan using lineitem_pkey_290000 on lineitem_290000 lineitem (cost=0.28..11.83 rows=3 width=5) + Index Cond: (l_orderkey = 5) PREPARE real_time_executor_query AS SELECT avg(l_linenumber) FROM lineitem WHERE l_orderkey > 9030; EXPLAIN (COSTS FALSE) EXECUTE real_time_executor_query; @@ -671,7 +667,5 @@ Custom Scan (Citus Router) (cost=0.00..0.00 rows=0 width=0) Tasks Shown: All -> Task Node: host=localhost port=57637 dbname=regression - -> Bitmap Heap Scan on lineitem_290000 lineitem (cost=4.30..13.44 rows=3 width=18) - Recheck Cond: (l_orderkey = 5) - -> Bitmap Index Scan on lineitem_pkey_290000 (cost=0.00..4.30 rows=3 width=0) - Index Cond: (l_orderkey = 5) + -> Index Scan using lineitem_pkey_290000 on lineitem_290000 lineitem (cost=0.28..11.83 rows=3 width=5) + Index Cond: (l_orderkey = 5) diff --git a/src/test/regress/expected/multi_explain_0.out b/src/test/regress/expected/multi_explain_0.out index 69eb07d04..c7f7166a3 100644 --- a/src/test/regress/expected/multi_explain_0.out +++ b/src/test/regress/expected/multi_explain_0.out @@ -34,6 +34,9 @@ BEGIN RETURN result; END; $BODY$ LANGUAGE plpgsql; +-- VACUMM related tables to ensure test outputs are stable +VACUUM ANALYZE lineitem; +VACUUM ANALYZE orders; -- Test Text format EXPLAIN (COSTS FALSE, FORMAT TEXT) SELECT l_quantity, count(*) count_quantity FROM lineitem @@ -266,12 +269,13 @@ Limit -> Limit -> Sort Sort Key: lineitem.l_quantity - -> Hash Join - Hash Cond: (lineitem.l_orderkey = orders.o_orderkey) - -> Seq Scan on lineitem_290001 lineitem - Filter: (l_quantity < 5.0) - -> Hash - -> Seq Scan on orders_290008 orders + -> Merge Join + Merge Cond: (orders.o_orderkey = lineitem.l_orderkey) + -> Index Scan using orders_pkey_290008 on orders_290008 orders + -> Sort + Sort Key: lineitem.l_orderkey + -> Seq Scan on lineitem_290001 lineitem + Filter: (l_quantity < 5.0) -- Test insert EXPLAIN (COSTS FALSE) INSERT INTO lineitem VALUES(1,0); @@ -293,11 +297,9 @@ Custom Scan (Citus Router) -> Task Node: host=localhost port=57638 dbname=regression -> Update on lineitem_290000 - -> Bitmap Heap Scan on lineitem_290000 - Recheck Cond: (l_orderkey = 1) + -> Index Scan using lineitem_pkey_290000 on lineitem_290000 + Index Cond: (l_orderkey = 1) Filter: (l_partkey = 0) - -> Bitmap Index Scan on lineitem_pkey_290000 - Index Cond: (l_orderkey = 1) -- Test delete EXPLAIN (COSTS FALSE) DELETE FROM lineitem @@ -308,11 +310,9 @@ Custom Scan (Citus Router) -> Task Node: host=localhost port=57638 dbname=regression -> Delete on lineitem_290000 - -> Bitmap Heap Scan on lineitem_290000 - Recheck Cond: (l_orderkey = 1) + -> Index Scan using lineitem_pkey_290000 on lineitem_290000 + Index Cond: (l_orderkey = 1) Filter: (l_partkey = 0) - -> Bitmap Index Scan on lineitem_pkey_290000 - Index Cond: (l_orderkey = 1) -- Test single-shard SELECT EXPLAIN (COSTS FALSE) SELECT l_quantity FROM lineitem WHERE l_orderkey = 5; @@ -321,10 +321,8 @@ Custom Scan (Citus Router) Tasks Shown: All -> Task Node: host=localhost port=57637 dbname=regression - -> Bitmap Heap Scan on lineitem_290000 lineitem - Recheck Cond: (l_orderkey = 5) - -> Bitmap Index Scan on lineitem_pkey_290000 - Index Cond: (l_orderkey = 5) + -> Index Scan using lineitem_pkey_290000 on lineitem_290000 lineitem + Index Cond: (l_orderkey = 5) SELECT true AS valid FROM explain_xml($$ SELECT l_quantity FROM lineitem WHERE l_orderkey = 5$$); t @@ -617,10 +615,8 @@ Custom Scan (Citus Router) (cost=0.00..0.00 rows=0 width=0) Tasks Shown: All -> Task Node: host=localhost port=57637 dbname=regression - -> Bitmap Heap Scan on lineitem_290000 lineitem (cost=4.30..13.44 rows=3 width=18) - Recheck Cond: (l_orderkey = 5) - -> Bitmap Index Scan on lineitem_pkey_290000 (cost=0.00..4.30 rows=3 width=0) - Index Cond: (l_orderkey = 5) + -> Index Scan using lineitem_pkey_290000 on lineitem_290000 lineitem (cost=0.28..11.83 rows=3 width=5) + Index Cond: (l_orderkey = 5) PREPARE real_time_executor_query AS SELECT avg(l_linenumber) FROM lineitem WHERE l_orderkey > 9030; EXPLAIN (COSTS FALSE) EXECUTE real_time_executor_query; @@ -642,7 +638,5 @@ Custom Scan (Citus Router) (cost=0.00..0.00 rows=0 width=0) Tasks Shown: All -> Task Node: host=localhost port=57637 dbname=regression - -> Bitmap Heap Scan on lineitem_290000 lineitem (cost=4.30..13.44 rows=3 width=18) - Recheck Cond: (l_orderkey = 5) - -> Bitmap Index Scan on lineitem_pkey_290000 (cost=0.00..4.30 rows=3 width=0) - Index Cond: (l_orderkey = 5) + -> Index Scan using lineitem_pkey_290000 on lineitem_290000 lineitem (cost=0.28..11.83 rows=3 width=5) + Index Cond: (l_orderkey = 5) diff --git a/src/test/regress/input/multi_outer_join_reference.source b/src/test/regress/input/multi_outer_join_reference.source index 08261ee34..f1e5946c4 100644 --- a/src/test/regress/input/multi_outer_join_reference.source +++ b/src/test/regress/input/multi_outer_join_reference.source @@ -447,7 +447,8 @@ SELECT t_custkey, r_custkey FROM multi_outer_join_right_reference FULL JOIN - multi_outer_join_third_reference ON (t_custkey = r_custkey); + multi_outer_join_third_reference ON (t_custkey = r_custkey) +ORDER BY 1; -- DROP unused tables to clean up workspace DROP TABLE multi_outer_join_left_hash; diff --git a/src/test/regress/output/multi_outer_join_reference.source b/src/test/regress/output/multi_outer_join_reference.source index ecaf1ae01..82d1b88ed 100644 --- a/src/test/regress/output/multi_outer_join_reference.source +++ b/src/test/regress/output/multi_outer_join_reference.source @@ -798,9 +798,20 @@ SELECT t_custkey, r_custkey FROM multi_outer_join_right_reference FULL JOIN - multi_outer_join_third_reference ON (t_custkey = r_custkey); + multi_outer_join_third_reference ON (t_custkey = r_custkey) +ORDER BY 1; t_custkey | r_custkey -----------+----------- + 1 | + 2 | + 3 | + 4 | + 5 | + 6 | + 7 | + 8 | + 9 | + 10 | 11 | 11 12 | 12 13 | 13 @@ -821,16 +832,6 @@ FROM 28 | 28 29 | 29 30 | 30 - 10 | - 2 | - 5 | - 8 | - 6 | - 4 | - 1 | - 3 | - 9 | - 7 | (30 rows) -- DROP unused tables to clean up workspace diff --git a/src/test/regress/pg_regress_multi.pl b/src/test/regress/pg_regress_multi.pl index 4c10cc896..1d6c5d005 100755 --- a/src/test/regress/pg_regress_multi.pl +++ b/src/test/regress/pg_regress_multi.pl @@ -26,16 +26,20 @@ sub Usage() print " pg_regress_multi [MULTI OPTIONS] -- [PG REGRESS OPTS]\n"; print "\n"; print "Multi Options:\n"; - print " --isolationtester Run isolationtester tests instead of plain tests\n"; - print " --vanillatest Run postgres tests with citus loaded as shared preload library\n"; - print " --bindir Path to postgres binary directory\n"; - print " --libdir Path to postgres library directory\n"; - print " --postgres-builddir Path to postgres build directory\n"; - print " --postgres-srcdir Path to postgres build directory\n"; - print " --pgxsdir Path to the PGXS directory\n"; - print " --load-extension Extensions to install in all nodes\n"; - print " --server-option Config option to pass to the server\n"; - print " --valgrind Run server via valgrind\n"; + print " --isolationtester Run isolationtester tests instead of plain tests\n"; + print " --vanillatest Run postgres tests with citus loaded as shared preload library\n"; + print " --bindir Path to postgres binary directory\n"; + print " --libdir Path to postgres library directory\n"; + print " --postgres-builddir Path to postgres build directory\n"; + print " --postgres-srcdir Path to postgres build directory\n"; + print " --pgxsdir Path to the PGXS directory\n"; + print " --load-extension Extensions to install in all nodes\n"; + print " --server-option Config option to pass to the server\n"; + print " --valgrind Run server via valgrind\n"; + print " --valgrind-path Path to the valgrind executable\n"; + print " --valgrind-log-file Path to the write valgrind logs\n"; + print " --pg_ctl-timeout Timeout for pg_ctl\n"; + print " --connection-timeout Timeout for connecting to worker nodes\n"; exit 1; } @@ -56,6 +60,10 @@ my %fdwServers = (); my %functions = (); my %operators = (); my $valgrind = 0; +my $valgrindPath = "valgrind"; +my $valgrindLogFile = "valgrind_test_log.txt"; +my $pgCtlTimeout = undef; +my $connectionTimeout = 5000; my $serversAreShutdown = "TRUE"; @@ -71,6 +79,10 @@ GetOptions( 'load-extension=s' => \@extensions, 'server-option=s' => \@userPgOptions, 'valgrind' => \$valgrind, + 'valgrind-path=s' => \$valgrindPath, + 'valgrind-log-file=s' => \$valgrindLogFile, + 'pg_ctl-timeout=s' => \$pgCtlTimeout, + 'connection-timeout=s' => \$connectionTimeout, 'help' => sub { Usage() }); # Update environment to include [DY]LD_LIBRARY_PATH/LIBDIR/etc - @@ -135,10 +147,12 @@ are present. MESSAGE } -# valgrind starts slow, need to increase timeout -if ($valgrind) +# If pgCtlTimeout is defined, we will set related environment variable. +# This is generally used with valgrind because valgrind starts slow and we +# need to increase timeout. +if (defined $pgCtlTimeout) { - $ENV{PGCTLTIMEOUT} = '360'; + $ENV{PGCTLTIMEOUT} = "$pgCtlTimeout"; } # We don't want valgrind to run pg_ctl itself, as that'd trigger a lot @@ -163,13 +177,13 @@ sub replace_postgres or die "Could not create postgres wrapper at $bindir/postgres"; print $fh <<"END"; #!/bin/bash -exec valgrind \\ +exec $valgrindPath \\ --quiet \\ --suppressions=${postgresSrcdir}/src/tools/valgrind.supp \\ - --trace-children=yes --track-origins=yes --read-var-info=yes \\ + --trace-children=yes --track-origins=yes --read-var-info=no \\ --leak-check=no \\ - --error-exitcode=128 \\ --error-markers=VALGRINDERROR-BEGIN,VALGRINDERROR-END \\ + --log-file=$valgrindLogFile \\ $bindir/postgres.orig \\ "\$@" END @@ -220,6 +234,7 @@ push(@pgOptions, '-c', "citus.expire_cached_shards=on"); push(@pgOptions, '-c', "citus.task_tracker_delay=10ms"); push(@pgOptions, '-c', "citus.remote_task_check_interval=1ms"); push(@pgOptions, '-c', "citus.shard_replication_factor=2"); +push(@pgOptions, '-c', "citus.node_connection_timeout=${connectionTimeout}"); # Add externally added options last, so they overwrite the default ones above for my $option (@userPgOptions) diff --git a/src/test/regress/sql/multi_explain.sql b/src/test/regress/sql/multi_explain.sql index 068dc45db..1d6e94db2 100644 --- a/src/test/regress/sql/multi_explain.sql +++ b/src/test/regress/sql/multi_explain.sql @@ -36,6 +36,10 @@ BEGIN END; $BODY$ LANGUAGE plpgsql; +-- VACUMM related tables to ensure test outputs are stable +VACUUM ANALYZE lineitem; +VACUUM ANALYZE orders; + -- Test Text format EXPLAIN (COSTS FALSE, FORMAT TEXT) SELECT l_quantity, count(*) count_quantity FROM lineitem