citus/src/test/regress/expected/failure_create_distributed_...

208 lines
7.8 KiB
Plaintext

--
-- 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);
citus_set_coordinator_host
---------------------------------------------------------------------
(1 row)
-- create table that will be distributed concurrently
CREATE TABLE table_1 (id int PRIMARY KEY);
-- START OF TESTS
SELECT citus.mitmproxy('conn.allow()');
mitmproxy
---------------------------------------------------------------------
(1 row)
-- failure on shard table creation
SELECT citus.mitmproxy('conn.onQuery(query="CREATE TABLE create_dist_tbl_con.table_1").kill()');
mitmproxy
---------------------------------------------------------------------
(1 row)
SELECT create_distributed_table_concurrently('table_1', 'id');
ERROR: connection not open
CONTEXT: while executing command on localhost:xxxxx
-- cancellation on shard table creation
SELECT citus.mitmproxy('conn.onQuery(query="CREATE TABLE create_dist_tbl_con.table_1").cancel(' || :pid || ')');
mitmproxy
---------------------------------------------------------------------
(1 row)
SELECT create_distributed_table_concurrently('table_1', 'id');
ERROR: canceling statement due to user request
-- 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()');
mitmproxy
---------------------------------------------------------------------
(1 row)
SELECT create_distributed_table_concurrently('table_1', 'id');
ERROR: connection not open
CONTEXT: while executing command on localhost:xxxxx
-- 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 || ')');
mitmproxy
---------------------------------------------------------------------
(1 row)
SELECT create_distributed_table_concurrently('table_1', 'id');
ERROR: canceling statement due to user request
-- failure on subscription creation
SELECT citus.mitmproxy('conn.onQuery(query="CREATE SUBSCRIPTION").kill()');
mitmproxy
---------------------------------------------------------------------
(1 row)
SELECT create_distributed_table_concurrently('table_1', 'id');
ERROR: connection not open
CONTEXT: while executing command on localhost:xxxxx
-- cancellation on subscription creation
SELECT citus.mitmproxy('conn.onQuery(query="CREATE SUBSCRIPTION").cancel(' || :pid || ')');
mitmproxy
---------------------------------------------------------------------
(1 row)
SELECT create_distributed_table_concurrently('table_1', 'id');
ERROR: canceling statement due to user request
-- failure on catching up LSN
SELECT citus.mitmproxy('conn.onQuery(query="SELECT min\(latest_end_lsn\) FROM pg_stat_subscription").kill()');
mitmproxy
---------------------------------------------------------------------
(1 row)
SELECT create_distributed_table_concurrently('table_1', 'id');
ERROR: connection not open
CONTEXT: while executing command on localhost:xxxxx
-- cancellation on catching up LSN
SELECT citus.mitmproxy('conn.onQuery(query="SELECT min\(latest_end_lsn\) FROM pg_stat_subscription").cancel(' || :pid || ')');
mitmproxy
---------------------------------------------------------------------
(1 row)
SELECT create_distributed_table_concurrently('table_1', 'id');
ERROR: canceling statement due to user request
-- 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()');
mitmproxy
---------------------------------------------------------------------
(1 row)
SELECT create_distributed_table_concurrently('table_1', 'id');
ERROR: failure on connection marked as essential: localhost:xxxxx
-- failure on transaction begin
SELECT citus.mitmproxy('conn.onQuery(query="BEGIN").cancel(' || :pid || ')');
mitmproxy
---------------------------------------------------------------------
(1 row)
SELECT create_distributed_table_concurrently('table_1', 'id');
ERROR: canceling statement due to user request
-- failure on transaction commit
SELECT citus.mitmproxy('conn.onQuery(query="COMMIT").kill()');
mitmproxy
---------------------------------------------------------------------
(1 row)
SELECT create_distributed_table_concurrently('table_1', 'id');
ERROR: failure on connection marked as essential: localhost:xxxxx
-- failure on transaction commit
SELECT citus.mitmproxy('conn.onQuery(query="COMMIT").cancel(' || :pid || ')');
mitmproxy
---------------------------------------------------------------------
(1 row)
SELECT create_distributed_table_concurrently('table_1', 'id');
ERROR: canceling statement due to user request
-- failure on prepare transaction
SELECT citus.mitmproxy('conn.onQuery(query="PREPARE TRANSACTION").kill()');
mitmproxy
---------------------------------------------------------------------
(1 row)
SELECT create_distributed_table_concurrently('table_1', 'id');
ERROR: connection not open
CONTEXT: while executing command on localhost:xxxxx
-- failure on prepare transaction
SELECT citus.mitmproxy('conn.onQuery(query="PREPARE TRANSACTION").cancel(' || :pid || ')');
mitmproxy
---------------------------------------------------------------------
(1 row)
SELECT create_distributed_table_concurrently('table_1', 'id');
ERROR: canceling statement due to user request
-- END OF TESTS
SELECT citus.mitmproxy('conn.allow()');
mitmproxy
---------------------------------------------------------------------
(1 row)
-- Verify that the table can be distributed concurrently after unsuccessful attempts
SELECT create_distributed_table_concurrently('table_1', 'id');
create_distributed_table_concurrently
---------------------------------------------------------------------
(1 row)
SELECT * FROM pg_dist_shard WHERE logicalrelid = 'table_1'::regclass;
logicalrelid | shardid | shardstorage | shardminvalue | shardmaxvalue
---------------------------------------------------------------------
table_1 | 222247 | t | -2147483648 | -1
table_1 | 222248 | t | 0 | 2147483647
(2 rows)
DROP SCHEMA create_dist_tbl_con CASCADE;
SET search_path TO default;
SELECT citus_remove_node('localhost', 57636);
citus_remove_node
---------------------------------------------------------------------
(1 row)
ALTER SEQUENCE pg_dist_node_nodeid_seq RESTART 3;
ALTER SEQUENCE pg_dist_groupid_seq RESTART 3;