Repository: spark
Updated Branches:
  refs/heads/master 18bf9d2b2 -> 24097d847


[SPARK-17795][WEB UI] Sorting on stage or job tables doesn’t reload page on 
that table

## What changes were proposed in this pull request?

Added anchor on table header id to sorting links on job and stage tables. This 
make the page reload after a sort load the page at the sorted table.

This only changes page load behavior so no UI changes

## How was this patch tested?

manually tested and dev/run-tests

Author: Alex Bozarth <[email protected]>

Closes #15369 from ajbozarth/spark17795.


Project: http://git-wip-us.apache.org/repos/asf/spark/repo
Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/24097d84
Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/24097d84
Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/24097d84

Branch: refs/heads/master
Commit: 24097d84743d3e792e395410139e8d486b75a3ef
Parents: 18bf9d2
Author: Alex Bozarth <[email protected]>
Authored: Fri Oct 7 11:47:37 2016 +0100
Committer: Sean Owen <[email protected]>
Committed: Fri Oct 7 11:47:37 2016 +0100

----------------------------------------------------------------------
 .../org/apache/spark/ui/jobs/AllJobsPage.scala  | 20 +++++++++++++-------
 .../apache/spark/ui/jobs/AllStagesPage.scala    | 12 ++++++------
 .../org/apache/spark/ui/jobs/JobPage.scala      | 17 ++++++++++++-----
 .../org/apache/spark/ui/jobs/PoolPage.scala     |  2 +-
 .../org/apache/spark/ui/jobs/StageTable.scala   | 14 ++++++++++----
 5 files changed, 42 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/spark/blob/24097d84/core/src/main/scala/org/apache/spark/ui/jobs/AllJobsPage.scala
