diff --git a/src/test/regress/expected/isolation_reference_table.out b/src/test/regress/expected/isolation_reference_table.out new file mode 100644 index 000000000..70fafbd10 --- /dev/null +++ b/src/test/regress/expected/isolation_reference_table.out @@ -0,0 +1,105 @@ +unused step name: s1-abort +unused step name: s2-abort +Parsed test spec with 2 sessions + +starting permutation: s1-begin s1-create s2-create s1-commit +create_reference_table +--------------------------------------------------------------------- + +(1 row) + +step s1-begin: + BEGIN; + +step s1-create: + CREATE TABLE reference_table_s1(a int); + SELECT create_reference_table('reference_table_s1'); + +create_reference_table +--------------------------------------------------------------------- + +(1 row) + +step s2-create: + CREATE TABLE reference_table_s2(a int); + SELECT create_reference_table('reference_table_s2'); + +create_reference_table +--------------------------------------------------------------------- + +(1 row) + +step s1-commit: + COMMIT; + + +starting permutation: s1-create s2-create s1-begin s1-drop s2-drop s1-commit +create_reference_table +--------------------------------------------------------------------- + +(1 row) + +step s1-create: + CREATE TABLE reference_table_s1(a int); + SELECT create_reference_table('reference_table_s1'); + +create_reference_table +--------------------------------------------------------------------- + +(1 row) + +step s2-create: + CREATE TABLE reference_table_s2(a int); + SELECT create_reference_table('reference_table_s2'); + +create_reference_table +--------------------------------------------------------------------- + +(1 row) + +step s1-begin: + BEGIN; + +step s1-drop: + DROP TABLE reference_table_s1; + +step s2-drop: + DROP TABLE reference_table_s2; + +step s1-commit: + COMMIT; + + +starting permutation: s1-create s2-begin s2-create s1-drop s2-commit +create_reference_table +--------------------------------------------------------------------- + +(1 row) + +step s1-create: + CREATE TABLE reference_table_s1(a int); + SELECT create_reference_table('reference_table_s1'); + +create_reference_table +--------------------------------------------------------------------- + +(1 row) + +step s2-begin: + BEGIN; + +step s2-create: + CREATE TABLE reference_table_s2(a int); + SELECT create_reference_table('reference_table_s2'); + +create_reference_table +--------------------------------------------------------------------- + +(1 row) + +step s1-drop: + DROP TABLE reference_table_s1; + +step s2-commit: + COMMIT; + diff --git a/src/test/regress/isolation_schedule b/src/test/regress/isolation_schedule index b9a0f8e88..94444c7ce 100644 --- a/src/test/regress/isolation_schedule +++ b/src/test/regress/isolation_schedule @@ -69,6 +69,7 @@ test: isolation_undistribute_table test: isolation_fix_partition_shard_index_names test: isolation_global_pid test: isolation_citus_locks +test: isolation_reference_table # Rebalancer test: isolation_blocking_move_single_shard_commands diff --git a/src/test/regress/spec/isolation_reference_table.spec b/src/test/regress/spec/isolation_reference_table.spec new file mode 100644 index 000000000..3920a4185 --- /dev/null +++ b/src/test/regress/spec/isolation_reference_table.spec @@ -0,0 +1,80 @@ +// reference tables _do_ lock on the first reference table in the shardgroup due to the lack of shardgroups in the +// system. When we run the tests we want to make sure the tables we are testing against cannot be the first reference +// table. For this purpose we create a reference table that we will _not_ interact with during the tests. +setup +{ + CREATE TABLE first_reference_table(a int); + SELECT create_reference_table('first_reference_table'); +} + +teardown +{ + DROP TABLE first_reference_table; + DROP TABLE IF EXISTS reference_table_s1; + DROP TABLE IF EXISTS reference_table_s2; +} + +session "s1" + +step "s1-begin" +{ + BEGIN; +} + +step "s1-create" +{ + CREATE TABLE reference_table_s1(a int); + SELECT create_reference_table('reference_table_s1'); +} + +step "s1-drop" +{ + DROP TABLE reference_table_s1; +} + +step "s1-abort" +{ + ABORT; +} + +step "s1-commit" +{ + COMMIT; +} + +session "s2" + +step "s2-begin" +{ + BEGIN; +} + +step "s2-create" +{ + CREATE TABLE reference_table_s2(a int); + SELECT create_reference_table('reference_table_s2'); +} + +step "s2-drop" +{ + DROP TABLE reference_table_s2; +} + +step "s2-abort" +{ + ABORT; +} + +step "s2-commit" +{ + COMMIT; +} + +// creates don't block each other +permutation "s1-begin" "s1-create" "s2-create" "s1-commit" + +// drops don't block each other +permutation "s1-create" "s2-create" "s1-begin" "s1-drop" "s2-drop" "s1-commit" + +// create and drop don't block each other +permutation "s1-create" "s2-begin" "s2-create" "s1-drop" "s2-commit" \ No newline at end of file