mirror of https://github.com/citusdata/citus.git
Update Tests
parent
28dceecfff
commit
46c8968603
|
@ -1,22 +1,24 @@
|
||||||
|
#include "isolation_mx_common.include.spec"
|
||||||
|
|
||||||
setup
|
setup
|
||||||
{
|
{
|
||||||
SET citus.shard_count to 2;
|
SET citus.shard_count to 2;
|
||||||
SET citus.shard_replication_factor to 1;
|
SET citus.shard_replication_factor to 1;
|
||||||
SELECT setval('pg_dist_shardid_seq', 1500000);
|
SELECT setval('pg_dist_shardid_seq', 1500000);
|
||||||
|
|
||||||
-- Cleanup any orphan shards that might be left over from a previous run.
|
|
||||||
CREATE OR REPLACE FUNCTION run_try_drop_marked_shards()
|
|
||||||
RETURNS VOID
|
|
||||||
AS 'citus'
|
|
||||||
LANGUAGE C STRICT VOLATILE;
|
|
||||||
SELECT run_try_drop_marked_shards();
|
|
||||||
|
|
||||||
CREATE TABLE to_split_table (id int, value int);
|
CREATE TABLE to_split_table (id int, value int);
|
||||||
SELECT create_distributed_table('to_split_table', 'id');
|
SELECT create_distributed_table('to_split_table', 'id');
|
||||||
}
|
}
|
||||||
|
|
||||||
teardown
|
teardown
|
||||||
{
|
{
|
||||||
|
-- Cleanup any orphan shards that might be left over from a previous run.
|
||||||
|
CREATE OR REPLACE FUNCTION run_try_drop_marked_shards()
|
||||||
|
RETURNS VOID
|
||||||
|
AS 'citus'
|
||||||
|
LANGUAGE C STRICT VOLATILE;
|
||||||
|
SELECT run_try_drop_marked_shards();
|
||||||
|
|
||||||
DROP TABLE to_split_table;
|
DROP TABLE to_split_table;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,6 +73,21 @@ step "s1-copy"
|
||||||
COPY to_split_table FROM PROGRAM 'echo "1,1\n2,2\n3,3\n4,4\n5,5"' WITH CSV;
|
COPY to_split_table FROM PROGRAM 'echo "1,1\n2,2\n3,3\n4,4\n5,5"' WITH CSV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
step "s1-lock-to-split-shard"
|
||||||
|
{
|
||||||
|
SELECT run_commands_on_session_level_connection_to_node('BEGIN; LOCK TABLE to_split_table_1500002 IN ACCESS SHARE MODE;');
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s1-start-connection"
|
||||||
|
{
|
||||||
|
SELECT start_session_level_connection_to_node('localhost', 57638);
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s1-stop-connection"
|
||||||
|
{
|
||||||
|
SELECT stop_session_level_connection_to_node();
|
||||||
|
}
|
||||||
|
|
||||||
step "s1-blocking-shard-split"
|
step "s1-blocking-shard-split"
|
||||||
{
|
{
|
||||||
SELECT pg_catalog.citus_split_shard_by_split_points(
|
SELECT pg_catalog.citus_split_shard_by_split_points(
|
||||||
|
@ -92,6 +109,23 @@ step "s2-begin"
|
||||||
BEGIN;
|
BEGIN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
step "s2-print-locks"
|
||||||
|
{
|
||||||
|
SELECT * FROM master_run_on_worker(
|
||||||
|
ARRAY['localhost']::text[],
|
||||||
|
ARRAY[57638]::int[],
|
||||||
|
ARRAY[
|
||||||
|
'SELECT CONCAT(relation::regclass, ''-'', locktype, ''-'', mode) AS LockInfo FROM pg_locks
|
||||||
|
WHERE relation::regclass::text = ''to_split_table_1500002'';'
|
||||||
|
]::text[],
|
||||||
|
false);
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s2-show-pg_dist_cleanup"
|
||||||
|
{
|
||||||
|
SELECT object_name, object_type, policy_type FROM pg_dist_cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
step "s2-blocking-shard-split"
|
step "s2-blocking-shard-split"
|
||||||
{
|
{
|
||||||
SELECT pg_catalog.citus_split_shard_by_split_points(
|
SELECT pg_catalog.citus_split_shard_by_split_points(
|
||||||
|
@ -151,3 +185,8 @@ permutation "s1-insert" "s1-begin" "s1-blocking-shard-split" "s2-blocking-shard-
|
||||||
permutation "s1-load-cache" "s1-begin" "s1-select" "s2-begin" "s2-blocking-shard-split" "s1-ddl" "s2-commit" "s1-commit" "s2-print-cluster" "s2-print-index-count"
|
permutation "s1-load-cache" "s1-begin" "s1-select" "s2-begin" "s2-blocking-shard-split" "s1-ddl" "s2-commit" "s1-commit" "s2-print-cluster" "s2-print-index-count"
|
||||||
// The same tests without loading the cache at first
|
// The same tests without loading the cache at first
|
||||||
permutation "s1-begin" "s1-select" "s2-begin" "s2-blocking-shard-split" "s1-ddl" "s2-commit" "s1-commit" "s2-print-cluster" "s2-print-index-count"
|
permutation "s1-begin" "s1-select" "s2-begin" "s2-blocking-shard-split" "s1-ddl" "s2-commit" "s1-commit" "s2-print-cluster" "s2-print-index-count"
|
||||||
|
|
||||||
|
// With Deferred drop, AccessShareLock (acquired by SELECTS) do not block split from completion.
|
||||||
|
permutation "s1-load-cache" "s1-start-connection" "s1-lock-to-split-shard" "s2-print-locks" "s2-blocking-shard-split" "s2-print-locks" "s2-show-pg_dist_cleanup" "s1-stop-connection"
|
||||||
|
// The same test above without loading the cache at first
|
||||||
|
permutation "s1-start-connection" "s1-lock-to-split-shard" "s2-print-locks" "s2-blocking-shard-split" "s2-print-cluster" "s2-show-pg_dist_cleanup" "s1-stop-connection"
|
||||||
|
|
|
@ -2,15 +2,9 @@ setup
|
||||||
{
|
{
|
||||||
SELECT setval('pg_dist_shardid_seq', 1500000);
|
SELECT setval('pg_dist_shardid_seq', 1500000);
|
||||||
SET citus.shard_count to 2;
|
SET citus.shard_count to 2;
|
||||||
|
SET citus.next_operation_id to 17;
|
||||||
SET citus.shard_replication_factor to 1;
|
SET citus.shard_replication_factor to 1;
|
||||||
|
|
||||||
-- Cleanup any orphan shards that might be left over from a previous run.
|
|
||||||
CREATE OR REPLACE FUNCTION run_try_drop_marked_shards()
|
|
||||||
RETURNS VOID
|
|
||||||
AS 'citus'
|
|
||||||
LANGUAGE C STRICT VOLATILE;
|
|
||||||
SELECT run_try_drop_marked_shards();
|
|
||||||
|
|
||||||
CREATE TABLE reference_table (id int PRIMARY KEY, value int);
|
CREATE TABLE reference_table (id int PRIMARY KEY, value int);
|
||||||
SELECT create_reference_table('reference_table');
|
SELECT create_reference_table('reference_table');
|
||||||
|
|
||||||
|
@ -20,6 +14,13 @@ setup
|
||||||
|
|
||||||
teardown
|
teardown
|
||||||
{
|
{
|
||||||
|
-- Cleanup any orphan shards that might be left over from a previous run.
|
||||||
|
CREATE OR REPLACE FUNCTION run_try_drop_marked_shards()
|
||||||
|
RETURNS VOID
|
||||||
|
AS 'citus'
|
||||||
|
LANGUAGE C STRICT VOLATILE;
|
||||||
|
SELECT run_try_drop_marked_shards();
|
||||||
|
|
||||||
DROP TABLE table_to_split CASCADE;
|
DROP TABLE table_to_split CASCADE;
|
||||||
DROP TABLE reference_table CASCADE;
|
DROP TABLE reference_table CASCADE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
#include "isolation_mx_common.include.spec"
|
||||||
|
|
||||||
// Test scenario for nonblocking split and concurrent INSERT/UPDATE/DELETE
|
// Test scenario for nonblocking split and concurrent INSERT/UPDATE/DELETE
|
||||||
// session s1 - Executes non-blocking shard split
|
// session s1 - Executes non-blocking shard split
|
||||||
// session s2 - Does concurrent writes
|
// session s2 - Does concurrent writes
|
||||||
|
@ -10,6 +12,12 @@ setup
|
||||||
SET citus.shard_replication_factor to 1;
|
SET citus.shard_replication_factor to 1;
|
||||||
SELECT setval('pg_dist_shardid_seq', 1500000);
|
SELECT setval('pg_dist_shardid_seq', 1500000);
|
||||||
|
|
||||||
|
CREATE TABLE to_split_table (id int PRIMARY KEY, value int);
|
||||||
|
SELECT create_distributed_table('to_split_table', 'id');
|
||||||
|
}
|
||||||
|
|
||||||
|
teardown
|
||||||
|
{
|
||||||
-- Cleanup any orphan shards that might be left over from a previous run.
|
-- Cleanup any orphan shards that might be left over from a previous run.
|
||||||
CREATE OR REPLACE FUNCTION run_try_drop_marked_shards()
|
CREATE OR REPLACE FUNCTION run_try_drop_marked_shards()
|
||||||
RETURNS VOID
|
RETURNS VOID
|
||||||
|
@ -17,12 +25,6 @@ setup
|
||||||
LANGUAGE C STRICT VOLATILE;
|
LANGUAGE C STRICT VOLATILE;
|
||||||
SELECT run_try_drop_marked_shards();
|
SELECT run_try_drop_marked_shards();
|
||||||
|
|
||||||
CREATE TABLE to_split_table (id int PRIMARY KEY, value int);
|
|
||||||
SELECT create_distributed_table('to_split_table', 'id');
|
|
||||||
}
|
|
||||||
|
|
||||||
teardown
|
|
||||||
{
|
|
||||||
DROP TABLE to_split_table;
|
DROP TABLE to_split_table;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,6 +43,21 @@ step "s1-load-cache"
|
||||||
TRUNCATE to_split_table;
|
TRUNCATE to_split_table;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
step "s1-lock-to-split-shard"
|
||||||
|
{
|
||||||
|
SELECT run_commands_on_session_level_connection_to_node('BEGIN; LOCK TABLE to_split_table_1500001 IN ACCESS SHARE MODE;');
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s1-start-connection"
|
||||||
|
{
|
||||||
|
SELECT start_session_level_connection_to_node('localhost', 57637);
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s1-stop-connection"
|
||||||
|
{
|
||||||
|
SELECT stop_session_level_connection_to_node();
|
||||||
|
}
|
||||||
|
|
||||||
step "s1-non-blocking-shard-split"
|
step "s1-non-blocking-shard-split"
|
||||||
{
|
{
|
||||||
SELECT pg_catalog.citus_split_shard_by_split_points(
|
SELECT pg_catalog.citus_split_shard_by_split_points(
|
||||||
|
@ -88,6 +105,32 @@ step "s2-end"
|
||||||
COMMIT;
|
COMMIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
step "s2-non-blocking-shard-split"
|
||||||
|
{
|
||||||
|
SELECT pg_catalog.citus_split_shard_by_split_points(
|
||||||
|
1500001,
|
||||||
|
ARRAY['-1073741824'],
|
||||||
|
ARRAY[1, 2],
|
||||||
|
'force_logical');
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s2-print-locks"
|
||||||
|
{
|
||||||
|
SELECT * FROM master_run_on_worker(
|
||||||
|
ARRAY['localhost']::text[],
|
||||||
|
ARRAY[57637]::int[],
|
||||||
|
ARRAY[
|
||||||
|
'SELECT CONCAT(relation::regclass, ''-'', locktype, ''-'', mode) AS LockInfo FROM pg_locks
|
||||||
|
WHERE relation::regclass::text = ''to_split_table_1500001'';'
|
||||||
|
]::text[],
|
||||||
|
false);
|
||||||
|
}
|
||||||
|
|
||||||
|
step "s2-show-pg_dist_cleanup"
|
||||||
|
{
|
||||||
|
SELECT object_name, object_type, policy_type FROM pg_dist_cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
step "s2-print-cluster"
|
step "s2-print-cluster"
|
||||||
{
|
{
|
||||||
-- row count per shard
|
-- row count per shard
|
||||||
|
@ -163,3 +206,9 @@ permutation "s1-load-cache" "s2-print-cluster" "s3-acquire-advisory-lock" "s1-be
|
||||||
permutation "s2-print-cluster" "s3-acquire-advisory-lock" "s1-begin" "s2-begin" "s1-non-blocking-shard-split" "s2-insert" "s2-end" "s2-print-cluster" "s3-release-advisory-lock" "s1-end" "s2-print-cluster"
|
permutation "s2-print-cluster" "s3-acquire-advisory-lock" "s1-begin" "s2-begin" "s1-non-blocking-shard-split" "s2-insert" "s2-end" "s2-print-cluster" "s3-release-advisory-lock" "s1-end" "s2-print-cluster"
|
||||||
permutation "s2-insert" "s2-print-cluster" "s3-acquire-advisory-lock" "s1-begin" "s1-non-blocking-shard-split" "s2-update" "s3-release-advisory-lock" "s1-end" "s2-print-cluster"
|
permutation "s2-insert" "s2-print-cluster" "s3-acquire-advisory-lock" "s1-begin" "s1-non-blocking-shard-split" "s2-update" "s3-release-advisory-lock" "s1-end" "s2-print-cluster"
|
||||||
permutation "s2-insert" "s2-print-cluster" "s3-acquire-advisory-lock" "s1-begin" "s1-non-blocking-shard-split" "s2-delete" "s3-release-advisory-lock" "s1-end" "s2-print-cluster"
|
permutation "s2-insert" "s2-print-cluster" "s3-acquire-advisory-lock" "s1-begin" "s1-non-blocking-shard-split" "s2-delete" "s3-release-advisory-lock" "s1-end" "s2-print-cluster"
|
||||||
|
|
||||||
|
|
||||||
|
// With Deferred drop, AccessShareLock (acquired by SELECTS) do not block split from completion.
|
||||||
|
permutation "s1-load-cache" "s1-start-connection" "s1-lock-to-split-shard" "s2-print-locks" "s2-non-blocking-shard-split" "s2-print-locks" "s2-show-pg_dist_cleanup" "s1-stop-connection"
|
||||||
|
// The same test above without loading the cache at first
|
||||||
|
permutation "s1-start-connection" "s1-lock-to-split-shard" "s2-print-locks" "s2-non-blocking-shard-split" "s2-print-cluster" "s2-show-pg_dist_cleanup" "s1-stop-connection"
|
||||||
|
|
|
@ -10,13 +10,6 @@ setup
|
||||||
SET citus.shard_count to 2;
|
SET citus.shard_count to 2;
|
||||||
SET citus.shard_replication_factor to 1;
|
SET citus.shard_replication_factor to 1;
|
||||||
|
|
||||||
-- Cleanup any orphan shards that might be left over from a previous run.
|
|
||||||
CREATE OR REPLACE FUNCTION run_try_drop_marked_shards()
|
|
||||||
RETURNS VOID
|
|
||||||
AS 'citus'
|
|
||||||
LANGUAGE C STRICT VOLATILE;
|
|
||||||
SELECT run_try_drop_marked_shards();
|
|
||||||
|
|
||||||
CREATE TABLE reference_table (id int PRIMARY KEY, value int);
|
CREATE TABLE reference_table (id int PRIMARY KEY, value int);
|
||||||
SELECT create_reference_table('reference_table');
|
SELECT create_reference_table('reference_table');
|
||||||
|
|
||||||
|
@ -26,6 +19,13 @@ setup
|
||||||
|
|
||||||
teardown
|
teardown
|
||||||
{
|
{
|
||||||
|
-- Cleanup any orphan shards that might be left over from a previous run.
|
||||||
|
CREATE OR REPLACE FUNCTION run_try_drop_marked_shards()
|
||||||
|
RETURNS VOID
|
||||||
|
AS 'citus'
|
||||||
|
LANGUAGE C STRICT VOLATILE;
|
||||||
|
SELECT run_try_drop_marked_shards();
|
||||||
|
|
||||||
DROP TABLE table_to_split CASCADE;
|
DROP TABLE table_to_split CASCADE;
|
||||||
DROP TABLE reference_table CASCADE;
|
DROP TABLE reference_table CASCADE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,13 +9,6 @@ setup
|
||||||
SET citus.shard_replication_factor to 1;
|
SET citus.shard_replication_factor to 1;
|
||||||
SELECT setval('pg_dist_shardid_seq', 1500000);
|
SELECT setval('pg_dist_shardid_seq', 1500000);
|
||||||
|
|
||||||
-- Cleanup any orphan shards that might be left over from a previous run.
|
|
||||||
CREATE OR REPLACE FUNCTION run_try_drop_marked_shards()
|
|
||||||
RETURNS VOID
|
|
||||||
AS 'citus'
|
|
||||||
LANGUAGE C STRICT VOLATILE;
|
|
||||||
SELECT run_try_drop_marked_shards();
|
|
||||||
|
|
||||||
CREATE TABLE to_split_table (id int NOT NULL, value int);
|
CREATE TABLE to_split_table (id int NOT NULL, value int);
|
||||||
CREATE UNIQUE INDEX split_table_index ON to_split_table(id);
|
CREATE UNIQUE INDEX split_table_index ON to_split_table(id);
|
||||||
ALTER TABLE to_split_table REPLICA IDENTITY USING INDEX split_table_index;
|
ALTER TABLE to_split_table REPLICA IDENTITY USING INDEX split_table_index;
|
||||||
|
@ -25,6 +18,13 @@ setup
|
||||||
|
|
||||||
teardown
|
teardown
|
||||||
{
|
{
|
||||||
|
-- Cleanup any orphan shards that might be left over from a previous run.
|
||||||
|
CREATE OR REPLACE FUNCTION run_try_drop_marked_shards()
|
||||||
|
RETURNS VOID
|
||||||
|
AS 'citus'
|
||||||
|
LANGUAGE C STRICT VOLATILE;
|
||||||
|
SELECT run_try_drop_marked_shards();
|
||||||
|
|
||||||
DROP TABLE to_split_table CASCADE;
|
DROP TABLE to_split_table CASCADE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue