From 56ab64b747c415b6942b9a1de6e103af5f817a0a Mon Sep 17 00:00:00 2001 From: Gledis Zeneli <43916939+gledis69@users.noreply.github.com> Date: Tue, 15 Mar 2022 15:02:47 +0300 Subject: [PATCH] Patches #5758 with some more error checks (#5804) Add error checks to detect failed connection and don't ping secondary nodes to detect self reference. --- src/backend/distributed/metadata/node_metadata.c | 1 + src/backend/distributed/transaction/worker_transaction.c | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) 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);