mirror of https://github.com/citusdata/citus.git
PG17 compatibility: Fix Isolation Test Failure in isolation_multiuser_locking (#7714)
This PR enhances `isolation_multiuser_locking.spec` test compatibility across multiple PostgreSQL versions by handling differences in error messages and behavior. Key updates include: - **Error Message Handling:** Adjustments to manage version-specific error messages, ensuring consistent test results. - Modified to address variations in locking behavior across PostgreSQL versions, ensuring test stability in multiuser scenarios. - **REINDEX Behavior Adjustment**: This PR accounts for a behavioral change introduced in PostgreSQL by commit ecb0fd337, which alters how REINDEX interacts with system catalogs. https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=ecb0fd337 --------- Co-authored-by: Mehmet YILMAZ <mehmet.yilmaz@microsoft.com>pull/7922/head
parent
09e96831b3
commit
29bd3dc41c
|
@ -7,31 +7,31 @@ create_distributed_table
|
|||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s2-reindex:
|
||||
REINDEX TABLE test_table;
|
||||
REINDEX TABLE test_table;
|
||||
|
||||
ERROR: must be owner of table test_table
|
||||
ERROR: permission denied for table test_table
|
||||
step s1-insert:
|
||||
UPDATE test_table SET column2 = 1;
|
||||
UPDATE test_table SET column2 = 1;
|
||||
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-grant s1-begin s2-begin s2-reindex s1-insert s2-insert s2-commit s1-commit
|
||||
|
@ -41,39 +41,38 @@ create_distributed_table
|
|||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-grant:
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s2-reindex:
|
||||
REINDEX TABLE test_table;
|
||||
REINDEX TABLE test_table;
|
||||
|
||||
ERROR: must be owner of table test_table
|
||||
step s1-insert:
|
||||
UPDATE test_table SET column2 = 1;
|
||||
UPDATE test_table SET column2 = 1;
|
||||
<waiting ...>
|
||||
step s2-insert:
|
||||
UPDATE test_table SET column2 = 2;
|
||||
|
||||
step s2-insert:
|
||||
UPDATE test_table SET column2 = 2;
|
||||
|
||||
ERROR: current transaction is aborted, commands ignored until end of transaction block
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
step s1-insert: <... completed>
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-grant s1-begin s2-begin s1-reindex s2-insert s1-insert s1-commit s2-commit
|
||||
|
@ -83,38 +82,38 @@ create_distributed_table
|
|||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-grant:
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s1-reindex:
|
||||
REINDEX TABLE test_table;
|
||||
REINDEX TABLE test_table;
|
||||
|
||||
step s2-insert:
|
||||
UPDATE test_table SET column2 = 2;
|
||||
UPDATE test_table SET column2 = 2;
|
||||
<waiting ...>
|
||||
step s1-insert:
|
||||
UPDATE test_table SET column2 = 1;
|
||||
UPDATE test_table SET column2 = 1;
|
||||
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
step s2-insert: <... completed>
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-begin s2-begin s2-index s1-insert s2-commit s1-commit s2-drop-index
|
||||
|
@ -124,34 +123,34 @@ create_distributed_table
|
|||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s2-index:
|
||||
CREATE INDEX test_index ON test_table(column1);
|
||||
CREATE INDEX test_index ON test_table(column1);
|
||||
|
||||
ERROR: must be owner of table test_table
|
||||
step s1-insert:
|
||||
UPDATE test_table SET column2 = 1;
|
||||
UPDATE test_table SET column2 = 1;
|
||||
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
step s2-drop-index:
|
||||
DROP INDEX IF EXISTS test_index;
|
||||
DROP INDEX IF EXISTS test_index;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-grant s1-begin s2-begin s2-insert s1-index s2-insert s2-commit s1-commit s1-drop-index
|
||||
|
@ -161,41 +160,41 @@ create_distributed_table
|
|||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-grant:
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s2-insert:
|
||||
UPDATE test_table SET column2 = 2;
|
||||
UPDATE test_table SET column2 = 2;
|
||||
|
||||
step s1-index:
|
||||
CREATE INDEX test_index ON test_table(column1);
|
||||
CREATE INDEX test_index ON test_table(column1);
|
||||
<waiting ...>
|
||||
step s2-insert:
|
||||
UPDATE test_table SET column2 = 2;
|
||||
UPDATE test_table SET column2 = 2;
|
||||
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
step s1-index: <... completed>
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
step s1-drop-index:
|
||||
DROP INDEX IF EXISTS test_index;
|
||||
DROP INDEX IF EXISTS test_index;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-grant s1-begin s2-begin s1-index s2-index s1-insert s1-commit s2-commit s1-drop-index s2-drop-index
|
||||
|
@ -205,44 +204,44 @@ create_distributed_table
|
|||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-grant:
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s1-index:
|
||||
CREATE INDEX test_index ON test_table(column1);
|
||||
CREATE INDEX test_index ON test_table(column1);
|
||||
|
||||
step s2-index:
|
||||
CREATE INDEX test_index ON test_table(column1);
|
||||
CREATE INDEX test_index ON test_table(column1);
|
||||
|
||||
ERROR: must be owner of table test_table
|
||||
step s1-insert:
|
||||
UPDATE test_table SET column2 = 1;
|
||||
UPDATE test_table SET column2 = 1;
|
||||
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
step s1-drop-index:
|
||||
DROP INDEX IF EXISTS test_index;
|
||||
DROP INDEX IF EXISTS test_index;
|
||||
|
||||
step s2-drop-index:
|
||||
DROP INDEX IF EXISTS test_index;
|
||||
DROP INDEX IF EXISTS test_index;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-begin s2-begin s2-truncate s1-insert s2-commit s1-commit
|
||||
|
@ -252,31 +251,31 @@ create_distributed_table
|
|||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s2-truncate:
|
||||
TRUNCATE test_table;
|
||||
TRUNCATE test_table;
|
||||
|
||||
ERROR: permission denied for table test_table
|
||||
step s1-insert:
|
||||
UPDATE test_table SET column2 = 1;
|
||||
UPDATE test_table SET column2 = 1;
|
||||
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-grant s1-begin s2-begin s1-truncate s2-insert s1-insert s1-commit s2-commit
|
||||
|
@ -286,38 +285,38 @@ create_distributed_table
|
|||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-grant:
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s1-truncate:
|
||||
TRUNCATE test_table;
|
||||
TRUNCATE test_table;
|
||||
|
||||
step s2-insert:
|
||||
UPDATE test_table SET column2 = 2;
|
||||
UPDATE test_table SET column2 = 2;
|
||||
<waiting ...>
|
||||
step s1-insert:
|
||||
UPDATE test_table SET column2 = 1;
|
||||
UPDATE test_table SET column2 = 1;
|
||||
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
step s2-insert: <... completed>
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-grant s1-begin s2-begin s1-truncate s2-truncate s1-commit s2-commit
|
||||
|
@ -327,33 +326,33 @@ create_distributed_table
|
|||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-grant:
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s1-truncate:
|
||||
TRUNCATE test_table;
|
||||
TRUNCATE test_table;
|
||||
|
||||
step s2-truncate:
|
||||
TRUNCATE test_table;
|
||||
TRUNCATE test_table;
|
||||
<waiting ...>
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
step s2-truncate: <... completed>
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
COMMIT;
|
||||
|
||||
|
|
|
@ -0,0 +1,359 @@
|
|||
Parsed test spec with 2 sessions
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-begin s2-begin s2-reindex s1-insert s2-commit s1-commit
|
||||
create_distributed_table
|
||||
---------------------------------------------------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s2-reindex:
|
||||
REINDEX TABLE test_table;
|
||||
|
||||
ERROR: must be owner of table test_table
|
||||
step s1-insert:
|
||||
UPDATE test_table SET column2 = 1;
|
||||
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-grant s1-begin s2-begin s2-reindex s1-insert s2-insert s2-commit s1-commit
|
||||
create_distributed_table
|
||||
---------------------------------------------------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-grant:
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s2-reindex:
|
||||
REINDEX TABLE test_table;
|
||||
|
||||
ERROR: must be owner of table test_table
|
||||
step s1-insert:
|
||||
UPDATE test_table SET column2 = 1;
|
||||
|
||||
step s2-insert:
|
||||
UPDATE test_table SET column2 = 2;
|
||||
|
||||
ERROR: current transaction is aborted, commands ignored until end of transaction block
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-grant s1-begin s2-begin s1-reindex s2-insert s1-insert s1-commit s2-commit
|
||||
create_distributed_table
|
||||
---------------------------------------------------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-grant:
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s1-reindex:
|
||||
REINDEX TABLE test_table;
|
||||
|
||||
step s2-insert:
|
||||
UPDATE test_table SET column2 = 2;
|
||||
<waiting ...>
|
||||
step s1-insert:
|
||||
UPDATE test_table SET column2 = 1;
|
||||
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
|
||||
step s2-insert: <... completed>
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-begin s2-begin s2-index s1-insert s2-commit s1-commit s2-drop-index
|
||||
create_distributed_table
|
||||
---------------------------------------------------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s2-index:
|
||||
CREATE INDEX test_index ON test_table(column1);
|
||||
|
||||
ERROR: must be owner of table test_table
|
||||
step s1-insert:
|
||||
UPDATE test_table SET column2 = 1;
|
||||
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
|
||||
step s2-drop-index:
|
||||
DROP INDEX IF EXISTS test_index;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-grant s1-begin s2-begin s2-insert s1-index s2-insert s2-commit s1-commit s1-drop-index
|
||||
create_distributed_table
|
||||
---------------------------------------------------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-grant:
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s2-insert:
|
||||
UPDATE test_table SET column2 = 2;
|
||||
|
||||
step s1-index:
|
||||
CREATE INDEX test_index ON test_table(column1);
|
||||
<waiting ...>
|
||||
step s2-insert:
|
||||
UPDATE test_table SET column2 = 2;
|
||||
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
|
||||
step s1-index: <... completed>
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
|
||||
step s1-drop-index:
|
||||
DROP INDEX IF EXISTS test_index;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-grant s1-begin s2-begin s1-index s2-index s1-insert s1-commit s2-commit s1-drop-index s2-drop-index
|
||||
create_distributed_table
|
||||
---------------------------------------------------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-grant:
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s1-index:
|
||||
CREATE INDEX test_index ON test_table(column1);
|
||||
|
||||
step s2-index:
|
||||
CREATE INDEX test_index ON test_table(column1);
|
||||
|
||||
ERROR: must be owner of table test_table
|
||||
step s1-insert:
|
||||
UPDATE test_table SET column2 = 1;
|
||||
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
|
||||
step s1-drop-index:
|
||||
DROP INDEX IF EXISTS test_index;
|
||||
|
||||
step s2-drop-index:
|
||||
DROP INDEX IF EXISTS test_index;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-begin s2-begin s2-truncate s1-insert s2-commit s1-commit
|
||||
create_distributed_table
|
||||
---------------------------------------------------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s2-truncate:
|
||||
TRUNCATE test_table;
|
||||
|
||||
ERROR: permission denied for table test_table
|
||||
step s1-insert:
|
||||
UPDATE test_table SET column2 = 1;
|
||||
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-grant s1-begin s2-begin s1-truncate s2-insert s1-insert s1-commit s2-commit
|
||||
create_distributed_table
|
||||
---------------------------------------------------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-grant:
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s1-truncate:
|
||||
TRUNCATE test_table;
|
||||
|
||||
step s2-insert:
|
||||
UPDATE test_table SET column2 = 2;
|
||||
<waiting ...>
|
||||
step s1-insert:
|
||||
UPDATE test_table SET column2 = 1;
|
||||
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
|
||||
step s2-insert: <... completed>
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
|
||||
|
||||
starting permutation: s1-no-connection-cache s2-no-connection-cache s1-grant s1-begin s2-begin s1-truncate s2-truncate s1-commit s2-commit
|
||||
create_distributed_table
|
||||
---------------------------------------------------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
step s1-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s2-no-connection-cache:
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
||||
step s1-grant:
|
||||
SET ROLE test_user_1;
|
||||
GRANT ALL ON test_table TO test_user_2;
|
||||
|
||||
step s1-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_1;
|
||||
|
||||
step s2-begin:
|
||||
BEGIN;
|
||||
SET ROLE test_user_2;
|
||||
|
||||
step s1-truncate:
|
||||
TRUNCATE test_table;
|
||||
|
||||
step s2-truncate:
|
||||
TRUNCATE test_table;
|
||||
<waiting ...>
|
||||
step s1-commit:
|
||||
COMMIT;
|
||||
|
||||
step s2-truncate: <... completed>
|
||||
step s2-commit:
|
||||
COMMIT;
|
||||
|
|
@ -1,3 +1,15 @@
|
|||
// Two alternative test outputs:
|
||||
// isolation_multiuser_locking_0.out for PG16 and before
|
||||
// isolation_multiuser_locking.out for PG17
|
||||
//
|
||||
// REINDEX TABLE now requires table ownership (PostgreSQL commit ecb0fd337).
|
||||
// UPDATE statements include <waiting ...> to reflect new lock waiting behavior.
|
||||
// Previous behavior: Transactions failed with "current transaction is aborted".
|
||||
// New behavior: Transactions wait for locks, ensuring proper isolation.
|
||||
// <... completed> tracks transaction states for clarity with locking changes.
|
||||
// Reference: https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=ecb0fd337
|
||||
|
||||
|
||||
setup
|
||||
{
|
||||
SET citus.max_cached_conns_per_worker to 0;
|
||||
|
|
Loading…
Reference in New Issue