You are viewing a plain text version of this content. The canonical link for it is here.
Posted to reviews@spark.apache.org by "AbhinavBattu (via GitHub)" <gi...@apache.org> on 2026/08/20 13:51:47 UTC
[PR] [SPARK-58908][K8S] Do not report ExecutorKilled for heartbeat-timeout executor kills [spark]
AbhinavBattu opened a new pull request, #58168:
URL: https://github.com/apache/spark/pull/58168
### What changes were proposed in this pull request?
`KubernetesClusterSchedulerBackend.doKillExecutors` reports `ExecutorKilled` for every
executor it kills. This PR skips that report for executors killed with
`countFailures = true`, whose loss reason is reported by the caller instead.
`CoarseGrainedSchedulerBackend.killExecutors` records
`executorsPendingToRemove(id) = !countFailures`, so such a kill stores `false`.
### Why are the changes needed?
On a heartbeat timeout, `HeartbeatReceiver.expireDeadHosts` does two things in order:
1. `sc.killAndReplaceExecutor(id)`, which calls
`killExecutors(..., countFailures = true, force = true)`
2. sends `RemoveExecutor(id, ExecutorProcessLost("Executor heartbeat timed out after N ms"))`
`doKillExecutors` runs synchronously inside step 1 (`adjustTargetNumExecutors = false`, so
the future resolves on `ThreadUtils.sameThread`), so its `RemoveExecutor(id, ExecutorKilled)`
reaches the driver endpoint first and removes the executor from `executorDataMap`. Step 2's
message then falls into the `case None` branch and has no effect. This is deterministic
rather than a race.
The recorded reason is therefore `ExecutorKilled`, which `TaskSetManager` maps to
`exitCausedByApp = false`, so the task failures do not count towards
`spark.task.maxFailures` and the job does not fast-fail. Kubernetes is the only backend
whose `doKillExecutors` reports a loss reason, which is why YARN is unaffected.
`countFailures = true` has a single caller, `SparkContext.killAndReplaceExecutor`, itself
called only from `HeartbeatReceiver.expireDeadHosts`, so only the heartbeat timeout path
changes.
### Does this PR introduce _any_ user-facing change?
Yes. On Kubernetes, tasks lost to a heartbeat timeout now count towards
`spark.task.maxFailures`. A job that repeatedly loses executors this way now fails after the
retry limit instead of retrying indefinitely, matching YARN.
### How was this patch tested?
Added a test to `KubernetesClusterSchedulerBackendSuite` covering both branches: an executor
killed with `countFailures = true` is not reported as `ExecutorKilled`, while an ordinary
kill still is. The existing "Kill executors" test, which calls `doKillExecutors` with no
pending-removal entry, is unchanged.
```
build/sbt -Pkubernetes 'kubernetes/testOnly *KubernetesClusterSchedulerBackendSuite'
```
### Was this patch authored or co-authored using generative AI tooling?
Generated-by: Claude Code (Claude Opus 5)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org
Re: [PR] [SPARK-58908][K8S] Do not report ExecutorKilled for heartbeat-timeout executor kills [spark]
Posted by "uros-b (via GitHub)" <gi...@apache.org>.
uros-b commented on PR #58168:
URL: https://github.com/apache/spark/pull/58168#issuecomment-5363135249
Thank you @AbhinavBattu!
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscribe@spark.apache.org
For additional commands, e-mail: reviews-help@spark.apache.org