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

    https://github.com/apache/spark/pull/19698#discussion_r150648166
  
    --- Diff: core/src/main/scala/org/apache/spark/ui/jobs/JobPage.scala ---
    @@ -182,173 +185,183 @@ private[ui] class JobPage(parent: JobsTab) extends 
WebUIPage("job") {
       }
     
       def render(request: HttpServletRequest): Seq[Node] = {
    -    val listener = parent.jobProgresslistener
    +    // stripXSS is called first to remove suspicious characters used in 
XSS attacks
    +    val parameterId = UIUtils.stripXSS(request.getParameter("id"))
    +    require(parameterId != null && parameterId.nonEmpty, "Missing id 
parameter")
     
    -    listener.synchronized {
    -      // stripXSS is called first to remove suspicious characters used in 
XSS attacks
    -      val parameterId = UIUtils.stripXSS(request.getParameter("id"))
    -      require(parameterId != null && parameterId.nonEmpty, "Missing id 
parameter")
    -
    -      val jobId = parameterId.toInt
    -      val jobDataOption = listener.jobIdToData.get(jobId)
    -      if (jobDataOption.isEmpty) {
    -        val content =
    -          <div id="no-info">
    -            <p>No information to display for job {jobId}</p>
    -          </div>
    -        return UIUtils.headerSparkPage(
    -          s"Details for Job $jobId", content, parent)
    -      }
    -      val jobData = jobDataOption.get
    -      val isComplete = jobData.status != JobExecutionStatus.RUNNING
    -      val stages = jobData.stageIds.map { stageId =>
    -        // This could be empty if the JobProgressListener hasn't received 
information about the
    -        // stage or if the stage information has been garbage collected
    -        listener.stageIdToInfo.getOrElse(stageId,
    -          new StageInfo(stageId, 0, "Unknown", 0, Seq.empty, Seq.empty, 
"Unknown"))
    +    val jobId = parameterId.toInt
    +    val jobDataOption = Try(store.job(jobId)).toOption
    --- End diff --
    
    I added a shared method; I'm not too happy with it, but this code needs to 
be resilient to data disappearing (either because events don't arrive or 
because data is cleaned up to save memory), so, there's not really a good way 
around it...


---

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

Reply via email to