From 15ade3b7155887795179df2cf670ed2ead3ac2e0 Mon Sep 17 00:00:00 2001 From: Hadi Moshayedi Date: Fri, 19 Jul 2019 11:12:51 -0700 Subject: [PATCH] Convert NoLock heap opens to AccessShareLock. Postgres 12 has added bunch of assertions to disallow NoLock heap opens. --- src/backend/distributed/commands/truncate.c | 4 ++-- src/backend/distributed/utils/multi_partitioning_utils.c | 2 +- src/backend/distributed/utils/node_metadata.c | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/backend/distributed/commands/truncate.c b/src/backend/distributed/commands/truncate.c index 558688598..9d7958f31 100644 --- a/src/backend/distributed/commands/truncate.c +++ b/src/backend/distributed/commands/truncate.c @@ -67,7 +67,7 @@ ErrorIfUnsupportedTruncateStmt(TruncateStmt *truncateStatement) foreach(relationCell, relationList) { RangeVar *rangeVar = (RangeVar *) lfirst(relationCell); - Oid relationId = RangeVarGetRelid(rangeVar, NoLock, true); + Oid relationId = RangeVarGetRelid(rangeVar, AccessShareLock, true); char relationKind = get_rel_relkind(relationId); if (IsDistributedTable(relationId) && relationKind == RELKIND_FOREIGN_TABLE) @@ -94,7 +94,7 @@ EnsurePartitionTableNotReplicatedForTruncate(TruncateStmt *truncateStatement) foreach(relationCell, truncateStatement->relations) { RangeVar *relationRV = (RangeVar *) lfirst(relationCell); - Relation relation = heap_openrv(relationRV, NoLock); + Relation relation = heap_openrv(relationRV, AccessShareLock); Oid relationId = RelationGetRelid(relation); if (!IsDistributedTable(relationId)) diff --git a/src/backend/distributed/utils/multi_partitioning_utils.c b/src/backend/distributed/utils/multi_partitioning_utils.c index c14053ffa..733667d05 100644 --- a/src/backend/distributed/utils/multi_partitioning_utils.c +++ b/src/backend/distributed/utils/multi_partitioning_utils.c @@ -66,7 +66,7 @@ PartitionedTable(Oid relationId) bool PartitionedTableNoLock(Oid relationId) { - Relation rel = try_relation_open(relationId, NoLock); + Relation rel = try_relation_open(relationId, AccessShareLock); bool partitionedTable = false; /* don't error out for tables that are dropped */ diff --git a/src/backend/distributed/utils/node_metadata.c b/src/backend/distributed/utils/node_metadata.c index a3e32f8ed..8919ea668 100644 --- a/src/backend/distributed/utils/node_metadata.c +++ b/src/backend/distributed/utils/node_metadata.c @@ -1333,6 +1333,8 @@ DeleteNodeRow(char *nodeName, int32 nodePort) ScanKeyData scanKey[2]; Relation pgDistNode = heap_open(DistNodeRelationId(), RowExclusiveLock); + Relation identityIdx = index_open(RelationGetReplicaIndex(pgDistNode), + AccessShareLock); ScanKeyInit(&scanKey[0], Anum_pg_dist_node_nodename, BTEqualStrategyNumber, F_TEXTEQ, CStringGetTextDatum(nodeName)); @@ -1360,6 +1362,7 @@ DeleteNodeRow(char *nodeName, int32 nodePort) /* increment the counter so that next command won't see the row */ CommandCounterIncrement(); + heap_close(identityIdx, NoLock); heap_close(pgDistNode, NoLock); }