Github user vanzin commented on a diff in the pull request:
https://github.com/apache/spark/pull/20474#discussion_r165741132
--- Diff:
core/src/main/scala/org/apache/spark/status/api/v1/OneApplicationResource.scala
---
@@ -51,6 +52,43 @@ private[v1] class AbstractApplicationResource extends
BaseAppResource {
@Path("executors")
def executorList(): Seq[ExecutorSummary] =
withUI(_.store.executorList(true))
+ @GET
+ @Path("executors/{executorId}/threads")
+ def threadDump(@PathParam("executorId") executorId: String): Response =
withUI { ui =>
+ uiRoot.executorThreadDumpsNotAvailableError().getOrElse {
+ val safeExecutorId =
+ Option(UIUtils.stripXSS(executorId)).map { executorId =>
+ UIUtils.decodeURLParameter(executorId)
+ }.getOrElse {
+ throw new IllegalArgumentException(s"Missing executorId
parameter")
+ }
+
+ def isAllDigits(x: String) = x.forall(Character.isDigit)
+
+ if (executorId != SparkContext.DRIVER_IDENTIFIER &&
!isAllDigits(executorId)) {
+ Response.serverError()
+ .entity(s"Invalid executorId: neither
'${SparkContext.DRIVER_IDENTIFIER}' nor number.")
+ .status(Response.Status.BAD_REQUEST)
+ .build()
+ } else {
+ if
(ui.store.asOption(ui.store.executorSummary(executorId)).exists(!_.isActive)) {
--- End diff --
Those two error messages say "No stack traces are available", while the
actual error I'm pointing out is that the executor may not exist at all. The
HTTP error code is the same, it's just that the message is misleading.
e.g. if you have 5 executors and ask for the stack trace from executor
1000. Yeah, technically, "No stack traces are available" is correct, it's just
that we can do better.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]