pull/7359/head
Onur Tirtir 2024-01-08 18:50:47 +03:00
parent c03b977789
commit 11feabd223
7 changed files with 66 additions and 91 deletions

View File

@ -141,6 +141,14 @@ SerializeDistributedDDLsOnObjectClassInternal(ObjectClass objectClass,
return;
}
/*
* Indeed we would already ensure permission checks in remote node
* --via AcquireCitusAdvisoryObjectClassLock()-- but we first do so on
* the local node to avoid from reporting confusing error messages.
*/
Oid oid = AcquireCitusAdvisoryObjectClassLockGetOid(objectClass, qualifiedObjectName);
AcquireCitusAdvisoryObjectClassLockCheckPrivileges(objectClass, oid);
Task *task = CitusMakeNode(Task);
task->taskType = DDL_TASK;

View File

@ -289,16 +289,3 @@ list_filter_oid(List *list, bool (*keepElement)(Oid element))
return result;
}
/*
* CompareStringNodes returns the result of strcmp on given two String nodes.
*/
int
CompareStringNodes(const void *leftElement, const void *rightElement)
{
String *leftString = castNode(String, (Node *) leftElement);
String *rightString = castNode(String, (Node *) rightElement);
return strcmp(strVal(leftString), strVal(rightString));
}

View File

@ -175,6 +175,5 @@ extern void * safe_list_nth(const List *list, int index);
extern List * GeneratePositiveIntSequenceList(int upTo);
extern List * GenerateListFromElement(void *listElement, int listLength);
extern List * list_filter_oid(List *list, bool (*keepElement)(Oid element));
extern int CompareStringNodes(const void *leftElement, const void *rightElement);
#endif /* CITUS_LISTUTILS_H */

View File

