From ed58a404d59bb8baaa0f9d3a2543d31586e30965 Mon Sep 17 00:00:00 2001 From: Onder Kalaci Date: Thu, 14 Jan 2021 19:10:44 +0300 Subject: [PATCH] Release lock on CoordinatorAddedAsWorkerNode() Because master_add_node(or others) might acquire ExclusiveLock and their initiated sessions may call CoordinatorAddedAsWorkerNode(). With this we prevent potential deadlocks. --- src/backend/distributed/commands/table.c | 4 ++-- src/backend/distributed/operations/worker_node_manager.c | 6 +----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/backend/distributed/commands/table.c b/src/backend/distributed/commands/table.c index 95a8cb0e8..09b205851 100644 --- a/src/backend/distributed/commands/table.c +++ b/src/backend/distributed/commands/table.c @@ -413,8 +413,8 @@ PreprocessAlterTableStmt(Node *node, const char *alterTableCommand, } if (processUtilityContext != PROCESS_UTILITY_SUBCOMMAND && - AlterTableDefinesFKeyBetweenPostgresAndNonDistTable(alterTableStatement) && - CoordinatorAddedAsWorkerNode()) + CoordinatorAddedAsWorkerNode() && + AlterTableDefinesFKeyBetweenPostgresAndNonDistTable(alterTableStatement)) { /* * We don't process subcommands generated by postgres. diff --git a/src/backend/distributed/operations/worker_node_manager.c b/src/backend/distributed/operations/worker_node_manager.c index a1637bf34..12d3bdf06 100644 --- a/src/backend/distributed/operations/worker_node_manager.c +++ b/src/backend/distributed/operations/worker_node_manager.c @@ -418,17 +418,13 @@ NodeIsPrimaryWorker(WorkerNode *node) /* * CoordinatorAddedAsWorkerNode returns true if coordinator is added to the - * pg_dist_node. This function also acquires ShareLock on pg_dist_node - * and does not release it to ensure that existency of the coordinator in - * metadata won't be changed until the end of transaction. + * pg_dist_node. */ bool CoordinatorAddedAsWorkerNode() { bool groupContainsNodes = false; - LockRelationOid(DistNodeRelationId(), ShareLock); - PrimaryNodeForGroup(COORDINATOR_GROUP_ID, &groupContainsNodes); return groupContainsNodes;