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(); /*