Github user qqsun8819 commented on a diff in the pull request:

    https://github.com/apache/spark/pull/214#discussion_r10918103
  
    --- Diff: 
core/src/main/scala/org/apache/spark/scheduler/TaskSchedulerImpl.scala ---
    @@ -198,6 +201,13 @@ private[spark] class TaskSchedulerImpl(
        */
       def resourceOffers(offers: Seq[WorkerOffer]): Seq[Seq[TaskDescription]] 
= synchronized {
         SparkEnv.set(sc.env)
    +    // Make thread pool local for shutdown before the function returns
    +    // This is for driver can exit normally which not call sc.stop or 
sys.exit
    +    val serializeWorkerPool = new ThreadPoolExecutor(
    --- End diff --
    
    Actually, my first patch just did what you said. But a case called 
DriverSuite failed because of this, as I stated in my code comments. This case 
new a SparkContext and didn't call SparkContext.stop, so TaskScheduler.stop has 
no chance to run, and this threadpool has no chance to be shutdown, and the 
main thread just can't exit. I also know that new a Threadpool in every call is 
not that good, but currently I can't come up other good idea. Any other advice?


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---

Reply via email to