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

    https://github.com/apache/spark/pull/19698#discussion_r150573812
  
    --- Diff: core/src/main/scala/org/apache/spark/ui/jobs/AllJobsPage.scala ---
    @@ -285,106 +272,120 @@ private[ui] class AllJobsPage(parent: JobsTab) 
extends WebUIPage("") {
       }
     
       def render(request: HttpServletRequest): Seq[Node] = {
    -    val listener = parent.jobProgresslistener
    -    listener.synchronized {
    -      val startTime = listener.startTime
    -      val endTime = listener.endTime
    -      val activeJobs = listener.activeJobs.values.toSeq
    -      val completedJobs = listener.completedJobs.reverse
    -      val failedJobs = listener.failedJobs.reverse
    -
    -      val activeJobsTable =
    -        jobsTable(request, "active", "activeJob", activeJobs, killEnabled 
= parent.killEnabled)
    -      val completedJobsTable =
    -        jobsTable(request, "completed", "completedJob", completedJobs, 
killEnabled = false)
    -      val failedJobsTable =
    -        jobsTable(request, "failed", "failedJob", failedJobs, killEnabled 
= false)
    -
    -      val shouldShowActiveJobs = activeJobs.nonEmpty
    -      val shouldShowCompletedJobs = completedJobs.nonEmpty
    -      val shouldShowFailedJobs = failedJobs.nonEmpty
    -
    -      val completedJobNumStr = if (completedJobs.size == 
listener.numCompletedJobs) {
    -        s"${completedJobs.size}"
    -      } else {
    -        s"${listener.numCompletedJobs}, only showing ${completedJobs.size}"
    +    val appInfo = store.applicationInfo()
    +    val startTime = appInfo.attempts.head.startTime.getTime()
    +    val endTime = appInfo.attempts.head.endTime.getTime()
    +
    +    val activeJobs = new ListBuffer[v1.JobData]()
    +    val _completedJobs = new ListBuffer[v1.JobData]()
    +    val _failedJobs = new ListBuffer[v1.JobData]()
    +
    +    store.jobsList(null).foreach { job =>
    +      job.status match {
    +        case JobExecutionStatus.SUCCEEDED =>
    +          _completedJobs += job
    +        case JobExecutionStatus.FAILED =>
    +          _failedJobs += job
    +        case _ =>
    +          activeJobs += job
           }
    +    }
     
    -      val summary: NodeSeq =
    -        <div>
    -          <ul class="unstyled">
    -            <li>
    -              <strong>User:</strong>
    -              {parent.getSparkUser}
    -            </li>
    -            <li>
    -              <strong>Total Uptime:</strong>
    -              {
    -                if (endTime < 0 && parent.sc.isDefined) {
    -                  UIUtils.formatDuration(System.currentTimeMillis() - 
startTime)
    -                } else if (endTime > 0) {
    -                  UIUtils.formatDuration(endTime - startTime)
    -                }
    -              }
    -            </li>
    -            <li>
    -              <strong>Scheduling Mode: </strong>
    -              
{listener.schedulingMode.map(_.toString).getOrElse("Unknown")}
    -            </li>
    +    val completedJobs = _completedJobs.toSeq.reverse
    +    val failedJobs = _failedJobs.toSeq.reverse
    --- End diff --
    
    actually is the `reverse` necessary at all?  seems if you trace through, 
only goes to `JobsDataSource`, where its sorted anyway


---

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to