From a3e9bef68557c45a9823cb6203660713f05cae9e Mon Sep 17 00:00:00 2001 From: Brian Cloutier Date: Fri, 4 Aug 2017 17:37:49 +0300 Subject: [PATCH] All users of WorkerNodeHash take an AccessShareLock The metadata cache simulates a SELECT on pg_dist_node. Now the locks it takes also simulate that SELECT. --- src/backend/distributed/master/master_metadata_utility.c | 2 -- src/backend/distributed/utils/metadata_cache.c | 7 +++++++ src/backend/distributed/utils/reference_table_utils.c | 1 - 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/backend/distributed/master/master_metadata_utility.c b/src/backend/distributed/master/master_metadata_utility.c index 084ee1555..f2bbab8b2 100644 --- a/src/backend/distributed/master/master_metadata_utility.c +++ b/src/backend/distributed/master/master_metadata_utility.c @@ -174,8 +174,6 @@ DistributedTableSize(Oid relationId, char *sizeQuery) ErrorIfNotSuitableToGetSize(relationId); - LockRelationOid(DistNodeRelationId(), AccessShareLock); - workerNodeList = ActivePrimaryNodeList(); foreach(workerNodeCell, workerNodeList) diff --git a/src/backend/distributed/utils/metadata_cache.c b/src/backend/distributed/utils/metadata_cache.c index b0980bee3..b35606f1c 100644 --- a/src/backend/distributed/utils/metadata_cache.c +++ b/src/backend/distributed/utils/metadata_cache.c @@ -43,6 +43,7 @@ #include "nodes/makefuncs.h" #include "parser/parse_func.h" #include "parser/parse_type.h" +#include "storage/lmgr.h" #include "utils/builtins.h" #include "utils/catcache.h" #include "utils/datum.h" @@ -2272,6 +2273,12 @@ GetWorkerNodeHash(void) { InitializeCaches(); /* ensure relevant callbacks are registered */ + /* + * Simulate a SELECT from pg_dist_node, ensure pg_dist_node doesn't change while our + * caller is using WorkerNodeHash. + */ + LockRelationOid(DistNodeRelationId(), AccessShareLock); + /* * We might have some concurrent metadata changes. In order to get the changes, * we first need to accept the cache invalidation messages. diff --git a/src/backend/distributed/utils/reference_table_utils.c b/src/backend/distributed/utils/reference_table_utils.c index a9172a0a1..d0362c88e 100644 --- a/src/backend/distributed/utils/reference_table_utils.c +++ b/src/backend/distributed/utils/reference_table_utils.c @@ -230,7 +230,6 @@ ReplicateShardToAllWorkers(ShardInterval *shardInterval) List *workerNodeList = NULL; ListCell *workerNodeCell = NULL; - LockRelationOid(DistNodeRelationId(), AccessShareLock); workerNodeList = ActivePrimaryNodeList(); /*