From 3151b52a0bc011af1ce726c3dccb6a41c5bc8c52 Mon Sep 17 00:00:00 2001 From: Brian Cloutier Date: Wed, 26 Jul 2017 18:15:26 +0300 Subject: [PATCH] Add citus.cluster_name GUC - Nodes with a nodecluster which does not match citus.cluster_name are excluded from the metadata cache and never seen by another part of Citus. --- src/backend/distributed/shared_library_init.c | 10 ++++++++++ src/backend/distributed/utils/node_metadata.c | 11 +++++++++-- src/include/distributed/worker_manager.h | 1 + 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/backend/distributed/shared_library_init.c b/src/backend/distributed/shared_library_init.c index 7c3dcb579..32ca840b0 100644 --- a/src/backend/distributed/shared_library_init.c +++ b/src/backend/distributed/shared_library_init.c @@ -670,6 +670,16 @@ RegisterCitusConfigVariables(void) 0, NULL, NULL, NULL); + DefineCustomStringVariable( + "citus.cluster_name", + gettext_noop("Which cluster this node is a part of"), + NULL, + &CurrentCluster, + "default", + PGC_SU_BACKEND, + 0, + NULL, NULL, NULL); + DefineCustomBoolVariable( "citus.enable_version_checks", gettext_noop("Enables version checks during CREATE/ALTER EXTENSION commands"), diff --git a/src/backend/distributed/utils/node_metadata.c b/src/backend/distributed/utils/node_metadata.c index 43c911cfe..897323318 100644 --- a/src/backend/distributed/utils/node_metadata.c +++ b/src/backend/distributed/utils/node_metadata.c @@ -49,6 +49,8 @@ /* default group size */ int GroupSize = 1; +/* config variable managed via guc.c */ +char *CurrentCluster = "default"; /* local function forward declarations */ static Datum ActivateNode(char *nodeName, int nodePort); @@ -395,7 +397,7 @@ master_initialize_node_metadata(PG_FUNCTION_ARGS) /* nodeRole and nodeCluster don't exist when this function is caled */ Oid nodeRole = InvalidOid; - char *nodeCluster = "default"; + char *nodeCluster = WORKER_DEFAULT_CLUSTER; CheckCitusVersion(ERROR); @@ -556,7 +558,12 @@ ReadWorkerNodes() while (HeapTupleIsValid(heapTuple)) { WorkerNode *workerNode = TupleToWorkerNode(tupleDescriptor, heapTuple); - workerNodeList = lappend(workerNodeList, workerNode); + + if (strncmp(workerNode->nodeCluster, CurrentCluster, WORKER_LENGTH) == 0) + { + /* the coordinator acts as if it never sees nodes not in it's cluster */ + workerNodeList = lappend(workerNodeList, workerNode); + } heapTuple = systable_getnext(scanDescriptor); } diff --git a/src/include/distributed/worker_manager.h b/src/include/distributed/worker_manager.h index 7e2fb5da5..3d07fb6bf 100644 --- a/src/include/distributed/worker_manager.h +++ b/src/include/distributed/worker_manager.h @@ -53,6 +53,7 @@ typedef struct WorkerNode /* Config variables managed via guc.c */ extern int MaxWorkerNodesTracked; extern char *WorkerListFileName; +extern char *CurrentCluster; /* Function declarations for finding worker nodes to place shards on */