diff --git a/src/backend/distributed/metadata/node_metadata.c b/src/backend/distributed/metadata/node_metadata.c index 6f80558e8..214fb2dec 100644 --- a/src/backend/distributed/metadata/node_metadata.c +++ b/src/backend/distributed/metadata/node_metadata.c @@ -283,6 +283,7 @@ citus_add_node(PG_FUNCTION_ARGS) */ if (workerNode != NULL && workerNode->groupId != COORDINATOR_GROUP_ID && + workerNode->nodeRole != SecondaryNodeRoleId() && IsWorkerTheCurrentNode(workerNode)) { ereport(ERROR, (errmsg("Node cannot add itself as a worker."), diff --git a/src/backend/distributed/transaction/worker_transaction.c b/src/backend/distributed/transaction/worker_transaction.c index 44e4a1ead..69a318023 100644 --- a/src/backend/distributed/transaction/worker_transaction.c +++ b/src/backend/distributed/transaction/worker_transaction.c @@ -658,10 +658,17 @@ IsWorkerTheCurrentNode(WorkerNode *workerNode) workerNode->workerPort, CurrentUserName(), NULL); + const char *command = "SELECT metadata ->> 'server_id' AS server_id FROM pg_dist_node_metadata"; - SendRemoteCommand(workerConnection, command); + int resultCode = SendRemoteCommand(workerConnection, command); + + if (resultCode == 0) + { + CloseConnection(workerConnection); + return false; + } PGresult *result = GetRemoteCommandResult(workerConnection, true);