From 11d5301d35ceeff85894062862b7f3e80da6ee14 Mon Sep 17 00:00:00 2001 From: Sait Talha Nisanci Date: Fri, 13 Aug 2021 17:15:18 +0300 Subject: [PATCH] wip --- .../distributed/executor/adaptive_executor.c | 21 +------------------ .../distributed/operations/delete_protocol.c | 4 ++++ 2 files changed, 5 insertions(+), 20 deletions(-) diff --git a/src/backend/distributed/executor/adaptive_executor.c b/src/backend/distributed/executor/adaptive_executor.c index 9eba7e6e9..cf7ec0a57 100644 --- a/src/backend/distributed/executor/adaptive_executor.c +++ b/src/backend/distributed/executor/adaptive_executor.c @@ -1560,20 +1560,6 @@ LockPartitionsForDistributedPlan(DistributedPlan *distributedPlan) Oid targetRelationId = distributedPlan->targetRelationId; LockPartitionsInRelationList(list_make1_oid(targetRelationId), RowExclusiveLock); - - if (PartitionTable(targetRelationId)) - { - Oid parentRelationId = PartitionParentOid(targetRelationId); - - /* - * Postgres only takes the lock on parent when the session accesses the - * partition for the first time. So it should be okay to get this lock from - * PG perspective. Even though we diverge from PG behavior for concurrent - * modifications on partitions vs CREATE/DROP partitions, we consider this as - * a reasonable trade-off to avoid distributed deadlocks. - */ - LockRelationOid(parentRelationId, AccessShareLock); - } } /* @@ -1663,12 +1649,7 @@ LockParentShardResouceIfPartitionTaskList(List *taskList) return; } - ShardInterval *shardInterval = LoadShardInterval(shardId); - Oid relationId = shardInterval->relationId; - if (PartitionTable(relationId)) - { - LockParentShardResourceIfPartition(shardId, AccessExclusiveLock); - } + LockParentShardResourceIfPartition(shardId, AccessExclusiveLock); } diff --git a/src/backend/distributed/operations/delete_protocol.c b/src/backend/distributed/operations/delete_protocol.c index ab5ff7be6..0b13f4df4 100644 --- a/src/backend/distributed/operations/delete_protocol.c +++ b/src/backend/distributed/operations/delete_protocol.c @@ -45,6 +45,7 @@ #include "distributed/placement_connection.h" #include "distributed/relay_utility.h" #include "distributed/remote_commands.h" +#include "distributed/resource_lock.h" #include "distributed/worker_protocol.h" #include "distributed/worker_transaction.h" #include "lib/stringinfo.h" @@ -332,11 +333,14 @@ DropShards(Oid relationId, char *schemaName, char *relationName, deletableShardIntervalList); bool shouldExecuteTasksLocally = ShouldExecuteTasksLocally(dropTaskList); + Task *task = NULL; foreach_ptr(task, dropTaskList) { uint64 shardId = task->anchorShardId; + LockParentShardResourceIfPartition(shardId, AccessExclusiveLock); + ShardPlacement *shardPlacement = NULL; foreach_ptr(shardPlacement, task->taskPlacementList) {