From c1d5ca98964e77f6bfef6bb8b22df0821f198d65 Mon Sep 17 00:00:00 2001 From: Ahmet Gedemenli Date: Mon, 21 Feb 2022 13:18:38 +0300 Subject: [PATCH] Do distributed check first, for DropSchema stmts --- src/backend/distributed/commands/schema.c | 14 +++++++------- .../expected/multi_mx_schema_support.out | 18 ++++++++++++++++++ .../regress/sql/multi_mx_schema_support.sql | 17 +++++++++++++++++ 3 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/backend/distributed/commands/schema.c b/src/backend/distributed/commands/schema.c index e0c0f2b11..77f3fcc32 100644 --- a/src/backend/distributed/commands/schema.c +++ b/src/backend/distributed/commands/schema.c @@ -86,13 +86,6 @@ PreprocessDropSchemaStmt(Node *node, const char *queryString, DropStmt *dropStatement = castNode(DropStmt, node); Assert(dropStatement->removeType == OBJECT_SCHEMA); - if (!ShouldPropagate()) - { - return NIL; - } - - EnsureCoordinator(); - List *distributedSchemas = FilterDistributedSchemas(dropStatement->objects); if (list_length(distributedSchemas) < 1) @@ -100,6 +93,13 @@ PreprocessDropSchemaStmt(Node *node, const char *queryString, return NIL; } + if (!ShouldPropagate()) + { + return NIL; + } + + EnsureCoordinator(); + EnsureSequentialMode(OBJECT_SCHEMA); Value *schemaVal = NULL; diff --git a/src/test/regress/expected/multi_mx_schema_support.out b/src/test/regress/expected/multi_mx_schema_support.out index 71dfde3fd..6c7173c1f 100644 --- a/src/test/regress/expected/multi_mx_schema_support.out +++ b/src/test/regress/expected/multi_mx_schema_support.out @@ -515,12 +515,30 @@ SELECT table_schema AS "Shards' Schema" mx_new_schema (1 row) +-- check that we can drop a user-defined schema from workers +SET citus.enable_ddl_propagation TO OFF; +CREATE SCHEMA localschema; +RESET citus.enable_ddl_propagation; +DROP SCHEMA localschema; \c - - - :master_port SELECT * FROM mx_new_schema.table_set_schema; id --------------------------------------------------------------------- (0 rows) +-- verify local schema does not exist on the worker +-- worker errors out as "schema does not exist" +SET citus.enable_ddl_propagation TO OFF; +CREATE SCHEMA localschema; +-- should error out +SELECT run_command_on_workers($$DROP SCHEMA localschema;$$); + run_command_on_workers +--------------------------------------------------------------------- + (localhost,57637,f,"ERROR: schema ""localschema"" does not exist") + (localhost,57638,f,"ERROR: schema ""localschema"" does not exist") +(2 rows) + +RESET citus.enable_ddl_propagation; DROP SCHEMA mx_old_schema CASCADE; DROP SCHEMA mx_new_schema CASCADE; NOTICE: drop cascades to table mx_new_schema.table_set_schema diff --git a/src/test/regress/sql/multi_mx_schema_support.sql b/src/test/regress/sql/multi_mx_schema_support.sql index 555794f92..80cc61311 100644 --- a/src/test/regress/sql/multi_mx_schema_support.sql +++ b/src/test/regress/sql/multi_mx_schema_support.sql @@ -333,8 +333,25 @@ SELECT table_schema AS "Shards' Schema" FROM information_schema.tables WHERE table_name LIKE 'table\_set\_schema\_%' GROUP BY table_schema; + +-- check that we can drop a user-defined schema from workers +SET citus.enable_ddl_propagation TO OFF; +CREATE SCHEMA localschema; +RESET citus.enable_ddl_propagation; +DROP SCHEMA localschema; + \c - - - :master_port SELECT * FROM mx_new_schema.table_set_schema; +-- verify local schema does not exist on the worker +-- worker errors out as "schema does not exist" +SET citus.enable_ddl_propagation TO OFF; +CREATE SCHEMA localschema; + +-- should error out +SELECT run_command_on_workers($$DROP SCHEMA localschema;$$); + +RESET citus.enable_ddl_propagation; + DROP SCHEMA mx_old_schema CASCADE; DROP SCHEMA mx_new_schema CASCADE;