Details
-
Improvement
-
Status: Resolved
-
Major
-
Resolution: Duplicate
-
1.4.0, 1.4.1, 1.5.0, 1.5.1
-
None
Description
The implementations of the onComplete callback (and, by extension, the callbacks based on it) of FutureAction (SimpleFutureAction and ComplexFutureAction) each consume a thread that blocks waiting for the underlying job(s) to complete. This is unnecessary and is likely to be very surprising to anyone accustomed to the usual behavior of Scala Futures (i.e., that callbacks only occupy threads AFTER the underlying task has completed), and it runs the risk of causing thread starvation for any processes utilizing the same thread pool (especially if scala.concurrent.ExecutionContext.global is used). The implementations can and should be reworked to operate in a non-blocking manner, by modifying the underlying JobWaiter class to expose a non-blocking API, so that the onComplete (as well as onSuccess and onFailure) callbacks only utilize threads while they are actually executing.
Attachments
Issue Links
- duplicates
-
SPARK-9026 SimpleFutureAction.onComplete should not tie up a separate thread for each callback
- Resolved
- links to