mirror of https://github.com/citusdata/citus.git
141 lines
4.0 KiB
Ruby
141 lines
4.0 KiB
Ruby
// we use 5 as the partition key value through out the test
|
|
// so setting the corresponding shard here is useful
|
|
setup
|
|
{
|
|
SET citus.shard_count TO 8;
|
|
SET citus.shard_replication_factor TO 1;
|
|
CREATE TABLE test_move_placement (x int, y int);
|
|
SELECT create_distributed_table('test_move_placement', 'x');
|
|
|
|
SELECT get_shard_id_for_distribution_column('test_move_placement', 5) INTO selected_shard;
|
|
}
|
|
|
|
teardown
|
|
{
|
|
DROP TABLE test_move_placement;
|
|
DROP TABLE selected_shard;
|
|
}
|
|
|
|
session "s1"
|
|
|
|
step "s1-begin"
|
|
{
|
|
BEGIN;
|
|
-- the tests are written with the logic where single shard SELECTs
|
|
-- do not to open transaction blocks
|
|
SET citus.select_opens_transaction_block TO false;
|
|
}
|
|
|
|
// since test_move_placement has rep > 1 simple select query doesn't hit all placements
|
|
// hence not all placements are cached
|
|
step "s1-load-cache"
|
|
{
|
|
TRUNCATE test_move_placement;
|
|
}
|
|
|
|
step "s1-insert"
|
|
{
|
|
INSERT INTO test_move_placement VALUES (5, 10);
|
|
}
|
|
|
|
step "s1-update"
|
|
{
|
|
UPDATE test_move_placement SET y = 5 WHERE x = 5;
|
|
}
|
|
|
|
step "s1-delete"
|
|
{
|
|
DELETE FROM test_move_placement WHERE x = 5;
|
|
}
|
|
|
|
step "s1-select"
|
|
{
|
|
SELECT count(*) FROM test_move_placement WHERE x = 5;
|
|
}
|
|
|
|
step "s1-ddl"
|
|
{
|
|
CREATE INDEX test_move_placement_index ON test_move_placement(x);
|
|
}
|
|
|
|
step "s1-copy"
|
|
{
|
|
COPY test_move_placement FROM PROGRAM 'echo "1,1\n2,2\n3,3\n4,4\n5,5"' WITH CSV;
|
|
}
|
|
|
|
step "s1-commit"
|
|
{
|
|
COMMIT;
|
|
}
|
|
|
|
session "s2"
|
|
|
|
step "s2-begin"
|
|
{
|
|
BEGIN;
|
|
}
|
|
|
|
|
|
step "s2-move-placement"
|
|
{
|
|
SELECT master_move_shard_placement((SELECT * FROM selected_shard), 'localhost', 57638, 'localhost', 57637, 'force_logical');
|
|
}
|
|
|
|
step "s2-commit"
|
|
{
|
|
COMMIT;
|
|
}
|
|
|
|
step "s2-print-content"
|
|
{
|
|
SELECT
|
|
nodeport, success, result
|
|
FROM
|
|
run_command_on_placements('test_move_placement', 'select y from %s WHERE x = 5')
|
|
WHERE
|
|
shardid IN (SELECT * FROM selected_shard)
|
|
ORDER BY
|
|
nodeport;
|
|
}
|
|
|
|
step "s2-print-index-count"
|
|
{
|
|
SELECT
|
|
nodeport, success, result
|
|
FROM
|
|
run_command_on_placements('test_move_placement', 'select count(*) from pg_indexes WHERE tablename = ''%s''')
|
|
ORDER BY
|
|
nodeport;
|
|
}
|
|
|
|
step "s2-print-placements"
|
|
{
|
|
SELECT
|
|
nodename, nodeport, count(*)
|
|
FROM
|
|
pg_dist_shard_placement
|
|
WHERE
|
|
shardid IN (SELECT shardid FROM pg_dist_shard WHERE logicalrelid = 'test_move_placement'::regclass)
|
|
AND
|
|
shardstate = 1
|
|
GROUP BY
|
|
nodename, nodeport;
|
|
}
|
|
|
|
// move a placement while concurrently performing an update/delete/insert/copy
|
|
// note that at some points we use "s1-select" just after "s1-begin" given that BEGIN
|
|
// may invalidate cache at certain cases
|
|
permutation "s1-load-cache" "s1-insert" "s1-begin" "s1-select" "s2-begin" "s2-move-placement" "s1-update" "s2-commit" "s1-commit" "s2-print-content" "s2-print-placements"
|
|
permutation "s1-load-cache" "s1-insert" "s1-begin" "s1-select" "s2-begin" "s2-move-placement" "s1-delete" "s2-commit" "s1-commit" "s2-print-content" "s2-print-placements"
|
|
permutation "s1-load-cache" "s1-begin" "s1-select" "s2-begin" "s2-move-placement" "s1-insert" "s2-commit" "s1-commit" "s2-print-content" "s2-print-placements"
|
|
permutation "s1-load-cache" "s1-begin" "s1-select" "s2-begin" "s2-move-placement" "s1-copy" "s2-commit" "s1-commit" "s2-print-content" "s2-print-placements"
|
|
permutation "s1-load-cache" "s1-begin" "s1-select" "s2-begin" "s2-move-placement" "s1-ddl" "s2-commit" "s1-commit" "s2-print-index-count" "s2-print-placements"
|
|
|
|
|
|
// the same tests without loading the cache at first
|
|
permutation "s1-insert" "s1-begin" "s1-select" "s2-begin" "s2-move-placement" "s1-update" "s2-commit" "s1-commit" "s2-print-content" "s2-print-placements"
|
|
permutation "s1-insert" "s1-begin" "s1-select" "s2-begin" "s2-move-placement" "s1-delete" "s2-commit" "s1-commit" "s2-print-content" "s2-print-placements"
|
|
permutation "s1-begin" "s1-select" "s2-begin" "s2-move-placement" "s1-insert" "s2-commit" "s1-commit" "s2-print-content" "s2-print-placements"
|
|
permutation "s1-begin" "s1-select" "s2-begin" "s2-move-placement" "s1-copy" "s2-commit" "s1-commit" "s2-print-content" "s2-print-placements"
|
|
permutation "s1-begin" "s1-select" "s2-begin" "s2-move-placement" "s1-ddl" "s2-commit" "s1-commit" "s2-print-index-count" "s2-print-placements"
|