Skip to content
Snippets Groups Projects
Commit b2442979 authored by Carson Wang's avatar Carson Wang Committed by Marcelo Vanzin
Browse files

[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.
parent 5c2682b0
No related branches found
No related tags found
No related merge requests found
...@@ -21,6 +21,8 @@ import java.util.NoSuchElementException ...@@ -21,6 +21,8 @@ import java.util.NoSuchElementException
import java.util.zip.ZipOutputStream import java.util.zip.ZipOutputStream
import javax.servlet.http.{HttpServlet, HttpServletRequest, HttpServletResponse} import javax.servlet.http.{HttpServlet, HttpServletRequest, HttpServletResponse}
import scala.util.control.NonFatal
import com.google.common.cache._ import com.google.common.cache._
import org.eclipse.jetty.servlet.{ServletContextHandler, ServletHolder} import org.eclipse.jetty.servlet.{ServletContextHandler, ServletHolder}
import org.apache.spark.{Logging, SecurityManager, SparkConf} import org.apache.spark.{Logging, SecurityManager, SparkConf}
...@@ -113,7 +115,17 @@ class HistoryServer( ...@@ -113,7 +115,17 @@ class HistoryServer(
} }
def getSparkUI(appKey: String): Option[SparkUI] = { 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() initialize()
...@@ -193,7 +205,7 @@ class HistoryServer( ...@@ -193,7 +205,7 @@ class HistoryServer(
appCache.get(appId + attemptId.map { id => s"/$id" }.getOrElse("")) appCache.get(appId + attemptId.map { id => s"/$id" }.getOrElse(""))
true true
} catch { } catch {
case e: Exception => e.getCause() match { case NonFatal(e) => e.getCause() match {
case nsee: NoSuchElementException => case nsee: NoSuchElementException =>
false false
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment