diff --git a/src/backend/distributed/commands/utility_hook.c b/src/backend/distributed/commands/utility_hook.c index adebdb90c..899384ad5 100644 --- a/src/backend/distributed/commands/utility_hook.c +++ b/src/backend/distributed/commands/utility_hook.c @@ -219,6 +219,23 @@ multi_ProcessUtility(PlannedStmt *pstmt, PreprocessCreateExtensionStmtForCitusColumnar(parsetree); } + /* + * Make sure that on DROP DATABASE we terminate the background daemon + * associated with it. + */ + if (IsA(parsetree, DropdbStmt)) + { + const bool missingOK = true; + DropdbStmt *dropDbStatement = (DropdbStmt *) parsetree; + char *dbname = dropDbStatement->dbname; + Oid databaseOid = get_database_oid(dbname, missingOK); + + if (OidIsValid(databaseOid)) + { + StopMaintenanceDaemon(databaseOid); + } + } + if (!CitusHasBeenLoaded()) { /* @@ -678,22 +695,9 @@ ProcessUtilityInternal(PlannedStmt *pstmt, } /* - * Make sure that on DROP DATABASE we terminate the background daemon + * Make sure that on DROP EXTENSION we terminate the background daemon * associated with it. */ - if (IsA(parsetree, DropdbStmt)) - { - const bool missingOK = true; - DropdbStmt *dropDbStatement = (DropdbStmt *) parsetree; - char *dbname = dropDbStatement->dbname; - Oid databaseOid = get_database_oid(dbname, missingOK); - - if (OidIsValid(databaseOid)) - { - StopMaintenanceDaemon(databaseOid); - } - } - if (IsDropCitusExtensionStmt(parsetree)) { StopMaintenanceDaemon(MyDatabaseId); diff --git a/src/test/regress/expected/drop_database.out b/src/test/regress/expected/drop_database.out new file mode 100644 index 000000000..d150cc8d3 --- /dev/null +++ b/src/test/regress/expected/drop_database.out @@ -0,0 +1,43 @@ +-- coordinator +CREATE SCHEMA drop_database; +SET search_path TO drop_database; +SET citus.shard_count TO 4; +SET citus.shard_replication_factor TO 1; +SET citus.next_shard_id TO 35137400; +CREATE DATABASE citus_created; +NOTICE: Citus partially supports CREATE DATABASE for distributed databases +DETAIL: Citus does not propagate CREATE DATABASE command to workers +HINT: You can manually create a database and its extensions on workers. +\c citus_created +CREATE EXTENSION citus; +CREATE DATABASE citus_not_created; +NOTICE: Citus partially supports CREATE DATABASE for distributed databases +DETAIL: Citus does not propagate CREATE DATABASE command to workers +HINT: You can manually create a database and its extensions on workers. +\c citus_not_created +DROP DATABASE citus_created; +\c regression +DROP DATABASE citus_not_created; +-- worker1 +\c - - - :worker_1_port +SET search_path TO drop_database; +SET citus.shard_count TO 4; +SET citus.shard_replication_factor TO 1; +SET citus.next_shard_id TO 35137400; +CREATE DATABASE citus_created; +NOTICE: Citus partially supports CREATE DATABASE for distributed databases +DETAIL: Citus does not propagate CREATE DATABASE command to workers +HINT: You can manually create a database and its extensions on workers. +\c citus_created +CREATE EXTENSION citus; +CREATE DATABASE citus_not_created; +NOTICE: Citus partially supports CREATE DATABASE for distributed databases +DETAIL: Citus does not propagate CREATE DATABASE command to workers +HINT: You can manually create a database and its extensions on workers. +\c citus_not_created +DROP DATABASE citus_created; +\c regression +DROP DATABASE citus_not_created; +\c - - - :master_port +SET client_min_messages TO WARNING; +DROP SCHEMA drop_database CASCADE; diff --git a/src/test/regress/multi_schedule b/src/test/regress/multi_schedule index 447fb1ea8..1d5ce0798 100644 --- a/src/test/regress/multi_schedule +++ b/src/test/regress/multi_schedule @@ -121,3 +121,4 @@ test: ensure_no_shared_connection_leak test: check_mx test: generated_identity +test: drop_database diff --git a/src/test/regress/sql/drop_database.sql b/src/test/regress/sql/drop_database.sql new file mode 100644 index 000000000..29d9d427a --- /dev/null +++ b/src/test/regress/sql/drop_database.sql @@ -0,0 +1,45 @@ +-- coordinator +CREATE SCHEMA drop_database; +SET search_path TO drop_database; +SET citus.shard_count TO 4; +SET citus.shard_replication_factor TO 1; +SET citus.next_shard_id TO 35137400; + +CREATE DATABASE citus_created; + +\c citus_created +CREATE EXTENSION citus; + +CREATE DATABASE citus_not_created; + +\c citus_not_created +DROP DATABASE citus_created; + +\c regression +DROP DATABASE citus_not_created; + +-- worker1 +\c - - - :worker_1_port + +SET search_path TO drop_database; +SET citus.shard_count TO 4; +SET citus.shard_replication_factor TO 1; +SET citus.next_shard_id TO 35137400; + +CREATE DATABASE citus_created; + +\c citus_created +CREATE EXTENSION citus; + +CREATE DATABASE citus_not_created; + +\c citus_not_created +DROP DATABASE citus_created; + +\c regression +DROP DATABASE citus_not_created; + +\c - - - :master_port + +SET client_min_messages TO WARNING; +DROP SCHEMA drop_database CASCADE;