[SPARK-12399] Display correct error message when accessing REST API with an unknown app Id
I got an exception when accessing the below REST API with an unknown application Id. `http://<server-url>:18080/api/v1/applications/xxx/jobs` Instead of an exception, I expect an error message "no such app: xxx" which is a similar error message when I access `/api/v1/applications/xxx` ``` org.spark-project.guava.util.concurrent.UncheckedExecutionException: java.util.NoSuchElementException: no app with key xxx at org.spark-project.guava.cache.LocalCache$Segment.get(LocalCache.java:2263) at org.spark-project.guava.cache.LocalCache.get(LocalCache.java:4000) at org.spark-project.guava.cache.LocalCache.getOrLoad(LocalCache.java:4004) at org.spark-project.guava.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4874) at org.apache.spark.deploy.history.HistoryServer.getSparkUI(HistoryServer.scala:116) at org.apache.spark.status.api.v1.UIRoot$class.withSparkUI(ApiRootResource.scala:226) at org.apache.spark.deploy.history.HistoryServer.withSparkUI(HistoryServer.scala:46) at org.apache.spark.status.api.v1.ApiRootResource.getJobs(ApiRootResource.scala:66) ``` Author: Carson Wang <carson.wang@intel.com> Closes #10352 from carsonwang/unknownAppFix.
This commit is contained in:
parent
5c2682b0c8
commit
b244297966
|
@ -21,6 +21,8 @@ import java.util.NoSuchElementException
|
|||
import java.util.zip.ZipOutputStream
|
||||
import javax.servlet.http.{HttpServlet, HttpServletRequest, HttpServletResponse}
|
||||
|
||||
import scala.util.control.NonFatal
|
||||
|
||||
import com.google.common.cache._
|
||||
import org.eclipse.jetty.servlet.{ServletContextHandler, ServletHolder}
|
||||
import org.apache.spark.{Logging, SecurityManager, SparkConf}
|
||||
|
@ -113,7 +115,17 @@ class HistoryServer(
|
|||
}
|
||||
|
||||
def getSparkUI(appKey: String): Option[SparkUI] = {
|
||||
Option(appCache.get(appKey))
|
||||
try {
|
||||
val ui = appCache.get(appKey)
|
||||
Some(ui)
|
||||
} catch {
|
||||
case NonFatal(e) => e.getCause() match {
|
||||
case nsee: NoSuchElementException =>
|
||||
None
|
||||
|
||||
case cause: Exception => throw cause
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
initialize()
|
||||
|
@ -193,7 +205,7 @@ class HistoryServer(
|
|||
appCache.get(appId + attemptId.map { id => s"/$id" }.getOrElse(""))
|
||||
true
|
||||
} catch {
|
||||
case e: Exception => e.getCause() match {
|
||||
case NonFatal(e) => e.getCause() match {
|
||||
case nsee: NoSuchElementException =>
|
||||
false
|
||||
|
||||
|
|
Loading…
Reference in a new issue