Neil Ramaswamy created SPARK-51011:
--------------------------------------
Summary: Add logging for whether a task is going to be interrupted
when killing tasks
Key: SPARK-51011
URL: https://issues.apache.org/jira/browse/SPARK-51011
Project: Spark
Issue Type: Improvement
Components: Spark Core
Affects Versions: 4.0.0
Reporter: Neil Ramaswamy
I've noticed the following sequence of events are possible with a streaming
query:
# The maintenance thread grabs a lock on a RocksDB instance
# It does an unexpectedly long operation (i.e. close the DB, which does a
bunch of cleanup)
# A task thread from a _cancelled_ stage is in [this
loop|https://github.com/apache/spark/blob/fef1b2375c3074cb3b53d5c29df1aa27c269469c/sql/core/src/main/scala/org/apache/spark/sql/execution/streaming/state/RocksDB.scala#L1116]
to acquire the lock and can never get out.
# The task reaper can't kill the task thread (since it is stuck) in 60
seconds, so it kills the JVM.
This took a while to figure out, but it was amplified by the fact that I
couldn't tell for sure whether a Java interrupt was issued by the Executor when
this stage was cancelled. It would be helpful to log this in the TaskRunner
kill method. Effectively, I'm suggesting that:
{code:java}
25/01/27 23:49:32 INFO Executor: Executor is trying to kill foo-thread, reason:
<whatever>{code}
be changed to:
{code:java}
25/01/27 23:49:32 INFO Executor: Executor is trying to kill foo-thread,
interruptThread=true, reason: <whatever> {code}
A separate fix should be made for the streaming query issue (i.e. being in a
potentially tight loop without checking the task context's interrupt flag), but
since that happens in many places and requires a holistic fix, it will be
addressed in a separate ticket.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]