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 &&
|
if (processUtilityContext != PROCESS_UTILITY_SUBCOMMAND &&
|
||||||
AlterTableDefinesFKeyBetweenPostgresAndNonDistTable(alterTableStatement) &&
|
CoordinatorAddedAsWorkerNode() &&
|
||||||
CoordinatorAddedAsWorkerNode())
|
AlterTableDefinesFKeyBetweenPostgresAndNonDistTable(alterTableStatement))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* We don't process subcommands generated by postgres.
|
* We don't process subcommands generated by postgres.
|
||||||
|
|
|
@ -418,17 +418,13 @@ NodeIsPrimaryWorker(WorkerNode *node)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* CoordinatorAddedAsWorkerNode returns true if coordinator is added to the
|
* CoordinatorAddedAsWorkerNode returns true if coordinator is added to the
|
||||||
* pg_dist_node. This function also acquires ShareLock on pg_dist_node
|
* 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.
|
|
||||||
*/
|
*/
|
||||||
bool
|
bool
|
||||||
CoordinatorAddedAsWorkerNode()
|
CoordinatorAddedAsWorkerNode()
|
||||||
{
|
{
|
||||||
bool groupContainsNodes = false;
|
bool groupContainsNodes = false;
|
||||||
|
|
||||||
LockRelationOid(DistNodeRelationId(), ShareLock);
|
|
||||||
|
|
||||||
PrimaryNodeForGroup(COORDINATOR_GROUP_ID, &groupContainsNodes);
|
PrimaryNodeForGroup(COORDINATOR_GROUP_ID, &groupContainsNodes);
|
||||||
|
|
||||||
return groupContainsNodes;
|
return groupContainsNodes;
|
||||||
|
|
Loading…
Reference in New Issue