mirror of https://github.com/citusdata/citus.git
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.pull/4480/head
parent
e718d24868
commit
ed58a404d5
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue