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

    https://github.com/apache/spark/pull/20474#discussion_r165407125
  
    --- Diff: 
core/src/main/scala/org/apache/spark/status/api/v1/OneApplicationResource.scala 
---
    @@ -51,6 +52,21 @@ 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):
    +  Option[Array[ThreadStackTrace]] = withUI { ui =>
    +    val safeExecutorId =
    +      Option(UIUtils.stripXSS(executorId)).map { executorId =>
    +        UIUtils.decodeURLParameter(executorId)
    +      }.getOrElse {
    +        throw new IllegalArgumentException(s"Missing executorId parameter")
    +      }
    +    ui.sc.flatMap { sc =>
    +      sc.getExecutorThreadDump(safeExecutorId)
    --- End diff --
    
    Thanks. Yes, currently it gives back null. You are right an error message 
definitely is needed here. Moreover I can check for totally bogus executorId 
(neither "driver" nor parsable to integer), finally I can access 
ExecutorSummary to decide whether the executor is active. The history server 
check is also easy.


---

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

Reply via email to