citus/src/test/regress/spec/isolation_cancellation.spec

81 lines
1.7 KiB
Plaintext

// Tests around cancelling statements. As we can't trigger cancel
// interrupts directly, we use statement_timeout instead, which largely
// behaves the same as proper cancellation.
setup
{
CREATE TABLE cancel_table (test_id integer NOT NULL, data text);
SELECT create_distributed_table('cancel_table', 'test_id', 'hash');
INSERT INTO cancel_table VALUES(1);
}
teardown
{
DROP TABLE IF EXISTS cancel_table;
}
session "s1"
step "s1-begin"
{
BEGIN;
}
step "s1-commit"
{
COMMIT;
}
step "s1-rollback"
{
ROLLBACK;
}
step "s1-sleep10000"
{
SELECT pg_sleep(10000) FROM cancel_table WHERE test_id = 1;
}
step "s1-timeout"
{
SET statement_timeout = '100ms';
}
step "s1-update1"
{
UPDATE cancel_table SET data = '' WHERE test_id = 1;
}
step "s1-reset"
{
RESET ALL;
}
step "s1-drop"
{
DROP TABLE cancel_table;
}
session "s2"
step "s2-drop"
{
DROP TABLE cancel_table;
}
// check that statement cancel works for plain selects, drop table
// afterwards to make sure sleep on workers is cancelled (thereby not
// preventing drop via locks)
permutation "s1-timeout" "s1-sleep10000" "s1-reset" "s1-drop"
permutation "s1-timeout" "s1-sleep10000" "s1-reset" "s2-drop"
// check that statement cancel works for selects in transaction
permutation "s1-timeout" "s1-begin" "s1-sleep10000" "s1-rollback" "s1-reset" "s1-drop"
permutation "s1-timeout" "s1-begin" "s1-sleep10000" "s1-rollback" "s1-reset" "s2-drop"
// check that statement cancel works for selects in transaction, that previously wrote
permutation "s1-timeout" "s1-begin" "s1-update1" "s1-sleep10000" "s1-rollback" "s1-reset" "s1-drop"
permutation "s1-timeout" "s1-begin" "s1-update1" "s1-sleep10000" "s1-rollback" "s1-reset" "s2-drop"