mirror of https://github.com/citusdata/citus.git
116 lines
5.0 KiB
SQL
116 lines
5.0 KiB
SQL
--
|
|
-- failure_create_distributed_table_concurrently adds failure tests for creating distributed table concurrently without data.
|
|
--
|
|
|
|
-- due to different libpq versions
|
|
-- some warning messages differ
|
|
-- between local and CI
|
|
SET client_min_messages TO ERROR;
|
|
|
|
-- setup db
|
|
CREATE SCHEMA IF NOT EXISTS create_dist_tbl_con;
|
|
SET SEARCH_PATH = create_dist_tbl_con;
|
|
SET citus.shard_count TO 2;
|
|
SET citus.shard_replication_factor TO 1;
|
|
SET citus.max_adaptive_executor_pool_size TO 1;
|
|
SELECT pg_backend_pid() as pid \gset
|
|
|
|
ALTER SEQUENCE pg_catalog.pg_dist_shardid_seq RESTART 222222;
|
|
ALTER SEQUENCE pg_catalog.pg_dist_placement_placementid_seq RESTART 333333;
|
|
|
|
-- make sure coordinator is in the metadata
|
|
SELECT citus_set_coordinator_host('localhost', 57636);
|
|
|
|
-- create table that will be distributed concurrently
|
|
CREATE TABLE table_1 (id int PRIMARY KEY);
|
|
|
|
-- START OF TESTS
|
|
SELECT citus.mitmproxy('conn.allow()');
|
|
|
|
-- failure on shard table creation
|
|
SELECT citus.mitmproxy('conn.onQuery(query="CREATE TABLE create_dist_tbl_con.table_1").kill()');
|
|
SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- cancellation on shard table creation
|
|
SELECT citus.mitmproxy('conn.onQuery(query="CREATE TABLE create_dist_tbl_con.table_1").cancel(' || :pid || ')');
|
|
SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- failure on table constraints on replica identity creation
|
|
SELECT citus.mitmproxy('conn.onQuery(query="ALTER TABLE create_dist_tbl_con.table_1 ADD CONSTRAINT").kill()');
|
|
SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- cancellation on table constraints on replica identity creation
|
|
SELECT citus.mitmproxy('conn.onQuery(query="ALTER TABLE create_dist_tbl_con.table_1 ADD CONSTRAINT").cancel(' || :pid || ')');
|
|
SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- failure on subscription creation
|
|
SELECT citus.mitmproxy('conn.onQuery(query="CREATE SUBSCRIPTION").kill()');
|
|
SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- cancellation on subscription creation
|
|
SELECT citus.mitmproxy('conn.onQuery(query="CREATE SUBSCRIPTION").cancel(' || :pid || ')');
|
|
SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- failure on catching up LSN
|
|
SELECT citus.mitmproxy('conn.onQuery(query="SELECT min\(latest_end_lsn\) FROM pg_stat_subscription").kill()');
|
|
SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- cancellation on catching up LSN
|
|
SELECT citus.mitmproxy('conn.onQuery(query="SELECT min\(latest_end_lsn\) FROM pg_stat_subscription").cancel(' || :pid || ')');
|
|
SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- Comment out below flaky tests. It is caused by shard split cleanup which does not work properly yet.
|
|
-- -- failure on dropping subscription
|
|
-- SELECT citus.mitmproxy('conn.onQuery(query="DROP SUBSCRIPTION").kill()');
|
|
-- SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- -- cancellation on dropping subscription
|
|
-- SELECT citus.mitmproxy('conn.onQuery(query="DROP SUBSCRIPTION").cancel(' || :pid || ')');
|
|
-- SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- -- failure on dropping old shard
|
|
-- SELECT citus.mitmproxy('conn.onQuery(query="DROP TABLE IF EXISTS create_dist_tbl_con.table_1").kill()');
|
|
-- SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- -- cancellation on dropping old shard
|
|
-- SELECT citus.mitmproxy('conn.onQuery(query="DROP TABLE IF EXISTS create_dist_tbl_con.table_1").cancel(' || :pid || ')');
|
|
-- SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- failure on transaction begin
|
|
SELECT citus.mitmproxy('conn.onQuery(query="BEGIN").kill()');
|
|
SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- failure on transaction begin
|
|
SELECT citus.mitmproxy('conn.onQuery(query="BEGIN").cancel(' || :pid || ')');
|
|
SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- failure on transaction commit
|
|
SELECT citus.mitmproxy('conn.onQuery(query="COMMIT").kill()');
|
|
SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- failure on transaction commit
|
|
SELECT citus.mitmproxy('conn.onQuery(query="COMMIT").cancel(' || :pid || ')');
|
|
SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- failure on prepare transaction
|
|
SELECT citus.mitmproxy('conn.onQuery(query="PREPARE TRANSACTION").kill()');
|
|
SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- failure on prepare transaction
|
|
SELECT citus.mitmproxy('conn.onQuery(query="PREPARE TRANSACTION").cancel(' || :pid || ')');
|
|
SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
|
|
-- END OF TESTS
|
|
|
|
SELECT citus.mitmproxy('conn.allow()');
|
|
|
|
-- Verify that the table can be distributed concurrently after unsuccessful attempts
|
|
SELECT create_distributed_table_concurrently('table_1', 'id');
|
|
SELECT * FROM pg_dist_shard WHERE logicalrelid = 'table_1'::regclass;
|
|
|
|
DROP SCHEMA create_dist_tbl_con CASCADE;
|
|
SET search_path TO default;
|
|
SELECT citus_remove_node('localhost', 57636);
|
|
ALTER SEQUENCE pg_dist_node_nodeid_seq RESTART 3;
|
|
ALTER SEQUENCE pg_dist_groupid_seq RESTART 3;
|