----------------------------------------------------------------------
diff --git a/core/src/main/scala/org/apache/spark/ui/jobs/AllJobsPage.scala 
b/core/src/main/scala/org/apache/spark/ui/jobs/AllJobsPage.scala
index c04964e..19bb41a 100644
--- a/core/src/main/scala/org/apache/spark/ui/jobs/AllJobsPage.scala
+++ b/core/src/main/scala/org/apache/spark/ui/jobs/AllJobsPage.scala
@@ -216,6 +216,7 @@ private[ui] class AllJobsPage(parent: JobsTab) extends 
WebUIPage("") {
 
   private def jobsTable(
       request: HttpServletRequest,
+      tableHeaderId: String,
       jobTag: String,
       jobs: Seq[JobUIData]): Seq[Node] = {
     val allParameters = request.getParameterMap.asScala.toMap
@@ -256,6 +257,7 @@ private[ui] class AllJobsPage(parent: JobsTab) extends 
WebUIPage("") {
     try {
       new JobPagedTable(
         jobs,
+        tableHeaderId,
         jobTag,
         UIUtils.prependBaseUri(parent.basePath),
         "jobs", // subPath
@@ -288,9 +290,9 @@ private[ui] class AllJobsPage(parent: JobsTab) extends 
WebUIPage("") {
       val completedJobs = listener.completedJobs.reverse.toSeq
       val failedJobs = listener.failedJobs.reverse.toSeq
 
-      val activeJobsTable = jobsTable(request, "activeJob", activeJobs)
-      val completedJobsTable = jobsTable(request, "completedJob", 
completedJobs)
-      val failedJobsTable = jobsTable(request, "failedJob", failedJobs)
+      val activeJobsTable = jobsTable(request, "active", "activeJob", 
activeJobs)
+      val completedJobsTable = jobsTable(request, "completed", "completedJob", 
completedJobs)
+      val failedJobsTable = jobsTable(request, "failed", "failedJob", 
failedJobs)
 
       val shouldShowActiveJobs = activeJobs.nonEmpty
       val shouldShowCompletedJobs = completedJobs.nonEmpty
@@ -486,6 +488,7 @@ private[ui] class JobDataSource(
 }
 private[ui] class JobPagedTable(
     data: Seq[JobUIData],
+    tableHeaderId: String,
     jobTag: String,
     basePath: String,
     subPath: String,
@@ -528,12 +531,13 @@ private[ui] class JobPagedTable(
       s"&$pageNumberFormField=$page" +
       s"&$jobTag.sort=$encodedSortColumn" +
       s"&$jobTag.desc=$desc" +
-      s"&$pageSizeFormField=$pageSize"
+      s"&$pageSizeFormField=$pageSize" +
+      s"#$tableHeaderId"
   }
 
   override def goButtonFormPath: String = {
     val encodedSortColumn = URLEncoder.encode(sortColumn, "UTF-8")
-    s"$parameterPath&$jobTag.sort=$encodedSortColumn&$jobTag.desc=$desc"
+    
s"$parameterPath&$jobTag.sort=$encodedSortColumn&$jobTag.desc=$desc#$tableHeaderId"
   }
 
   override def headers: Seq[Node] = {
@@ -557,7 +561,8 @@ private[ui] class JobPagedTable(
             parameterPath +
               s"&$jobTag.sort=${URLEncoder.encode(header, "UTF-8")}" +
               s"&$jobTag.desc=${!desc}" +
-              s"&$jobTag.pageSize=$pageSize")
+              s"&$jobTag.pageSize=$pageSize" +
+              s"#$tableHeaderId")
           val arrow = if (desc) "&#x25BE;" else "&#x25B4;" // UP or DOWN
 
           <th class={cssClass}>
@@ -572,7 +577,8 @@ private[ui] class JobPagedTable(
             val headerLink = Unparsed(
               parameterPath +
                 s"&$jobTag.sort=${URLEncoder.encode(header, "UTF-8")}" +
-                s"&$jobTag.pageSize=$pageSize")
+                s"&$jobTag.pageSize=$pageSize" +
+                s"#$tableHeaderId")
 
             <th class={cssClass}>
               <a href={headerLink}>

http://git-wip-us.apache.org/repos/asf/spark/blob/24097d84/core/src/main/scala/org/apache/spark/ui/jobs/AllStagesPage.scala
----------------------------------------------------------------------
diff --git a/core/src/main/scala/org/apache/spark/ui/jobs/AllStagesPage.scala 
b/core/src/main/scala/org/apache/spark/ui/jobs/AllStagesPage.scala
index cba8f82..fe6ca10 100644
--- a/core/src/main/scala/org/apache/spark/ui/jobs/AllStagesPage.scala
+++ b/core/src/main/scala/org/apache/spark/ui/jobs/AllStagesPage.scala
@@ -41,19 +41,19 @@ private[ui] class AllStagesPage(parent: StagesTab) extends 
WebUIPage("") {
       val subPath = "stages"
 
       val activeStagesTable =
-        new StageTableBase(request, activeStages, "activeStage", 
parent.basePath, subPath,
+        new StageTableBase(request, activeStages, "active", "activeStage", 
parent.basePath, subPath,
           parent.progressListener, parent.isFairScheduler,
           killEnabled = parent.killEnabled, isFailedStage = false)
       val pendingStagesTable =
-        new StageTableBase(request, pendingStages, "pendingStage", 
parent.basePath, subPath,
-          parent.progressListener, parent.isFairScheduler,
+        new StageTableBase(request, pendingStages, "pending", "pendingStage", 
parent.basePath,
+          subPath, parent.progressListener, parent.isFairScheduler,
           killEnabled = false, isFailedStage = false)
       val completedStagesTable =
-        new StageTableBase(request, completedStages, "completedStage", 
parent.basePath, subPath,
-          parent.progressListener, parent.isFairScheduler,
+        new StageTableBase(request, completedStages, "completed", 
"completedStage", parent.basePath,
+          subPath, parent.progressListener, parent.isFairScheduler,
           killEnabled = false, isFailedStage = false)
       val failedStagesTable =
-        new StageTableBase(request, failedStages, "failedStage", 
parent.basePath, subPath,
+        new StageTableBase(request, failedStages, "failed", "failedStage", 
parent.basePath, subPath,
           parent.progressListener, parent.isFairScheduler,
           killEnabled = false, isFailedStage = true)
 

http://git-wip-us.apache.org/repos/asf/spark/blob/24097d84/core/src/main/scala/org/apache/spark/ui/jobs/JobPage.scala
----------------------------------------------------------------------
diff --git a/core/src/main/scala/org/apache/spark/ui/jobs/JobPage.scala 
b/core/src/main/scala/org/apache/spark/ui/jobs/JobPage.scala
index 2f7f897..0ff9e5e9 100644
--- a/core/src/main/scala/org/apache/spark/ui/jobs/JobPage.scala
+++ b/core/src/main/scala/org/apache/spark/ui/jobs/JobPage.scala
@@ -230,20 +230,27 @@ private[ui] class JobPage(parent: JobsTab) extends 
WebUIPage("job") {
 
       val basePath = "jobs/job"
 
+      val pendingOrSkippedTableId =
+        if (isComplete) {
+          "pending"
+        } else {
+          "skipped"
+        }
+
       val activeStagesTable =
-        new StageTableBase(request, activeStages, "activeStage", 
parent.basePath,
+        new StageTableBase(request, activeStages, "active", "activeStage", 
parent.basePath,
           basePath, parent.jobProgresslistener, parent.isFairScheduler,
           killEnabled = parent.killEnabled, isFailedStage = false)
       val pendingOrSkippedStagesTable =
-        new StageTableBase(request, pendingOrSkippedStages, "pendingStage", 
parent.basePath,
-          basePath, parent.jobProgresslistener, parent.isFairScheduler,
+        new StageTableBase(request, pendingOrSkippedStages, 
pendingOrSkippedTableId, "pendingStage",
+          parent.basePath, basePath, parent.jobProgresslistener, 
parent.isFairScheduler,
           killEnabled = false, isFailedStage = false)
       val completedStagesTable =
-        new StageTableBase(request, completedStages, "completedStage", 
parent.basePath,
+        new StageTableBase(request, completedStages, "completed", 
"completedStage", parent.basePath,
           basePath, parent.jobProgresslistener, parent.isFairScheduler,
           killEnabled = false, isFailedStage = false)
       val failedStagesTable =
-        new StageTableBase(request, failedStages, "failedStage", 
parent.basePath,
+        new StageTableBase(request, failedStages, "failed", "failedStage", 
parent.basePath,
           basePath, parent.jobProgresslistener, parent.isFairScheduler,
           killEnabled = false, isFailedStage = true)
 

http://git-wip-us.apache.org/repos/asf/spark/blob/24097d84/core/src/main/scala/org/apache/spark/ui/jobs/PoolPage.scala
----------------------------------------------------------------------
diff --git a/core/src/main/scala/org/apache/spark/ui/jobs/PoolPage.scala 
b/core/src/main/scala/org/apache/spark/ui/jobs/PoolPage.scala
index f9cb717..8ee70d2 100644
--- a/core/src/main/scala/org/apache/spark/ui/jobs/PoolPage.scala
+++ b/core/src/main/scala/org/apache/spark/ui/jobs/PoolPage.scala
@@ -44,7 +44,7 @@ private[ui] class PoolPage(parent: StagesTab) extends 
WebUIPage("pool") {
       }
       val shouldShowActiveStages = activeStages.nonEmpty
       val activeStagesTable =
-        new StageTableBase(request, activeStages, "activeStage", 
parent.basePath, "stages/pool",
+        new StageTableBase(request, activeStages, "", "activeStage", 
parent.basePath, "stages/pool",
           parent.progressListener, parent.isFairScheduler, parent.killEnabled,
           isFailedStage = false)
 

http://git-wip-us.apache.org/repos/asf/spark/blob/24097d84/core/src/main/scala/org/apache/spark/ui/jobs/StageTable.scala
----------------------------------------------------------------------
diff --git a/core/src/main/scala/org/apache/spark/ui/jobs/StageTable.scala 
b/core/src/main/scala/org/apache/spark/ui/jobs/StageTable.scala
index 2a04e8f..40a6762 100644
--- a/core/src/main/scala/org/apache/spark/ui/jobs/StageTable.scala
+++ b/core/src/main/scala/org/apache/spark/ui/jobs/StageTable.scala
@@ -34,6 +34,7 @@ import org.apache.spark.util.Utils
 private[ui] class StageTableBase(
     request: HttpServletRequest,
     stages: Seq[StageInfo],
+    tableHeaderID: String,
     stageTag: String,
     basePath: String,
     subPath: String,
@@ -77,6 +78,7 @@ private[ui] class StageTableBase(
   val toNodeSeq = try {
     new StagePagedTable(
       stages,
+      tableHeaderID,
       stageTag,
       basePath,
       subPath,
@@ -131,6 +133,7 @@ private[ui] class MissingStageTableRowData(
 /** Page showing list of all ongoing and recently finished stages */
 private[ui] class StagePagedTable(
     stages: Seq[StageInfo],
+    tableHeaderId: String,
     stageTag: String,
     basePath: String,
     subPath: String,
@@ -173,12 +176,13 @@ private[ui] class StagePagedTable(
       s"&$pageNumberFormField=$page" +
       s"&$stageTag.sort=$encodedSortColumn" +
       s"&$stageTag.desc=$desc" +
-      s"&$pageSizeFormField=$pageSize"
+      s"&$pageSizeFormField=$pageSize" +
+      s"#$tableHeaderId"
   }
 
   override def goButtonFormPath: String = {
     val encodedSortColumn = URLEncoder.encode(sortColumn, "UTF-8")
-    s"$parameterPath&$stageTag.sort=$encodedSortColumn&$stageTag.desc=$desc"
+    
s"$parameterPath&$stageTag.sort=$encodedSortColumn&$stageTag.desc=$desc#$tableHeaderId"
   }
 
   override def headers: Seq[Node] = {
@@ -226,7 +230,8 @@ private[ui] class StagePagedTable(
             parameterPath +
               s"&$stageTag.sort=${URLEncoder.encode(header, "UTF-8")}" +
               s"&$stageTag.desc=${!desc}" +
-              s"&$stageTag.pageSize=$pageSize")
+              s"&$stageTag.pageSize=$pageSize") +
+              s"#$tableHeaderId"
           val arrow = if (desc) "&#x25BE;" else "&#x25B4;" // UP or DOWN
 
           <th>
@@ -241,7 +246,8 @@ private[ui] class StagePagedTable(
             val headerLink = Unparsed(
               parameterPath +
                 s"&$stageTag.sort=${URLEncoder.encode(header, "UTF-8")}" +
-                s"&$stageTag.pageSize=$pageSize")
+                s"&$stageTag.pageSize=$pageSize") +
+                s"#$tableHeaderId"
 
             <th>
               <a href={headerLink}>


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

Reply via email to