diff --git a/src/backend/distributed/master/worker_node_manager.c b/src/backend/distributed/master/worker_node_manager.c index e0e38e08c..4c32f8582 100644 --- a/src/backend/distributed/master/worker_node_manager.c +++ b/src/backend/distributed/master/worker_node_manager.c @@ -46,6 +46,7 @@ static WorkerNode * FindRandomNodeFromList(List *candidateWorkerNodeList); static bool OddNumber(uint32 number); static bool ListMember(List *currentList, WorkerNode *workerNode); static bool NodeIsPrimaryWorker(WorkerNode *node); +static bool CanHaveReferenceTablePlacements(void); static bool NodeIsReadableWorker(WorkerNode *node); @@ -401,6 +402,27 @@ NodeIsPrimaryWorker(WorkerNode *node) } +/* + * CanHaveReferenceTablePlacements returns true if current node can have + * reference table placements. This is only possible if we called below + * command formerly + * "SELECT master_add_node(coordinator_hostname, coordinator_port, groupId => 0)" + */ +static bool +CanHaveReferenceTablePlacements() +{ + bool hasReferenceTableReplica = false; + + /* + * All groups that have pg_dist_node entries, also have reference + * table placements. + */ + PrimaryNodeForGroup(GetLocalGroupId(), &hasReferenceTableReplica); + + return hasReferenceTableReplica; +} + + /* * ReferenceTablePlacementNodeList returns the set of nodes that should have * reference table placements. This includes all primaries, including the