citus/src/test/regress/sql/cpu_priority.sql

104 lines
3.9 KiB
PL/PgSQL

CREATE SCHEMA cpu_priority;
SET search_path TO cpu_priority;
SET citus.shard_count TO 4;
SET citus.shard_replication_factor TO 1;
SET citus.next_shard_id TO 11568900;
SELECT nodeid AS worker_1_node FROM pg_dist_node WHERE nodeport=:worker_1_port \gset
SELECT nodeid AS worker_2_node FROM pg_dist_node WHERE nodeport=:worker_2_port \gset
-- This test depends on the fact that CI and dev machines don't have their
-- resource limits configured in a way that allows raising CPU priority. This
-- still tries to test as much functionality as possible by expecting certain
-- error messages to appear, but it's not the environment production is
-- supposed to be running as.
CREATE USER cpu_priority_user1;
CREATE USER cpu_priority_user2;
CREATE USER cpu_priority_user3;
CREATE USER cpu_priority_user_background;
GRANT ALL ON SCHEMA cpu_priority to cpu_priority_user1;
GRANT ALL ON SCHEMA cpu_priority to cpu_priority_user2;
GRANT ALL ON SCHEMA cpu_priority to cpu_priority_user3;
GRANT ALL ON SCHEMA cpu_priority to cpu_priority_user_background;
CREATE TABLE t1(a int);
CREATE TABLE t2(a int);
CREATE TABLE t3(a int);
CREATE TABLE t4(a int);
SELECT create_distributed_table('t1', 'a');
SELECT create_distributed_table('t2', 'a');
SELECT create_distributed_table('t3', 'a');
SELECT create_distributed_table('t4', 'a');
INSERT INTO t1 SELECT generate_series(1, 100);
INSERT INTO t2 SELECT generate_series(1, 100);
INSERT INTO t3 SELECT generate_series(1, 100);
INSERT INTO t4 SELECT generate_series(1, 100);
ALTER TABLE t1 OWNER TO cpu_priority_user1;
ALTER TABLE t2 OWNER TO cpu_priority_user2;
ALTER TABLE t3 OWNER TO cpu_priority_user3;
-- gives a warning because this is not allowed
SET citus.cpu_priority = -20;
-- no-op should be allowed
SET citus.cpu_priority = 0;
-- lowering should be allowed
SET citus.cpu_priority = 1;
-- resetting should be allowed, but warn;
RESET citus.cpu_priority;
SET citus.propagate_set_commands = local;
BEGIN;
SET LOCAL citus.cpu_priority = 10;
SELECT count(*) FROM t1;
-- warning is expected here because raising isn't allowed by the OS
COMMIT;
-- reconnect to get a new backend to reset our priority
\c - - - -
SET search_path TO cpu_priority;
-- Make sure shard moves use citus.cpu_priority_for_logical_replication_senders
-- in their CREATE SUBSCRIPTION commands.
SET citus.log_remote_commands TO ON;
SET citus.grep_remote_commands = '%CREATE SUBSCRIPTION%';
SELECT master_move_shard_placement(11568900, 'localhost', :worker_1_port, 'localhost', :worker_2_port, 'force_logical');
SET citus.cpu_priority_for_logical_replication_senders = 15;
SELECT master_move_shard_placement(11568900, 'localhost', :worker_2_port, 'localhost', :worker_1_port, 'force_logical');
SET citus.max_high_priority_background_processes = 3;
SELECT master_move_shard_placement(11568900, 'localhost', :worker_1_port, 'localhost', :worker_2_port, 'force_logical');
SELECT public.wait_for_resource_cleanup();
-- Make sure shard splits use citus.cpu_priority_for_logical_replication_senders
-- in their CREATE SUBSCRIPTION commands.
SELECT pg_catalog.citus_split_shard_by_split_points(
11568900,
ARRAY['-1500000000'],
ARRAY[:worker_1_node, :worker_2_node],
'force_logical');
ALTER USER cpu_priority_user_background SET citus.cpu_priority = 5;
\c - cpu_priority_user_background - -
show citus.cpu_priority;
show citus.cpu_priority_for_logical_replication_senders;
show citus.max_high_priority_background_processes;
-- not alowed to change any of the settings related to CPU priority
SET citus.cpu_priority = 4;
SET citus.cpu_priority = 6;
SET citus.cpu_priority_for_logical_replication_senders = 15;
SET citus.max_high_priority_background_processes = 3;
\c - postgres - -
SET search_path TO cpu_priority;
SET client_min_messages TO WARNING;
DROP SCHEMA cpu_priority CASCADE;
DROP USER cpu_priority_user1;
DROP USER cpu_priority_user2;
DROP USER cpu_priority_user3;
DROP USER cpu_priority_user_background;