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
Brian Cloutier 2017-08-03 18:24:06 +03:00 committed by Brian Cloutier
parent 7e4b2c1595
commit e7846ba7d1
3 changed files with 51 additions and 2 deletions

View File

@ -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);

View File

@ -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

View File

@ -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;