Raviston6296 commented on PR #60149:
URL: https://github.com/apache/spark/pull/60149#issuecomment-6685879848

   LGTM. I checked a few things while going through it:
   
   - Moving `take()` out of the inner `try` doesn't change interrupt handling: 
`NonFatal` never matched `InterruptedException`, so it already went to the 
outer `catch` before this change.
   - No double reply in the normal flow: `context.reply(...)` is the last 
statement of each handler, and its argument (`serializedMapStatus` etc.) is 
evaluated before it. So `sendFailure` only runs when nothing was replied, or 
when `reply` itself threw. For a `LocalNettyRpcCallContext` whose promise was 
already completed, `sendFailure` would throw `IllegalStateException`, and 
`replyFailure` catches and logs it.
   
   One question, not blocking: on the executor, `askTracker` sits outside the 
`try` in `MapOutputTrackerWorker.getStatuses` that maps errors to 
`MetadataFetchFailedException`. So the new fast failure still surfaces as a 
plain task failure (`SparkException("Error communicating with 
MapOutputTracker", ...)`), not a fetch failure. That's the same classification 
as the old `RpcTimeoutException`, only without the 120s wait. For the 
unregistered-shuffle race you describe, would it be better for the master to 
answer with something the worker turns into a `MetadataFetchFailedException`, 
so the stage is resubmitted instead of the task being retried? That would be a 
follow-up, if anything.
   


-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to