mirror of https://github.com/citusdata/citus.git
Adds distributed check in metadata syncing
parent
7780101619
commit
c1e9335fb7
|
@ -673,6 +673,15 @@ GenerateCreateDatabaseCommandList(void)
|
||||||
{
|
{
|
||||||
Form_pg_database databaseForm = (Form_pg_database) GETSTRUCT(tuple);
|
Form_pg_database databaseForm = (Form_pg_database) GETSTRUCT(tuple);
|
||||||
|
|
||||||
|
ObjectAddress *dbAddress = GetDatabaseAddressFromDatabaseName(
|
||||||
|
NameStr(databaseForm->datname), false);
|
||||||
|
|
||||||
|
/* skip databases that are not distributed */
|
||||||
|
if (!IsAnyObjectDistributed(list_make1(dbAddress)))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
char *createStmt = GenerateCreateDatabaseStatementFromPgDatabase(databaseForm);
|
char *createStmt = GenerateCreateDatabaseStatementFromPgDatabase(databaseForm);
|
||||||
|
|
||||||
StringInfo outerDbStmt = makeStringInfo();
|
StringInfo outerDbStmt = makeStringInfo();
|
||||||
|
|
|
@ -495,6 +495,48 @@ SELECT * FROM public.check_database_on_all_nodes('db_force_test') ORDER BY node_
|
||||||
worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false}
|
worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false}
|
||||||
(3 rows)
|
(3 rows)
|
||||||
|
|
||||||
|
-- test that we won't propagate non-distributed databases in citus_add_node
|
||||||
|
select 1 from citus_remove_node('localhost', :worker_2_port);
|
||||||
|
?column?
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
SET citus.enable_create_database_propagation TO off;
|
||||||
|
CREATE DATABASE non_distributed_db;
|
||||||
|
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.
|
||||||
|
SET citus.enable_create_database_propagation TO on;
|
||||||
|
create database distributed_db;
|
||||||
|
select 1 from citus_add_node('localhost', :worker_2_port);
|
||||||
|
?column?
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
1
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
--non_distributed_db should not be propagated to worker_2
|
||||||
|
SELECT * FROM public.check_database_on_all_nodes('non_distributed_db') ORDER BY node_type;
|
||||||
|
node_type | result
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
coordinator (local) | {"database_properties": {"datacl": null, "datname": "non_distributed_db", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false}
|
||||||
|
worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false}
|
||||||
|
worker node (remote) | {"database_properties": null, "pg_dist_object_record_for_db_exists": false, "stale_pg_dist_object_record_for_a_db_exists": false}
|
||||||
|
(3 rows)
|
||||||
|
|
||||||
|
--distributed_db should be propagated to worker_2
|
||||||
|
SELECT * FROM public.check_database_on_all_nodes('distributed_db') ORDER BY node_type;
|
||||||
|
node_type | result
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
coordinator (local) | {"database_properties": {"datacl": null, "datname": "distributed_db", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false}
|
||||||
|
worker node (remote) | {"database_properties": {"datacl": null, "datname": "distributed_db", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false}
|
||||||
|
worker node (remote) | {"database_properties": {"datacl": null, "datname": "distributed_db", "datctype": "C", "encoding": "UTF8", "datcollate": "C", "tablespace": "pg_default", "daticurules": null, "datallowconn": true, "datconnlimit": -1, "daticulocale": null, "datistemplate": false, "database_owner": "postgres", "datcollversion": null, "datlocprovider": "c"}, "pg_dist_object_record_for_db_exists": true, "stale_pg_dist_object_record_for_a_db_exists": false}
|
||||||
|
(3 rows)
|
||||||
|
|
||||||
|
--clean up resources created by this test
|
||||||
|
drop database distributed_db;
|
||||||
|
set citus.enable_create_database_propagation TO off;
|
||||||
|
drop database non_distributed_db;
|
||||||
--clean up resources created by this test
|
--clean up resources created by this test
|
||||||
-- DROP TABLESPACE is not supported, so we need to drop it manually.
|
-- DROP TABLESPACE is not supported, so we need to drop it manually.
|
||||||
SELECT result FROM run_command_on_all_nodes(
|
SELECT result FROM run_command_on_all_nodes(
|
||||||
|
|
|
@ -274,6 +274,27 @@ reset citus.log_remote_commands;
|
||||||
|
|
||||||
SELECT * FROM public.check_database_on_all_nodes('db_force_test') ORDER BY node_type;
|
SELECT * FROM public.check_database_on_all_nodes('db_force_test') ORDER BY node_type;
|
||||||
|
|
||||||
|
-- test that we won't propagate non-distributed databases in citus_add_node
|
||||||
|
|
||||||
|
select 1 from citus_remove_node('localhost', :worker_2_port);
|
||||||
|
SET citus.enable_create_database_propagation TO off;
|
||||||
|
CREATE DATABASE non_distributed_db;
|
||||||
|
SET citus.enable_create_database_propagation TO on;
|
||||||
|
create database distributed_db;
|
||||||
|
|
||||||
|
select 1 from citus_add_node('localhost', :worker_2_port);
|
||||||
|
|
||||||
|
--non_distributed_db should not be propagated to worker_2
|
||||||
|
SELECT * FROM public.check_database_on_all_nodes('non_distributed_db') ORDER BY node_type;
|
||||||
|
--distributed_db should be propagated to worker_2
|
||||||
|
SELECT * FROM public.check_database_on_all_nodes('distributed_db') ORDER BY node_type;
|
||||||
|
|
||||||
|
--clean up resources created by this test
|
||||||
|
drop database distributed_db;
|
||||||
|
|
||||||
|
set citus.enable_create_database_propagation TO off;
|
||||||
|
drop database non_distributed_db;
|
||||||
|
|
||||||
|
|
||||||
--clean up resources created by this test
|
--clean up resources created by this test
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue