diff --git a/src/test/regress/base_schedule b/src/test/regress/base_schedule index 3b94b1d23..cde6df03f 100644 --- a/src/test/regress/base_schedule +++ b/src/test/regress/base_schedule @@ -2,7 +2,7 @@ # Only run few basic tests to set up a testing environment # ---------- test: multi_cluster_management -test: multi_test_helpers multi_create_fdw +test: multi_test_helpers multi_test_helpers_superuser multi_create_fdw test: multi_test_catalog_views test: multi_create_table multi_behavioral_analytics_create_table test: multi_load_data diff --git a/src/test/regress/expected/multi_test_helpers.out b/src/test/regress/expected/multi_test_helpers.out index ad8532ae9..3ae6c3b42 100644 --- a/src/test/regress/expected/multi_test_helpers.out +++ b/src/test/regress/expected/multi_test_helpers.out @@ -80,45 +80,6 @@ BEGIN RETURN true; END; $func$; -CREATE OR REPLACE FUNCTION wait_until_metadata_sync(timeout INTEGER DEFAULT 15000) - RETURNS void - LANGUAGE C STRICT - AS 'citus'; --- set sync intervals to less than 15s so wait_until_metadata_sync never times out -ALTER SYSTEM SET citus.metadata_sync_interval TO 3000; -ALTER SYSTEM SET citus.metadata_sync_retry_interval TO 500; -SELECT pg_reload_conf(); - pg_reload_conf ---------------------------------------------------------------------- - t -(1 row) - --- Verifies pg_dist_node and pg_dist_palcement in the given worker matches the ones in coordinator -CREATE OR REPLACE FUNCTION verify_metadata(hostname TEXT, port INTEGER, master_port INTEGER DEFAULT xxxxx) - RETURNS BOOLEAN - LANGUAGE sql - AS $$ -SELECT wait_until_metadata_sync(); -WITH dist_node_summary AS ( - SELECT 'SELECT jsonb_agg(ROW(nodeid, groupid, nodename, nodeport, isactive) ORDER BY nodeid) FROM pg_dist_node' as query -), dist_node_check AS ( - SELECT count(distinct result) = 1 AS matches - FROM dist_node_summary CROSS JOIN LATERAL - master_run_on_worker(ARRAY[hostname, ''], ARRAY[port, master_port], - ARRAY[dist_node_summary.query, dist_node_summary.query], - false) -), dist_placement_summary AS ( - SELECT 'SELECT jsonb_agg(pg_dist_placement ORDER BY shardid) FROM pg_dist_placement)' AS query -), dist_placement_check AS ( - SELECT count(distinct result) = 1 AS matches - FROM dist_placement_summary CROSS JOIN LATERAL - master_run_on_worker(ARRAY[hostname, ''], ARRAY[port, master_port], - ARRAY[dist_placement_summary.query, dist_placement_summary.query], - false) -) -SELECT dist_node_check.matches AND dist_placement_check.matches -FROM dist_node_check CROSS JOIN dist_placement_check -$$; -- -- Procedure for creating shards for range partitioned distributed table. -- @@ -135,15 +96,3 @@ BEGIN END LOOP; END; $$ LANGUAGE plpgsql; --- partition_task_list_results tests the internal PartitionTasklistResults function -CREATE OR REPLACE FUNCTION pg_catalog.partition_task_list_results(resultIdPrefix text, - query text, - target_table regclass, - binaryFormat bool DEFAULT true) - RETURNS TABLE(resultId text, - nodeId int, - rowCount bigint, - targetShardId bigint, - targetShardIndex int) - LANGUAGE C STRICT VOLATILE - AS 'citus', $$partition_task_list_results$$; diff --git a/src/test/regress/expected/multi_test_helpers_superuser.out b/src/test/regress/expected/multi_test_helpers_superuser.out new file mode 100644 index 000000000..fb66fdfbd --- /dev/null +++ b/src/test/regress/expected/multi_test_helpers_superuser.out @@ -0,0 +1,54 @@ +-- +-- Helper UDFs which require superuser permissions +-- +CREATE OR REPLACE FUNCTION wait_until_metadata_sync(timeout INTEGER DEFAULT 15000) + RETURNS void + LANGUAGE C STRICT + AS 'citus'; +-- set sync intervals to less than 15s so wait_until_metadata_sync never times out +ALTER SYSTEM SET citus.metadata_sync_interval TO 3000; +ALTER SYSTEM SET citus.metadata_sync_retry_interval TO 500; +SELECT pg_reload_conf(); + pg_reload_conf +--------------------------------------------------------------------- + t +(1 row) + +-- Verifies pg_dist_node and pg_dist_palcement in the given worker matches the ones in coordinator +CREATE OR REPLACE FUNCTION verify_metadata(hostname TEXT, port INTEGER, master_port INTEGER DEFAULT xxxxx) + RETURNS BOOLEAN + LANGUAGE sql + AS $$ +SELECT wait_until_metadata_sync(); +WITH dist_node_summary AS ( + SELECT 'SELECT jsonb_agg(ROW(nodeid, groupid, nodename, nodeport, isactive) ORDER BY nodeid) FROM pg_dist_node' as query +), dist_node_check AS ( + SELECT count(distinct result) = 1 AS matches + FROM dist_node_summary CROSS JOIN LATERAL + master_run_on_worker(ARRAY[hostname, ''], ARRAY[port, master_port], + ARRAY[dist_node_summary.query, dist_node_summary.query], + false) +), dist_placement_summary AS ( + SELECT 'SELECT jsonb_agg(pg_dist_placement ORDER BY shardid) FROM pg_dist_placement)' AS query +), dist_placement_check AS ( + SELECT count(distinct result) = 1 AS matches + FROM dist_placement_summary CROSS JOIN LATERAL + master_run_on_worker(ARRAY[hostname, ''], ARRAY[port, master_port], + ARRAY[dist_placement_summary.query, dist_placement_summary.query], + false) +) +SELECT dist_node_check.matches AND dist_placement_check.matches +FROM dist_node_check CROSS JOIN dist_placement_check +$$; +-- partition_task_list_results tests the internal PartitionTasklistResults function +CREATE OR REPLACE FUNCTION pg_catalog.partition_task_list_results(resultIdPrefix text, + query text, + target_table regclass, + binaryFormat bool DEFAULT true) + RETURNS TABLE(resultId text, + nodeId int, + rowCount bigint, + targetShardId bigint, + targetShardIndex int) + LANGUAGE C STRICT VOLATILE + AS 'citus', $$partition_task_list_results$$; diff --git a/src/test/regress/multi_mx_schedule b/src/test/regress/multi_mx_schedule index 9a7fadb50..d074f2338 100644 --- a/src/test/regress/multi_mx_schedule +++ b/src/test/regress/multi_mx_schedule @@ -14,7 +14,7 @@ # Tests around schema changes, these are run first, so there's no preexisting objects. # --- test: multi_extension -test: multi_test_helpers +test: multi_test_helpers multi_test_helpers_superuser test: multi_mx_node_metadata test: multi_cluster_management test: multi_mx_function_table_reference diff --git a/src/test/regress/multi_schedule b/src/test/regress/multi_schedule index e75bde7e2..97e91f960 100644 --- a/src/test/regress/multi_schedule +++ b/src/test/regress/multi_schedule @@ -25,7 +25,7 @@ test: multi_cluster_management test: alter_role_propagation test: propagate_extension_commands test: escape_extension_name -test: multi_test_helpers +test: multi_test_helpers multi_test_helpers_superuser test: multi_test_catalog_views test: multi_table_ddl test: multi_name_lengths diff --git a/src/test/regress/multi_schedule_hyperscale b/src/test/regress/multi_schedule_hyperscale index bbf6db5bf..5e8c87072 100644 --- a/src/test/regress/multi_schedule_hyperscale +++ b/src/test/regress/multi_schedule_hyperscale @@ -19,7 +19,7 @@ # remove / add node operations, we do not want any preexisting objects before # propagate_extension_commands # --- -test: multi_test_helpers_shadow +test: multi_test_helpers test: multi_test_catalog_views test: multi_name_resolution diff --git a/src/test/regress/multi_schedule_hyperscale_superuser b/src/test/regress/multi_schedule_hyperscale_superuser index e21fc5e8f..61f7c71e1 100644 --- a/src/test/regress/multi_schedule_hyperscale_superuser +++ b/src/test/regress/multi_schedule_hyperscale_superuser @@ -19,7 +19,7 @@ # remove / add node operations, we do not want any preexisting objects before # propagate_extension_commands # --- -test: multi_test_helpers +test: multi_test_helpers multi_test_helpers_superuser test: multi_test_catalog_views test: multi_name_lengths test: multi_name_resolution diff --git a/src/test/regress/sql/multi_test_helpers.sql b/src/test/regress/sql/multi_test_helpers.sql index 93823ea7a..0a73c51fc 100644 --- a/src/test/regress/sql/multi_test_helpers.sql +++ b/src/test/regress/sql/multi_test_helpers.sql @@ -88,43 +88,6 @@ BEGIN END; $func$; -CREATE OR REPLACE FUNCTION wait_until_metadata_sync(timeout INTEGER DEFAULT 15000) - RETURNS void - LANGUAGE C STRICT - AS 'citus'; - --- set sync intervals to less than 15s so wait_until_metadata_sync never times out -ALTER SYSTEM SET citus.metadata_sync_interval TO 3000; -ALTER SYSTEM SET citus.metadata_sync_retry_interval TO 500; -SELECT pg_reload_conf(); - --- Verifies pg_dist_node and pg_dist_palcement in the given worker matches the ones in coordinator -CREATE OR REPLACE FUNCTION verify_metadata(hostname TEXT, port INTEGER, master_port INTEGER DEFAULT 57636) - RETURNS BOOLEAN - LANGUAGE sql - AS $$ -SELECT wait_until_metadata_sync(); -WITH dist_node_summary AS ( - SELECT 'SELECT jsonb_agg(ROW(nodeid, groupid, nodename, nodeport, isactive) ORDER BY nodeid) FROM pg_dist_node' as query -), dist_node_check AS ( - SELECT count(distinct result) = 1 AS matches - FROM dist_node_summary CROSS JOIN LATERAL - master_run_on_worker(ARRAY[hostname, 'localhost'], ARRAY[port, master_port], - ARRAY[dist_node_summary.query, dist_node_summary.query], - false) -), dist_placement_summary AS ( - SELECT 'SELECT jsonb_agg(pg_dist_placement ORDER BY shardid) FROM pg_dist_placement)' AS query -), dist_placement_check AS ( - SELECT count(distinct result) = 1 AS matches - FROM dist_placement_summary CROSS JOIN LATERAL - master_run_on_worker(ARRAY[hostname, 'localhost'], ARRAY[port, master_port], - ARRAY[dist_placement_summary.query, dist_placement_summary.query], - false) -) -SELECT dist_node_check.matches AND dist_placement_check.matches -FROM dist_node_check CROSS JOIN dist_placement_check -$$; - -- -- Procedure for creating shards for range partitioned distributed table. -- @@ -141,17 +104,3 @@ BEGIN END LOOP; END; $$ LANGUAGE plpgsql; - - --- partition_task_list_results tests the internal PartitionTasklistResults function -CREATE OR REPLACE FUNCTION pg_catalog.partition_task_list_results(resultIdPrefix text, - query text, - target_table regclass, - binaryFormat bool DEFAULT true) - RETURNS TABLE(resultId text, - nodeId int, - rowCount bigint, - targetShardId bigint, - targetShardIndex int) - LANGUAGE C STRICT VOLATILE - AS 'citus', $$partition_task_list_results$$; diff --git a/src/test/regress/sql/multi_test_helpers_superuser.sql b/src/test/regress/sql/multi_test_helpers_superuser.sql new file mode 100644 index 000000000..935b14510 --- /dev/null +++ b/src/test/regress/sql/multi_test_helpers_superuser.sql @@ -0,0 +1,53 @@ +-- +-- Helper UDFs which require superuser permissions +-- + +CREATE OR REPLACE FUNCTION wait_until_metadata_sync(timeout INTEGER DEFAULT 15000) + RETURNS void + LANGUAGE C STRICT + AS 'citus'; + +-- set sync intervals to less than 15s so wait_until_metadata_sync never times out +ALTER SYSTEM SET citus.metadata_sync_interval TO 3000; +ALTER SYSTEM SET citus.metadata_sync_retry_interval TO 500; +SELECT pg_reload_conf(); + +-- Verifies pg_dist_node and pg_dist_palcement in the given worker matches the ones in coordinator +CREATE OR REPLACE FUNCTION verify_metadata(hostname TEXT, port INTEGER, master_port INTEGER DEFAULT 57636) + RETURNS BOOLEAN + LANGUAGE sql + AS $$ +SELECT wait_until_metadata_sync(); +WITH dist_node_summary AS ( + SELECT 'SELECT jsonb_agg(ROW(nodeid, groupid, nodename, nodeport, isactive) ORDER BY nodeid) FROM pg_dist_node' as query +), dist_node_check AS ( + SELECT count(distinct result) = 1 AS matches + FROM dist_node_summary CROSS JOIN LATERAL + master_run_on_worker(ARRAY[hostname, 'localhost'], ARRAY[port, master_port], + ARRAY[dist_node_summary.query, dist_node_summary.query], + false) +), dist_placement_summary AS ( + SELECT 'SELECT jsonb_agg(pg_dist_placement ORDER BY shardid) FROM pg_dist_placement)' AS query +), dist_placement_check AS ( + SELECT count(distinct result) = 1 AS matches + FROM dist_placement_summary CROSS JOIN LATERAL + master_run_on_worker(ARRAY[hostname, 'localhost'], ARRAY[port, master_port], + ARRAY[dist_placement_summary.query, dist_placement_summary.query], + false) +) +SELECT dist_node_check.matches AND dist_placement_check.matches +FROM dist_node_check CROSS JOIN dist_placement_check +$$; + +-- partition_task_list_results tests the internal PartitionTasklistResults function +CREATE OR REPLACE FUNCTION pg_catalog.partition_task_list_results(resultIdPrefix text, + query text, + target_table regclass, + binaryFormat bool DEFAULT true) + RETURNS TABLE(resultId text, + nodeId int, + rowCount bigint, + targetShardId bigint, + targetShardIndex int) + LANGUAGE C STRICT VOLATILE + AS 'citus', $$partition_task_list_results$$;