@ -176,7 +176,6 @@ IsNodeWideObjectClass(ObjectClass objectClass)
{
case OCLASS_ROLE:
case OCLASS_DATABASE:
case OCLASS_SUBSCRIPTION:
case OCLASS_TBLSPACE:
#if PG_VERSION_NUM >= PG_VERSION_15
case OCLASS_PARAMETER_ACL:

View File

@ -1218,22 +1218,16 @@ SET ROLE no_createdb;
SET citus.enable_create_database_propagation TO ON;
CREATE DATABASE no_createdb;
ERROR: permission denied to create / rename database
CONTEXT: while executing command on localhost:xxxxx
ALTER DATABASE distributed_db RENAME TO rename_test;
ERROR: permission denied to create / rename database
CONTEXT: while executing command on localhost:xxxxx
DROP DATABASE distributed_db;
ERROR: must be owner of database distributed_db
CONTEXT: while executing command on localhost:xxxxx
ALTER DATABASE distributed_db SET TABLESPACE pg_default;
ERROR: must be owner of database distributed_db
CONTEXT: while executing command on localhost:xxxxx
ALTER DATABASE distributed_db SET timezone TO 'UTC';
ERROR: must be owner of database distributed_db
CONTEXT: while executing command on localhost:xxxxx
ALTER DATABASE distributed_db RESET timezone;
ERROR: must be owner of database distributed_db
CONTEXT: while executing command on localhost:xxxxx
GRANT ALL ON DATABASE distributed_db TO postgres;
WARNING: no privileges were granted for "distributed_db"
RESET ROLE;
@ -1242,7 +1236,6 @@ SET ROLE no_createdb;
CREATE DATABASE no_createdb;
ALTER DATABASE distributed_db RENAME TO rename_test;
ERROR: must be owner of database distributed_db
CONTEXT: while executing command on localhost:xxxxx
RESET ROLE;
SELECT 1 FROM run_command_on_all_nodes($$GRANT ALL ON TABLESPACE pg_default TO no_createdb$$);
?column?

View File

@ -3,13 +3,13 @@ Parsed test spec with 2 sessions
starting permutation: s1-begin s2-begin s1-acquire-citus-adv-oclass-lock s2-acquire-citus-adv-oclass-lock s1-commit s2-commit
step s1-begin: BEGIN;
step s2-begin: BEGIN;
step s1-acquire-citus-adv-oclass-lock: SELECT citus_internal_acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), NULL);
step s1-acquire-citus-adv-oclass-lock: SELECT citus_internal_acquire_citus_advisory_object_class_lock(value, NULL) FROM oclass_database;
citus_internal_acquire_citus_advisory_object_class_lock
---------------------------------------------------------------------
(1 row)
step s2-acquire-citus-adv-oclass-lock: SELECT citus_internal_acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), NULL); <waiting ...>
step s2-acquire-citus-adv-oclass-lock: SELECT citus_internal_acquire_citus_advisory_object_class_lock(value, NULL) FROM oclass_database; <waiting ...>
step s1-commit: COMMIT;
step s2-acquire-citus-adv-oclass-lock: <... completed>
citus_internal_acquire_citus_advisory_object_class_lock
@ -19,18 +19,17 @@ citus_internal_acquire_citus_advisory_object_class_lock
step s2-commit: COMMIT;
starting permutation: s1-enable-create-db-prop s1-create-testdb1 s1-begin s2-begin s1-acquire-citus-adv-oclass-lock-with-oid-testdb1 s2-acquire-citus-adv-oclass-lock-with-oid-testdb1 s1-commit s2-commit s1-drop-testdb1
step s1-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
starting permutation: s1-create-testdb1 s1-begin s2-begin s1-acquire-citus-adv-oclass-lock-with-oid-testdb1 s2-acquire-citus-adv-oclass-lock-with-oid-testdb1 s1-commit s2-commit s1-drop-testdb1
step s1-create-testdb1: CREATE DATABASE testdb1;
step s1-begin: BEGIN;
step s2-begin: BEGIN;
step s1-acquire-citus-adv-oclass-lock-with-oid-testdb1: SELECT citus_internal_acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), 'testdb1');
step s1-acquire-citus-adv-oclass-lock-with-oid-testdb1: SELECT citus_internal_acquire_citus_advisory_object_class_lock(value, 'testdb1') FROM oclass_database;
citus_internal_acquire_citus_advisory_object_class_lock
---------------------------------------------------------------------
(1 row)
step s2-acquire-citus-adv-oclass-lock-with-oid-testdb1: SELECT citus_internal_acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), 'testdb1'); <waiting ...>
step s2-acquire-citus-adv-oclass-lock-with-oid-testdb1: SELECT citus_internal_acquire_citus_advisory_object_class_lock(value, 'testdb1') FROM oclass_database; <waiting ...>
step s1-commit: COMMIT;
step s2-acquire-citus-adv-oclass-lock-with-oid-testdb1: <... completed>
citus_internal_acquire_citus_advisory_object_class_lock
@ -41,20 +40,18 @@ citus_internal_acquire_citus_advisory_object_class_lock
step s2-commit: COMMIT;
step s1-drop-testdb1: DROP DATABASE testdb1;
starting permutation: s1-enable-create-db-prop s1-create-testdb1 s2-enable-create-db-prop s2-create-testdb2 s1-begin s2-begin s1-acquire-citus-adv-oclass-lock-with-oid-testdb1 s2-acquire-citus-adv-oclass-lock-with-oid-testdb2 s1-commit s2-commit s1-drop-testdb1 s2-drop-testdb2
step s1-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
starting permutation: s1-create-testdb1 s2-create-testdb2 s1-begin s2-begin s1-acquire-citus-adv-oclass-lock-with-oid-testdb1 s2-acquire-citus-adv-oclass-lock-with-oid-testdb2 s1-commit s2-commit s1-drop-testdb1 s2-drop-testdb2
step s1-create-testdb1: CREATE DATABASE testdb1;
step s2-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
step s2-create-testdb2: CREATE DATABASE testdb2;
step s1-begin: BEGIN;
step s2-begin: BEGIN;
step s1-acquire-citus-adv-oclass-lock-with-oid-testdb1: SELECT citus_internal_acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), 'testdb1');
step s1-acquire-citus-adv-oclass-lock-with-oid-testdb1: SELECT citus_internal_acquire_citus_advisory_object_class_lock(value, 'testdb1') FROM oclass_database;
citus_internal_acquire_citus_advisory_object_class_lock
---------------------------------------------------------------------
(1 row)
step s2-acquire-citus-adv-oclass-lock-with-oid-testdb2: SELECT citus_internal_acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), 'testdb2');
step s2-acquire-citus-adv-oclass-lock-with-oid-testdb2: SELECT citus_internal_acquire_citus_advisory_object_class_lock(value, 'testdb2') FROM oclass_database;
citus_internal_acquire_citus_advisory_object_class_lock
---------------------------------------------------------------------
@ -65,18 +62,17 @@ step s2-commit: COMMIT;
step s1-drop-testdb1: DROP DATABASE testdb1;
step s2-drop-testdb2: DROP DATABASE testdb2;
starting permutation: s2-enable-create-db-prop s2-create-testdb2 s1-begin s2-begin s1-acquire-citus-adv-oclass-lock s2-acquire-citus-adv-oclass-lock-with-oid-testdb2 s1-commit s2-commit s2-drop-testdb2
step s2-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
starting permutation: s2-create-testdb2 s1-begin s2-begin s1-acquire-citus-adv-oclass-lock s2-acquire-citus-adv-oclass-lock-with-oid-testdb2 s1-commit s2-commit s2-drop-testdb2
step s2-create-testdb2: CREATE DATABASE testdb2;
step s1-begin: BEGIN;
step s2-begin: BEGIN;
step s1-acquire-citus-adv-oclass-lock: SELECT citus_internal_acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), NULL);
step s1-acquire-citus-adv-oclass-lock: SELECT citus_internal_acquire_citus_advisory_object_class_lock(value, NULL) FROM oclass_database;
citus_internal_acquire_citus_advisory_object_class_lock
---------------------------------------------------------------------
(1 row)
step s2-acquire-citus-adv-oclass-lock-with-oid-testdb2: SELECT citus_internal_acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), 'testdb2');
step s2-acquire-citus-adv-oclass-lock-with-oid-testdb2: SELECT citus_internal_acquire_citus_advisory_object_class_lock(value, 'testdb2') FROM oclass_database;
citus_internal_acquire_citus_advisory_object_class_lock
---------------------------------------------------------------------
@ -86,19 +82,16 @@ step s1-commit: COMMIT;
step s2-commit: COMMIT;
step s2-drop-testdb2: DROP DATABASE testdb2;
starting permutation: s2-enable-create-db-prop s2-create-testdb2 s2-begin s2-alter-testdb2-set-lc_monetary s1-enable-create-db-prop s1-create-db1 s2-rollback s2-drop-testdb2 s1-drop-db1
step s2-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
starting permutation: s2-create-testdb2 s2-begin s2-alter-testdb2-set-lc_monetary s1-create-db1 s2-rollback s2-drop-testdb2 s1-drop-db1
step s2-create-testdb2: CREATE DATABASE testdb2;
step s2-begin: BEGIN;
step s2-alter-testdb2-set-lc_monetary: ALTER DATABASE testdb2 SET lc_monetary TO 'C';
step s1-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
step s1-create-db1: CREATE DATABASE db1;
step s2-rollback: ROLLBACK;
step s2-drop-testdb2: DROP DATABASE testdb2;
step s1-drop-db1: DROP DATABASE db1;
starting permutation: s2-enable-create-db-prop s2-create-testdb2 s2-begin s2-alter-testdb2-set-lc_monetary s1-create-user-dbuser s1-grant-on-testdb2-to-dbuser s2-rollback s2-drop-testdb2 s1-drop-user-dbuser
step s2-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
starting permutation: s2-create-testdb2 s2-begin s2-alter-testdb2-set-lc_monetary s1-create-user-dbuser s1-grant-on-testdb2-to-dbuser s2-rollback s2-drop-testdb2 s1-drop-user-dbuser
step s2-create-testdb2: CREATE DATABASE testdb2;
step s2-begin: BEGIN;
step s2-alter-testdb2-set-lc_monetary: ALTER DATABASE testdb2 SET lc_monetary TO 'C';
@ -108,12 +101,10 @@ step s2-rollback: ROLLBACK;
step s2-drop-testdb2: DROP DATABASE testdb2;
step s1-drop-user-dbuser: DROP USER dbuser;
starting permutation: s2-enable-create-db-prop s2-create-testdb2 s2-begin s2-alter-testdb2-set-lc_monetary s1-enable-create-db-prop s1-create-testdb1 s1-create-user-dbuser s1-grant-on-testdb1-to-dbuser s2-rollback s2-drop-testdb2 s1-drop-testdb1 s1-drop-user-dbuser
step s2-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
starting permutation: s2-create-testdb2 s2-begin s2-alter-testdb2-set-lc_monetary s1-create-testdb1 s1-create-user-dbuser s1-grant-on-testdb1-to-dbuser s2-rollback s2-drop-testdb2 s1-drop-testdb1 s1-drop-user-dbuser
step s2-create-testdb2: CREATE DATABASE testdb2;
step s2-begin: BEGIN;
step s2-alter-testdb2-set-lc_monetary: ALTER DATABASE testdb2 SET lc_monetary TO 'C';
step s1-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
step s1-create-testdb1: CREATE DATABASE testdb1;
step s1-create-user-dbuser: CREATE USER dbuser;
step s1-grant-on-testdb1-to-dbuser: GRANT ALL ON DATABASE testdb1 TO dbuser;
@ -122,10 +113,8 @@ step s2-drop-testdb2: DROP DATABASE testdb2;
step s1-drop-testdb1: DROP DATABASE testdb1;
step s1-drop-user-dbuser: DROP USER dbuser;
starting permutation: s1-enable-create-db-prop s1-create-testdb1 s2-enable-create-db-prop s2-create-testdb2 s1-begin s2-begin s1-alter-testdb1-rename-to-db1 s2-alter-testdb2-rename-to-db1 s1-commit s2-rollback s1-drop-db1 s2-drop-testdb2
step s1-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
starting permutation: s1-create-testdb1 s2-create-testdb2 s1-begin s2-begin s1-alter-testdb1-rename-to-db1 s2-alter-testdb2-rename-to-db1 s1-commit s2-rollback s1-drop-db1 s2-drop-testdb2
step s1-create-testdb1: CREATE DATABASE testdb1;
step s2-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
step s2-create-testdb2: CREATE DATABASE testdb2;
step s1-begin: BEGIN;
step s2-begin: BEGIN;
@ -138,10 +127,8 @@ step s2-rollback: ROLLBACK;
step s1-drop-db1: DROP DATABASE db1;
step s2-drop-testdb2: DROP DATABASE testdb2;
starting permutation: s1-enable-create-db-prop s1-create-testdb1 s2-enable-create-db-prop s2-create-testdb2 s1-begin s2-begin s1-alter-testdb1-rename-to-db1 s2-alter-testdb2-rename-to-db1 s1-rollback s2-commit s1-drop-testdb1 s2-drop-db1
step s1-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
starting permutation: s1-create-testdb1 s2-create-testdb2 s1-begin s2-begin s1-alter-testdb1-rename-to-db1 s2-alter-testdb2-rename-to-db1 s1-rollback s2-commit s1-drop-testdb1 s2-drop-db1
step s1-create-testdb1: CREATE DATABASE testdb1;
step s2-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
step s2-create-testdb2: CREATE DATABASE testdb2;
step s1-begin: BEGIN;
step s2-begin: BEGIN;
@ -153,8 +140,7 @@ step s2-commit: COMMIT;
step s1-drop-testdb1: DROP DATABASE testdb1;
step s2-drop-db1: DROP DATABASE db1;
starting permutation: s1-enable-create-db-prop s1-create-testdb1 s1-begin s2-begin s1-alter-testdb1-rename-to-db1 s2-alter-testdb1-rename-to-db1 s1-commit s2-rollback s1-drop-db1
step s1-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
starting permutation: s1-create-testdb1 s1-begin s2-begin s1-alter-testdb1-rename-to-db1 s2-alter-testdb1-rename-to-db1 s1-commit s2-rollback s1-drop-db1
step s1-create-testdb1: CREATE DATABASE testdb1;
step s1-begin: BEGIN;
step s2-begin: BEGIN;
@ -166,8 +152,7 @@ ERROR: database "testdb1" does not exist
step s2-rollback: ROLLBACK;
step s1-drop-db1: DROP DATABASE db1;
starting permutation: s1-enable-create-db-prop s1-create-testdb1 s1-begin s2-begin s1-alter-testdb1-rename-to-db1 s2-alter-testdb1-rename-to-db1 s1-rollback s2-commit s2-drop-db1
step s1-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
starting permutation: s1-create-testdb1 s1-begin s2-begin s1-alter-testdb1-rename-to-db1 s2-alter-testdb1-rename-to-db1 s1-rollback s2-commit s2-drop-db1
step s1-create-testdb1: CREATE DATABASE testdb1;
step s1-begin: BEGIN;
step s2-begin: BEGIN;
@ -178,44 +163,37 @@ step s2-alter-testdb1-rename-to-db1: <... completed>
step s2-commit: COMMIT;
step s2-drop-db1: DROP DATABASE db1;
starting permutation: s2-enable-create-db-prop s2-create-testdb2 s2-begin s2-alter-testdb2-rename-to-db1 s1-enable-create-db-prop s1-create-db1 s2-rollback s2-drop-testdb2 s1-drop-db1
step s2-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
starting permutation: s2-create-testdb2 s2-begin s2-alter-testdb2-rename-to-db1 s1-create-db1 s2-rollback s2-drop-testdb2 s1-drop-db1
step s2-create-testdb2: CREATE DATABASE testdb2;
step s2-begin: BEGIN;
step s2-alter-testdb2-rename-to-db1: ALTER DATABASE testdb2 RENAME TO db1;
step s1-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
step s1-create-db1: CREATE DATABASE db1; <waiting ...>
step s2-rollback: ROLLBACK;
step s1-create-db1: <... completed>
step s2-drop-testdb2: DROP DATABASE testdb2;
step s1-drop-db1: DROP DATABASE db1;
starting permutation: s2-enable-create-db-prop s2-create-testdb2 s2-begin s2-alter-testdb2-rename-to-db1 s1-enable-create-db-prop s1-create-db1 s2-commit s2-drop-db1
step s2-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
starting permutation: s2-create-testdb2 s2-begin s2-alter-testdb2-rename-to-db1 s1-create-db1 s2-commit s2-drop-db1
step s2-create-testdb2: CREATE DATABASE testdb2;
step s2-begin: BEGIN;
step s2-alter-testdb2-rename-to-db1: ALTER DATABASE testdb2 RENAME TO db1;
step s1-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
step s1-create-db1: CREATE DATABASE db1; <waiting ...>
step s2-commit: COMMIT;
step s1-create-db1: <... completed>
ERROR: database "db1" already exists
step s2-drop-db1: DROP DATABASE db1;
starting permutation: s2-enable-create-db-prop s2-create-testdb2 s2-begin s2-alter-testdb2-rename-to-db2 s1-enable-create-db-prop s1-create-db1 s2-commit s2-drop-db2 s1-drop-db1
step s2-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
starting permutation: s2-create-testdb2 s2-begin s2-alter-testdb2-rename-to-db2 s1-create-db1 s2-commit s2-drop-db2 s1-drop-db1
step s2-create-testdb2: CREATE DATABASE testdb2;
step s2-begin: BEGIN;
step s2-alter-testdb2-rename-to-db2: ALTER DATABASE testdb2 RENAME TO db2;
step s1-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
step s1-create-db1: CREATE DATABASE db1; <waiting ...>
step s2-commit: COMMIT;
step s1-create-db1: <... completed>
step s2-drop-db2: DROP DATABASE db2;
step s1-drop-db1: DROP DATABASE db1;
starting permutation: s2-enable-create-db-prop s2-create-testdb2 s2-begin s2-alter-testdb2-rename-to-db1 s1-drop-testdb2 s2-rollback
step s2-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
starting permutation: s2-create-testdb2 s2-begin s2-alter-testdb2-rename-to-db1 s1-drop-testdb2 s2-rollback
step s2-create-testdb2: CREATE DATABASE testdb2;
step s2-begin: BEGIN;
step s2-alter-testdb2-rename-to-db1: ALTER DATABASE testdb2 RENAME TO db1;
@ -223,10 +201,8 @@ step s1-drop-testdb2: DROP DATABASE testdb2; <waiting ...>
step s2-rollback: ROLLBACK;
step s1-drop-testdb2: <... completed>
starting permutation: s2-enable-create-db-prop s2-create-testdb2 s1-enable-create-db-prop s1-create-db1 s2-begin s2-alter-testdb2-rename-to-db2 s1-drop-db1 s2-commit s2-drop-db2
step s2-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
starting permutation: s2-create-testdb2 s1-create-db1 s2-begin s2-alter-testdb2-rename-to-db2 s1-drop-db1 s2-commit s2-drop-db2
step s2-create-testdb2: CREATE DATABASE testdb2;
step s1-enable-create-db-prop: SET citus.enable_create_database_propagation TO ON;
step s1-create-db1: CREATE DATABASE db1;
step s2-begin: BEGIN;
step s2-alter-testdb2-rename-to-db2: ALTER DATABASE testdb2 RENAME TO db2;

