diff --git a/core/trino-main/src/main/java/io/trino/execution/QueryStateMachine.java b/core/trino-main/src/main/java/io/trino/execution/QueryStateMachine.java index fab76cad511a..d83d74f074dc 100644 --- a/core/trino-main/src/main/java/io/trino/execution/QueryStateMachine.java +++ b/core/trino-main/src/main/java/io/trino/execution/QueryStateMachine.java @@ -1523,6 +1523,7 @@ public synchronized void setQueryCompleted() } queryCompleted = true; inputsQueue.clear(); + outputTaskFailureListeners.clear(); noMoreInputs = true; } @@ -1530,7 +1531,9 @@ public void addOutputTaskFailureListener(TaskFailureListener listener) { Map failures; synchronized (this) { - outputTaskFailureListeners.add(listener); + if (!queryCompleted) { + outputTaskFailureListeners.add(listener); + } failures = ImmutableMap.copyOf(outputTaskFailures); } if (!failures.isEmpty()) { @@ -1542,6 +1545,10 @@ public void outputTaskFailed(TaskId taskId, Throwable failure) { List listeners; synchronized (this) { + if (queryCompleted) { + // ignore late task failed events after query is completed + return; + } outputTaskFailures.putIfAbsent(taskId, failure); listeners = ImmutableList.copyOf(outputTaskFailureListeners); }