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);
|
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 */
|
/* generate and add the local group id's update query */
|
||||||
localGroupIdUpdateCommand = LocalGroupIdUpdateCommand(workerNode->groupId);
|
localGroupIdUpdateCommand = LocalGroupIdUpdateCommand(workerNode->groupId);
|
||||||
|
|
||||||
|
|
|
@ -175,6 +175,38 @@ SELECT count(*) FROM pg_dist_node WHERE hasmetadata=true;
|
||||||
0
|
0
|
||||||
(1 row)
|
(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
|
-- 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 start_metadata_sync_to_node('localhost', :worker_1_port);
|
||||||
start_metadata_sync_to_node
|
start_metadata_sync_to_node
|
||||||
|
@ -1131,7 +1163,7 @@ SELECT create_distributed_table('mx_table', 'a');
|
||||||
SELECT master_add_node('localhost', :worker_2_port);
|
SELECT master_add_node('localhost', :worker_2_port);
|
||||||
master_add_node
|
master_add_node
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
(4,4,localhost,57638,default,f,t,primary)
|
(5,4,localhost,57638,default,f,t,primary)
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT start_metadata_sync_to_node('localhost', :worker_2_port);
|
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
|
NOTICE: Replicating reference table "mx_ref" to the node localhost:57638
|
||||||
master_add_node
|
master_add_node
|
||||||
-------------------------------------------
|
-------------------------------------------
|
||||||
(5,5,localhost,57638,default,f,t,primary)
|
(6,5,localhost,57638,default,f,t,primary)
|
||||||
(1 row)
|
(1 row)
|
||||||
|
|
||||||
SELECT shardid, nodename, nodeport
|
SELECT shardid, nodename, nodeport
|
||||||
|
|
|
@ -67,6 +67,14 @@ SELECT unnest(master_metadata_snapshot());
|
||||||
-- Ensure that hasmetadata=false for all nodes
|
-- Ensure that hasmetadata=false for all nodes
|
||||||
SELECT count(*) FROM pg_dist_node WHERE hasmetadata=true;
|
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
|
-- 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 start_metadata_sync_to_node('localhost', :worker_1_port);
|
||||||
SELECT nodeid, hasmetadata FROM pg_dist_node WHERE nodename='localhost' AND nodeport=:worker_1_port;
|
SELECT nodeid, hasmetadata FROM pg_dist_node WHERE nodename='localhost' AND nodeport=:worker_1_port;
|
||||||
|
|
Loading…
Reference in New Issue