[ 
https://issues.apache.org/jira/browse/SPARK-33490?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Srimantha Rajapaksa updated SPARK-33490:
----------------------------------------
    Summary: calling system.exit(-1) from a future does not result in the 
driver reflecting the fact that  the spark app failed.  (was: calling 
system.exit(-1) from a future does not result in the driver reflecting the fact 
that  spark app failed.)

> calling system.exit(-1) from a future does not result in the driver 
> reflecting the fact that  the spark app failed.
> -------------------------------------------------------------------------------------------------------------------
>
>                 Key: SPARK-33490
>                 URL: https://issues.apache.org/jira/browse/SPARK-33490
>             Project: Spark
>          Issue Type: Bug
>          Components: Spark Core
>    Affects Versions: 2.4.0
>            Reporter: Srimantha Rajapaksa
>            Priority: Major
>
> Hi Guys,
> when calling system. exit(-1) from within a code block defined for a future 
> observed that the vm does not exit immediately as you would expect a java app 
> to do. in fact it seems to exit the future thread and the diver program 
> carries on as normal. the status of the app when it exits is also misleading. 
> It says FINISHED instead of FAILED. I have attached code sample see below) 
> that replicate this issue. is this a spark bug or a "feature" :)  any 
> thoughts?
> Note: I have been able to work around this by not calling system .exit(-1) 
> from within a future but this was definitely a gotcha that I thought 
> worthwhile raising..  
> {code:java}
> // code placeholder
> package com.spark.example
> import com.typesafe.config.Config
> import com.typesafe.scalalogging.Logger
> import org.apache.spark.rdd.RDD
> import org.apache.spark.sql.SparkSession
> import scala.concurrent.ExecutionContext.Implicits.global
> import scala.concurrent.duration.DurationInt
> import scala.concurrent.{Await, Future}
> import scala.util.{Failure, Success, Try}
> object SystemExitTestApp extends App {
>   val appName = "NumberCountSparkApp"
>   val logger = Logger(getClass)
>   val sparkMaster = "spark://adl-matspm01:7077"
>   val ss = SparkSession.builder()
>     .master(sparkMaster)
>     .appName(appName).getOrCreate()
>   logger.info(s"Starting test. thread id ${Thread.currentThread().getId}")
>   val data = Seq(1, 2, 3, 4)
>   val rdd: RDD[Int] = ss.sparkContext.parallelize(data)
>   val future = Future {
>     logger.info(s"inside future thread id ${Thread.currentThread().getId}")
>     Try {
>       throw new Exception("My dummy exception")
>       rdd.count()
>     } match {
>       case Success(_) => {
>         (true, 1)
>       }
>       case Failure(exception) => {
>         logger.info(s"inside future. Exception ${exception} thread id 
> ${Thread.currentThread().getId}")
>         (false, 0)
>       }
>     }
>   }
>   var result: Boolean = true
>   future onComplete {
>     case Success(x) => {
>       logger.info(s"success ${x}")
>       if (!x._1) {
>         logger.info(s"exiting in the success block of on complete. thread id 
> ${Thread.currentThread().getId}")
>         result = x._1
>         ss.close()
>         sys.exit(-1)
>       } else {
>         logger.info(s"not exiting in the success block of on complete. thread 
> id ${Thread.currentThread().getId}")
>         result = x._1
>       }
>     }
>     case Failure(exception) => {
>       logger.info(s"exiting in the failure block of on complete as exception 
> occurred ${exception}. thread id ${Thread.currentThread().getId}")
>       result = false
>       sys.exit(-1)
>     }
>   }
>   Await.result(future, 3 hours)
>   logger.info(s"should not see this really if we do lets use the result 
> outside. thread id ${Thread.currentThread().getId}")
>   if (!result) {
>     logger.info(s" inside main block should not see this really. thread id 
> ${Thread.currentThread().getId}")
>     //sys.exit(-1)
>   }
> }
> {code}
>  
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@spark.apache.org
For additional commands, e-mail: issues-h...@spark.apache.org

Reply via email to