mirror of https://github.com/citusdata/citus.git
175 lines
4.7 KiB
Ruby
175 lines
4.7 KiB
Ruby
setup
|
|
{
|
|
CREATE TABLE write_concurrency_index (a text, b int unique,
|
|
EXCLUDE USING hash (a WITH =)) USING columnar;
|
|
}
|
|
|
|
teardown
|
|
{
|
|
DROP TABLE IF EXISTS write_concurrency_index CASCADE;
|
|
}
|
|
|
|
session "s1"
|
|
|
|
step "s1-begin"
|
|
{
|
|
BEGIN;
|
|
}
|
|
|
|
step "s1-commit"
|
|
{
|
|
COMMIT;
|
|
}
|
|
|
|
step "s1-rollback"
|
|
{
|
|
ROLLBACK;
|
|
}
|
|
|
|
step "s1-insert-1"
|
|
{
|
|
INSERT INTO write_concurrency_index SELECT (3*s)::text, s FROM generate_series(1,2) s;
|
|
}
|
|
|
|
step "s1-insert-2"
|
|
{
|
|
INSERT INTO write_concurrency_index SELECT s::text, 3*s FROM generate_series(1,2) s;
|
|
}
|
|
|
|
step "s1-copy-1"
|
|
{
|
|
COPY write_concurrency_index(b) FROM PROGRAM 'seq 1 2';
|
|
}
|
|
|
|
step "s1-select-all"
|
|
{
|
|
SELECT * FROM write_concurrency_index ORDER BY a,b;
|
|
}
|
|
|
|
session "s2"
|
|
|
|
step "s2-begin"
|
|
{
|
|
BEGIN;
|
|
}
|
|
|
|
step "s2-begin-repeatable"
|
|
{
|
|
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
|
}
|
|
|
|
step "s2-commit"
|
|
{
|
|
COMMIT;
|
|
}
|
|
|
|
step "s2-rollback"
|
|
{
|
|
ROLLBACK;
|
|
}
|
|
|
|
step "s2-insert-1"
|
|
{
|
|
INSERT INTO write_concurrency_index SELECT (2*s)::text, s FROM generate_series(1,4) s;
|
|
}
|
|
|
|
step "s2-insert-2"
|
|
{
|
|
INSERT INTO write_concurrency_index SELECT (5*s)::text, s FROM generate_series(1,2) s;
|
|
}
|
|
|
|
step "s2-insert-3"
|
|
{
|
|
INSERT INTO write_concurrency_index SELECT (5*s)::text, s FROM generate_series(3,4) s;
|
|
}
|
|
|
|
step "s2-insert-4"
|
|
{
|
|
INSERT INTO write_concurrency_index SELECT s::text, 2*s FROM generate_series(1,4) s;
|
|
}
|
|
|
|
step "s2-insert-5"
|
|
{
|
|
INSERT INTO write_concurrency_index SELECT s::text, 5*s FROM generate_series(1,2) s;
|
|
}
|
|
|
|
step "s2-insert-6"
|
|
{
|
|
INSERT INTO write_concurrency_index SELECT s::text, 5*s FROM generate_series(3,4) s;
|
|
}
|
|
|
|
step "s2-copy-1"
|
|
{
|
|
COPY write_concurrency_index(b) FROM PROGRAM 'seq 1 4';
|
|
}
|
|
|
|
step "s2-copy-2"
|
|
{
|
|
COPY write_concurrency_index(b) FROM PROGRAM 'seq 3 4';
|
|
}
|
|
|
|
step "s2-index-select-all-b"
|
|
{
|
|
SET enable_seqscan TO OFF;
|
|
SET columnar.enable_custom_scan TO OFF;
|
|
SELECT b FROM write_concurrency_index ORDER BY 1;
|
|
}
|
|
|
|
session "s3"
|
|
|
|
step "s3-insert-1"
|
|
{
|
|
INSERT INTO write_concurrency_index SELECT (7*s)::text, s FROM generate_series(3,4) s;
|
|
}
|
|
|
|
step "s3-insert-2"
|
|
{
|
|
INSERT INTO write_concurrency_index SELECT (7*s)::text, s FROM generate_series(2,3) s;
|
|
}
|
|
|
|
step "s3-insert-3"
|
|
{
|
|
INSERT INTO write_concurrency_index SELECT s::text, 7*s FROM generate_series(3,4) s;
|
|
}
|
|
|
|
step "s3-insert-4"
|
|
{
|
|
INSERT INTO write_concurrency_index SELECT s::text, 7*s FROM generate_series(2,3) s;
|
|
}
|
|
|
|
step "s3-index-select-all-b"
|
|
{
|
|
SET enable_seqscan TO OFF;
|
|
SET columnar.enable_custom_scan TO OFF;
|
|
SELECT b FROM write_concurrency_index ORDER BY 1;
|
|
}
|
|
|
|
// unique (btree) on int column
|
|
permutation "s1-begin" "s1-insert-1" "s2-copy-1" "s1-commit" "s1-select-all"
|
|
permutation "s1-begin" "s1-copy-1" "s2-insert-1" "s1-rollback" "s1-select-all"
|
|
permutation "s1-begin" "s1-copy-1" "s2-insert-2" "s3-insert-1" "s1-commit" "s1-select-all"
|
|
permutation "s1-begin" "s1-insert-1" "s2-insert-2" "s3-insert-1" "s1-rollback" "s1-select-all"
|
|
permutation "s1-begin" "s2-begin" "s1-insert-1" "s2-insert-3" "s3-insert-2" "s1-commit" "s2-rollback" "s1-select-all"
|
|
permutation "s1-begin" "s2-begin" "s1-copy-1" "s2-copy-2" "s3-insert-2" "s1-rollback" "s2-commit" "s1-select-all"
|
|
permutation "s1-begin" "s2-begin" "s1-insert-1" "s2-copy-2" "s3-insert-2" "s1-rollback" "s2-rollback" "s1-select-all"
|
|
|
|
// exclusion (hash) on text column that checks against duplicate values
|
|
permutation "s1-begin" "s1-insert-2" "s2-insert-4" "s1-rollback" "s1-select-all"
|
|
permutation "s1-begin" "s1-insert-2" "s2-insert-5" "s3-insert-3" "s1-commit" "s1-select-all"
|
|
permutation "s1-begin" "s2-begin" "s1-insert-2" "s2-insert-6" "s3-insert-4" "s1-commit" "s2-rollback" "s1-select-all"
|
|
permutation "s1-begin" "s2-begin" "s1-insert-2" "s2-insert-6" "s3-insert-4" "s1-rollback" "s2-rollback" "s1-select-all"
|
|
|
|
// make sure that pending writes are not visible to other backends
|
|
permutation "s1-begin" "s1-insert-1" "s2-index-select-all-b" "s1-rollback"
|
|
permutation "s1-begin" "s2-begin" "s1-insert-1" "s2-copy-2" "s2-index-select-all-b" "s3-index-select-all-b" "s1-commit" "s2-index-select-all-b" "s2-rollback"
|
|
|
|
// force flushing write state of s1 before inserting some more data via other sessions
|
|
permutation "s1-begin" "s2-begin" "s1-insert-1" "s1-select-all" "s2-insert-1" "s1-commit" "s2-rollback"
|
|
permutation "s1-begin" "s2-begin" "s1-insert-1" "s1-select-all" "s2-insert-1" "s1-rollback" "s2-rollback"
|
|
permutation "s1-begin" "s1-copy-1" "s1-select-all" "s2-insert-2" "s3-insert-1" "s1-rollback" "s1-select-all"
|
|
permutation "s1-begin" "s1-insert-2" "s1-select-all" "s2-insert-5" "s3-insert-3" "s1-commit" "s1-select-all"
|
|
permutation "s1-begin" "s2-begin" "s1-insert-2" "s1-select-all" "s2-insert-6" "s3-insert-4" "s1-rollback" "s2-rollback" "s1-select-all"
|
|
|
|
// test with repeatable read isolation mode
|
|
permutation "s1-begin" "s2-begin-repeatable" "s1-insert-1" "s2-insert-1" "s1-commit" "s2-rollback"
|