diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertIntoTableCommand.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertIntoTableCommand.java index 0d9f477f96..f524ee9672 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertIntoTableCommand.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/trees/plans/commands/insert/InsertIntoTableCommand.java @@ -137,7 +137,7 @@ public class InsertIntoTableCommand extends Command implements ForwardWithSync, targetTableIf.getDatabase().getFullName() + "." + targetTableIf.getName()); } - AbstractInsertExecutor insertExecutor; + AbstractInsertExecutor insertExecutor = null; // should lock target table until we begin transaction. targetTableIf.readLock(); try { @@ -199,8 +199,14 @@ public class InsertIntoTableCommand extends Command implements ForwardWithSync, insertExecutor.beginTransaction(); insertExecutor.finalizeSink(planner.getFragments().get(0), sink, physicalSink); - } finally { targetTableIf.readUnlock(); + } catch (Throwable e) { + targetTableIf.readUnlock(); + // the abortTxn in onFail need to acquire table write lock + if (insertExecutor != null) { + insertExecutor.onFail(e); + } + throw e; } executor.setProfileType(ProfileType.LOAD);