View File

@ -1,15 +1,27 @@
setup
{
-- OCLASS for database changed in PG 16 from 25 to 26
SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS value INTO oclass_database;
}
teardown
{
DROP TABLE IF EXISTS oclass_database;
}
session "s1"
setup { SET citus.enable_create_database_propagation TO ON; }
step "s1-begin" { BEGIN; }
step "s1-commit" { COMMIT; }
step "s1-rollback" { ROLLBACK; }
step "s1-enable-create-db-prop" { SET citus.enable_create_database_propagation TO ON; }
step "s1-create-user-dbuser" { CREATE USER dbuser; }
step "s1-drop-user-dbuser" { DROP USER dbuser; }
step "s1-acquire-citus-adv-oclass-lock" { SELECT citus_internal_acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), NULL); }
step "s1-acquire-citus-adv-oclass-lock-with-oid-testdb1" { SELECT citus_internal_acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), 'testdb1'); }
step "s1-acquire-citus-adv-oclass-lock" { SELECT citus_internal_acquire_citus_advisory_object_class_lock(value, NULL) FROM oclass_database; }
step "s1-acquire-citus-adv-oclass-lock-with-oid-testdb1" { SELECT citus_internal_acquire_citus_advisory_object_class_lock(value, 'testdb1') FROM oclass_database; }
step "s1-create-testdb1" { CREATE DATABASE testdb1; }
step "s1-drop-testdb1" { DROP DATABASE testdb1; }
@ -24,14 +36,15 @@ step "s1-drop-db1" { DROP DATABASE db1; }
session "s2"
setup { SET citus.enable_create_database_propagation TO ON; }
step "s2-begin" { BEGIN; }
step "s2-commit" { COMMIT; }
step "s2-rollback" { ROLLBACK; }
step "s2-enable-create-db-prop" { SET citus.enable_create_database_propagation TO ON; }
step "s2-acquire-citus-adv-oclass-lock" { SELECT citus_internal_acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), NULL); }
step "s2-acquire-citus-adv-oclass-lock-with-oid-testdb1" { SELECT citus_internal_acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), 'testdb1'); }
step "s2-acquire-citus-adv-oclass-lock-with-oid-testdb2" { SELECT citus_internal_acquire_citus_advisory_object_class_lock((SELECT CASE WHEN substring(version(), '\d+')::integer < 16 THEN 25 ELSE 26 END AS oclass_database), 'testdb2'); }
step "s2-acquire-citus-adv-oclass-lock" { SELECT citus_internal_acquire_citus_advisory_object_class_lock(value, NULL) FROM oclass_database; }
step "s2-acquire-citus-adv-oclass-lock-with-oid-testdb1" { SELECT citus_internal_acquire_citus_advisory_object_class_lock(value, 'testdb1') FROM oclass_database; }
step "s2-acquire-citus-adv-oclass-lock-with-oid-testdb2" { SELECT citus_internal_acquire_citus_advisory_object_class_lock(value, 'testdb2') FROM oclass_database; }
step "s2-alter-testdb1-rename-to-db1" { ALTER DATABASE testdb1 RENAME TO db1; }
@ -53,37 +66,37 @@ permutation "s1-begin" "s2-begin" "s1-acquire-citus-adv-oclass-lock" "s2-acquire
// e.g., DROP DATABASE vs DROP DATABASE
// dropping the same database
permutation "s1-enable-create-db-prop" "s1-create-testdb1" "s1-begin" "s2-begin" "s1-acquire-citus-adv-oclass-lock-with-oid-testdb1" "s2-acquire-citus-adv-oclass-lock-with-oid-testdb1" "s1-commit" "s2-commit" "s1-drop-testdb1"
permutation "s1-create-testdb1" "s1-begin" "s2-begin" "s1-acquire-citus-adv-oclass-lock-with-oid-testdb1" "s2-acquire-citus-adv-oclass-lock-with-oid-testdb1" "s1-commit" "s2-commit" "s1-drop-testdb1"
// dropping a different database
permutation "s1-enable-create-db-prop" "s1-create-testdb1" "s2-enable-create-db-prop" "s2-create-testdb2" "s1-begin" "s2-begin" "s1-acquire-citus-adv-oclass-lock-with-oid-testdb1" "s2-acquire-citus-adv-oclass-lock-with-oid-testdb2" "s1-commit" "s2-commit" "s1-drop-testdb1" "s2-drop-testdb2"
permutation "s1-create-testdb1" "s2-create-testdb2" "s1-begin" "s2-begin" "s1-acquire-citus-adv-oclass-lock-with-oid-testdb1" "s2-acquire-citus-adv-oclass-lock-with-oid-testdb2" "s1-commit" "s2-commit" "s1-drop-testdb1" "s2-drop-testdb2"
// CREATE DATABASE vs DROP DATABASE
permutation "s2-enable-create-db-prop" "s2-create-testdb2" "s1-begin" "s2-begin" "s1-acquire-citus-adv-oclass-lock" "s2-acquire-citus-adv-oclass-lock-with-oid-testdb2" "s1-commit" "s2-commit" "s2-drop-testdb2"
permutation "s2-create-testdb2" "s1-begin" "s2-begin" "s1-acquire-citus-adv-oclass-lock" "s2-acquire-citus-adv-oclass-lock-with-oid-testdb2" "s1-commit" "s2-commit" "s2-drop-testdb2"
// CREATE DATABASE vs ALTER DATABASE SET <config>
permutation "s2-enable-create-db-prop" "s2-create-testdb2" "s2-begin" "s2-alter-testdb2-set-lc_monetary" "s1-enable-create-db-prop" "s1-create-db1" "s2-rollback" "s2-drop-testdb2" "s1-drop-db1"
permutation "s2-create-testdb2" "s2-begin" "s2-alter-testdb2-set-lc_monetary" "s1-create-db1" "s2-rollback" "s2-drop-testdb2" "s1-drop-db1"
// GRANT .. ON DATABASE .. TO ... vs ALTER DATABASE SET <config>
// on the same database
permutation "s2-enable-create-db-prop" "s2-create-testdb2" "s2-begin" "s2-alter-testdb2-set-lc_monetary" "s1-create-user-dbuser" "s1-grant-on-testdb2-to-dbuser" "s2-rollback" "s2-drop-testdb2" "s1-drop-user-dbuser"
permutation "s2-create-testdb2" "s2-begin" "s2-alter-testdb2-set-lc_monetary" "s1-create-user-dbuser" "s1-grant-on-testdb2-to-dbuser" "s2-rollback" "s2-drop-testdb2" "s1-drop-user-dbuser"
// on a different database
permutation "s2-enable-create-db-prop" "s2-create-testdb2" "s2-begin" "s2-alter-testdb2-set-lc_monetary" "s1-enable-create-db-prop" "s1-create-testdb1" "s1-create-user-dbuser" "s1-grant-on-testdb1-to-dbuser" "s2-rollback" "s2-drop-testdb2" "s1-drop-testdb1" "s1-drop-user-dbuser"
permutation "s2-create-testdb2" "s2-begin" "s2-alter-testdb2-set-lc_monetary" "s1-create-testdb1" "s1-create-user-dbuser" "s1-grant-on-testdb1-to-dbuser" "s2-rollback" "s2-drop-testdb2" "s1-drop-testdb1" "s1-drop-user-dbuser"
// ALTER DATABASE .. RENAME TO .. vs ALTER DATABASE .. RENAME TO ..
// try to rename different databases to the same name
permutation "s1-enable-create-db-prop" "s1-create-testdb1" "s2-enable-create-db-prop" "s2-create-testdb2" "s1-begin" "s2-begin" "s1-alter-testdb1-rename-to-db1" "s2-alter-testdb2-rename-to-db1" "s1-commit" "s2-rollback" "s1-drop-db1" "s2-drop-testdb2"
permutation "s1-enable-create-db-prop" "s1-create-testdb1" "s2-enable-create-db-prop" "s2-create-testdb2" "s1-begin" "s2-begin" "s1-alter-testdb1-rename-to-db1" "s2-alter-testdb2-rename-to-db1" "s1-rollback" "s2-commit" "s1-drop-testdb1" "s2-drop-db1"
permutation "s1-create-testdb1" "s2-create-testdb2" "s1-begin" "s2-begin" "s1-alter-testdb1-rename-to-db1" "s2-alter-testdb2-rename-to-db1" "s1-commit" "s2-rollback" "s1-drop-db1" "s2-drop-testdb2"
permutation "s1-create-testdb1" "s2-create-testdb2" "s1-begin" "s2-begin" "s1-alter-testdb1-rename-to-db1" "s2-alter-testdb2-rename-to-db1" "s1-rollback" "s2-commit" "s1-drop-testdb1" "s2-drop-db1"
// try to rename same database
permutation "s1-enable-create-db-prop" "s1-create-testdb1" "s1-begin" "s2-begin" "s1-alter-testdb1-rename-to-db1" "s2-alter-testdb1-rename-to-db1" "s1-commit" "s2-rollback" "s1-drop-db1"
permutation "s1-enable-create-db-prop" "s1-create-testdb1" "s1-begin" "s2-begin" "s1-alter-testdb1-rename-to-db1" "s2-alter-testdb1-rename-to-db1" "s1-rollback" "s2-commit" "s2-drop-db1"
permutation "s1-create-testdb1" "s1-begin" "s2-begin" "s1-alter-testdb1-rename-to-db1" "s2-alter-testdb1-rename-to-db1" "s1-commit" "s2-rollback" "s1-drop-db1"
permutation "s1-create-testdb1" "s1-begin" "s2-begin" "s1-alter-testdb1-rename-to-db1" "s2-alter-testdb1-rename-to-db1" "s1-rollback" "s2-commit" "s2-drop-db1"
// CREATE DATABASE vs ALTER DATABASE .. RENAME TO ..
permutation "s2-enable-create-db-prop" "s2-create-testdb2" "s2-begin" "s2-alter-testdb2-rename-to-db1" "s1-enable-create-db-prop" "s1-create-db1" "s2-rollback" "s2-drop-testdb2" "s1-drop-db1"
permutation "s2-enable-create-db-prop" "s2-create-testdb2" "s2-begin" "s2-alter-testdb2-rename-to-db1" "s1-enable-create-db-prop" "s1-create-db1" "s2-commit" "s2-drop-db1"
permutation "s2-enable-create-db-prop" "s2-create-testdb2" "s2-begin" "s2-alter-testdb2-rename-to-db2" "s1-enable-create-db-prop" "s1-create-db1" "s2-commit" "s2-drop-db2" "s1-drop-db1"
permutation "s2-create-testdb2" "s2-begin" "s2-alter-testdb2-rename-to-db1" "s1-create-db1" "s2-rollback" "s2-drop-testdb2" "s1-drop-db1"
permutation "s2-create-testdb2" "s2-begin" "s2-alter-testdb2-rename-to-db1" "s1-create-db1" "s2-commit" "s2-drop-db1"
permutation "s2-create-testdb2" "s2-begin" "s2-alter-testdb2-rename-to-db2" "s1-create-db1" "s2-commit" "s2-drop-db2" "s1-drop-db1"
// DROP DATABASE vs ALTER DATABASE .. RENAME TO ..
// try to rename the same database
permutation "s2-enable-create-db-prop" "s2-create-testdb2" "s2-begin" "s2-alter-testdb2-rename-to-db1" "s1-drop-testdb2" "s2-rollback"
permutation "s2-create-testdb2" "s2-begin" "s2-alter-testdb2-rename-to-db1" "s1-drop-testdb2" "s2-rollback"
// try to rename a different database
permutation "s2-enable-create-db-prop" "s2-create-testdb2" "s1-enable-create-db-prop" "s1-create-db1" "s2-begin" "s2-alter-testdb2-rename-to-db2" "s1-drop-db1" "s2-commit" "s2-drop-db2"
permutation "s2-create-testdb2" "s1-create-db1" "s2-begin" "s2-alter-testdb2-rename-to-db2" "s1-drop-db1" "s2-commit" "s2-drop-db2"