mirror of https://github.com/citusdata/citus.git
Allow metadata sync functions on secondaries
{start,stop}_metadata_sync_to_node now toggle the hasMetadata flag when run on secondaries but don't attempt to actually sync any metadata.pull/1518/head
parent
7e4b2c1595
commit
e7846ba7d1
|
@ -111,6 +111,15 @@ start_metadata_sync_to_node(PG_FUNCTION_ARGS)
|
|||
|
||||
MarkNodeHasMetadata(nodeNameString, nodePort, true);
|
||||
|
||||
if (!WorkerNodeIsPrimary(workerNode))
|
||||
{
|
||||
/*
|
||||
* If this is a secondary node we can't actually sync metadata to it; we assume
|
||||
* the primary node is receiving metadata.
|
||||
*/
|
||||
PG_RETURN_VOID();
|
||||
}
|
||||
|
||||
/* generate and add the local group id's update query */
|
||||
localGroupIdUpdateCommand = LocalGroupIdUpdateCommand(workerNode->groupId);
|
||||
|
||||
|
|
|
@ -175,6 +175,38 @@ SELECT count(*) FROM pg_dist_node WHERE hasmetadata=true;
|
|||
0
|
||||
(1 row)
|
||||
|
||||
-- Ensure it works when run on a secondary node
|
||||
SELECT groupid AS worker_1_group FROM pg_dist_node WHERE nodeport = :worker_1_port \gset
|
||||
SELECT master_add_node('localhost', 8888, groupid => :worker_1_group, noderole => 'secondary');
|
||||
master_add_node
|
||||
--------------------------------------------
|
||||
(4,1,localhost,8888,default,f,t,secondary)
|
||||
(1 row)
|
||||
|
||||
SELECT start_metadata_sync_to_node('localhost', 8888);
|
||||
start_metadata_sync_to_node
|
||||
-----------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
SELECT hasmetadata FROM pg_dist_node WHERE nodeport = 8888;
|
||||
hasmetadata
|
||||
-------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT stop_metadata_sync_to_node('localhost', 8888);
|
||||
stop_metadata_sync_to_node
|
||||
----------------------------
|
||||
|
||||
(1 row)
|
||||
|
||||
SELECT hasmetadata FROM pg_dist_node WHERE nodeport = 8888;
|
||||
hasmetadata
|
||||
-------------
|
||||
f
|
||||
(1 row)
|
||||
|
||||
-- Run start_metadata_sync_to_node and check that it marked hasmetadata for that worker
|
||||
SELECT start_metadata_sync_to_node('localhost', :worker_1_port);
|
||||
start_metadata_sync_to_node
|
||||
|
@ -1131,7 +1163,7 @@ SELECT create_distributed_table('mx_table', 'a');
|
|||
SELECT master_add_node('localhost', :worker_2_port);
|
||||
master_add_node
|
||||
-------------------------------------------
|
||||
(4,4,localhost,57638,default,f,t,primary)
|
||||
(5,4,localhost,57638,default,f,t,primary)
|
||||
(1 row)
|
||||
|
||||
SELECT start_metadata_sync_to_node('localhost', :worker_2_port);
|
||||
|
@ -1344,7 +1376,7 @@ SELECT master_add_node('localhost', :worker_2_port);
|
|||
NOTICE: Replicating reference table "mx_ref" to the node localhost:57638
|
||||
master_add_node
|
||||
-------------------------------------------
|
||||
(5,5,localhost,57638,default,f,t,primary)
|
||||
(6,5,localhost,57638,default,f,t,primary)
|
||||
(1 row)
|
||||
|
||||
SELECT shardid, nodename, nodeport
|
||||
|
|
|
@ -67,6 +67,14 @@ SELECT unnest(master_metadata_snapshot());
|
|||
-- Ensure that hasmetadata=false for all nodes
|
||||
SELECT count(*) FROM pg_dist_node WHERE hasmetadata=true;
|
||||
|
||||
-- Ensure it works when run on a secondary node
|
||||
SELECT groupid AS worker_1_group FROM pg_dist_node WHERE nodeport = :worker_1_port \gset
|
||||
SELECT master_add_node('localhost', 8888, groupid => :worker_1_group, noderole => 'secondary');
|
||||
SELECT start_metadata_sync_to_node('localhost', 8888);
|
||||
SELECT hasmetadata FROM pg_dist_node WHERE nodeport = 8888;
|
||||
SELECT stop_metadata_sync_to_node('localhost', 8888);
|
||||
SELECT hasmetadata FROM pg_dist_node WHERE nodeport = 8888;
|
||||
|
||||
-- Run start_metadata_sync_to_node and check that it marked hasmetadata for that worker
|
||||
SELECT start_metadata_sync_to_node('localhost', :worker_1_port);
|
||||
SELECT nodeid, hasmetadata FROM pg_dist_node WHERE nodename='localhost' AND nodeport=:worker_1_port;
|
||||
|
|
Loading…
Reference in New Issue