Skip to content

Commit

Permalink
YARN-3840. Resource Manager web ui issue when sorting application by …
Browse files Browse the repository at this point in the history
…id (with application having id > 9999). Contributed by Mohammad Shahid Khan and Varun Saxena

(cherry picked from commit 9f77cca)

Conflicts:
	hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TaskPage.java
	hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-applicationhistoryservice/src/test/java/org/apache/hadoop/yarn/server/applicationhistoryservice/webapp/TestAHSWebApp.java
	hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-common/src/main/java/org/apache/hadoop/yarn/server/webapp/WebPageUtils.java
  • Loading branch information
jian-he committed Dec 3, 2015
1 parent 1ae8a83 commit 6a30d93
Show file tree
Hide file tree
Showing 11 changed files with 143 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ private String tasksTableInit() {
.append(", bProcessing: true")

.append("\n, aoColumnDefs: [\n")
.append("{'sType':'string', 'aTargets': [0]")
.append("{'sType':'natural', 'aTargets': [0]")
.append(", 'mRender': parseHadoopID }")

.append("\n, {'sType':'numeric', bSearchable:false, 'aTargets': [1]")
Expand Down
4 changes: 4 additions & 0 deletions hadoop-yarn-project/CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ Release 2.7.3 - UNRELEASED

YARN-4398. Remove unnecessary synchronization in RMStateStore. (Ning Ding via jianhe)

YARN-3840. Resource Manager web ui issue when sorting application by id
(with application having id > 9999) (Mohammad Shahid Khan & Varun Saxena
via jianhe)

Release 2.7.2 - UNRELEASED

INCOMPATIBLE CHANGES
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,14 +65,14 @@ public class JQueryUI extends HtmlBlock {

@Override
protected void render(Block html) {
html.
link(root_url("static/jquery/themes-1.9.1/base/jquery-ui.css")).
link(root_url("static/dt-1.9.4/css/jui-dt.css")).
script(root_url("static/jquery/jquery-1.8.2.min.js")).
script(root_url("static/jquery/jquery-ui-1.9.1.custom.min.js")).
script(root_url("static/dt-1.9.4/js/jquery.dataTables.min.js")).
script(root_url("static/yarn.dt.plugins.js")).
style("#jsnotice { padding: 0.2em; text-align: center; }",
html.link(root_url("static/jquery/themes-1.9.1/base/jquery-ui.css"))
.link(root_url("static/dt-1.9.4/css/jui-dt.css"))
.script(root_url("static/jquery/jquery-1.8.2.min.js"))
.script(root_url("static/jquery/jquery-ui-1.9.1.custom.min.js"))
.script(root_url("static/dt-1.9.4/js/jquery.dataTables.min.js"))
.script(root_url("static/yarn.dt.plugins.js"))
.script(root_url("static/dt-sorting/natural.js"))
.style("#jsnotice { padding: 0.2em; text-align: center; }",
".ui-progressbar { height: 1em; min-width: 5em }"); // required

List<String> list = Lists.newArrayList();
Expand All @@ -82,9 +82,8 @@ protected void render(Block html) {
initProgressBars(list);

if (!list.isEmpty()) {
html.
script().$type("text/javascript").
_("$(function() {")._(list.toArray())._("});")._();
html.script().$type("text/javascript")._("$(function() {")
._(list.toArray())._("});")._();
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

(function() {
function naturalSort (a, b) {
var diff = a.length - b.length;
if (diff != 0) {
var splitA = a.split("_");
var splitB = b.split("_");
if (splitA.length != splitB.length) {
return a.localeCompare(b);
}
for (var i=1; i < splitA.length; i++) {
var splitdiff = splitA[i].length - splitB[i].length;
if (splitdiff != 0) {
return splitdiff;
}
var splitCompare = splitA[i].localeCompare(splitB[i]);
if (splitCompare != 0) {
return splitCompare;
}
}
return diff;
}
return a.localeCompare(b);
}

jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"natural-asc": function ( a, b ) {
return naturalSort(a,b);
},

"natural-desc": function ( a, b ) {
return naturalSort(a,b) * -1;
}
} );

}());

Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ protected Class<? extends SubView> content() {

protected String getContainersTableColumnDefs() {
StringBuilder sb = new StringBuilder();
return sb.append("[\n").append("{'sType':'string', 'aTargets': [0]")
return sb.append("[\n").append("{'sType':'natural', 'aTargets': [0]")
.append(", 'mRender': parseHadoopID }]").toString();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ protected Class<? extends SubView> content() {

protected String getAttemptsTableColumnDefs() {
StringBuilder sb = new StringBuilder();
return sb.append("[\n").append("{'sType':'string', 'aTargets': [0]")
return sb.append("[\n").append("{'sType':'natural', 'aTargets': [0]")
.append(", 'mRender': parseHadoopID }")

.append("\n, {'sType':'numeric', 'aTargets': [1]")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
import static org.apache.hadoop.yarn.webapp.Params.TITLE;
import static org.mockito.Mockito.mock;

import org.junit.Assert;
import java.util.Map;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.yarn.api.ApplicationBaseProtocol;
import org.apache.hadoop.yarn.api.records.ApplicationAttemptId;
Expand All @@ -38,6 +38,7 @@
import org.apache.hadoop.yarn.util.StringHelper;
import org.apache.hadoop.yarn.webapp.YarnWebParams;
import org.apache.hadoop.yarn.webapp.test.WebAppTests;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

Expand Down Expand Up @@ -87,6 +88,21 @@ public void testView() throws Exception {
WebAppTests.flushOutput(injector);
}

@Test
public void testAPPViewNaturalSortType() throws Exception {
Injector injector =
WebAppTests.createMockInjector(ApplicationBaseProtocol.class,
mockApplicationHistoryClientService(5, 1, 1));
AHSView ahsViewInstance = injector.getInstance(AHSView.class);

ahsViewInstance.render();
WebAppTests.flushOutput(injector);
Map<String, String> moreParams =
ahsViewInstance.context().requestContext().moreParams();
String appTableColumnsMeta = moreParams.get("ui.dataTables.apps.init");
Assert.assertTrue(appTableColumnsMeta.indexOf("natural") != -1);
}

@Test
public void testAppPage() throws Exception {
Injector injector =
Expand All @@ -103,6 +119,22 @@ public void testAppPage() throws Exception {
WebAppTests.flushOutput(injector);
}

@Test
public void testAppPageNaturalSortType() throws Exception {
Injector injector =
WebAppTests.createMockInjector(ApplicationBaseProtocol.class,
mockApplicationHistoryClientService(1, 5, 1));
AppPage appPageInstance = injector.getInstance(AppPage.class);

appPageInstance.render();
WebAppTests.flushOutput(injector);
Map<String, String> moreParams =
appPageInstance.context().requestContext().moreParams();
String attemptsTableColumnsMeta =
moreParams.get("ui.dataTables.attempts.init");
Assert.assertTrue(attemptsTableColumnsMeta.indexOf("natural") != -1);
}

@Test
public void testAppAttemptPage() throws Exception {
Injector injector =
Expand All @@ -121,6 +153,21 @@ public void testAppAttemptPage() throws Exception {
WebAppTests.flushOutput(injector);
}

@Test
public void testAppAttemptPageNaturalSortType() throws Exception {
Injector injector =
WebAppTests.createMockInjector(ApplicationBaseProtocol.class,
mockApplicationHistoryClientService(1, 1, 5));
AppAttemptPage appAttemptPageInstance =
injector.getInstance(AppAttemptPage.class);
appAttemptPageInstance.render();
WebAppTests.flushOutput(injector);
Map<String, String> moreParams =
appAttemptPageInstance.context().requestContext().moreParams();
String tableColumnsMeta = moreParams.get("ui.dataTables.containers.init");
Assert.assertTrue(tableColumnsMeta.indexOf("natural") != -1);
}

@Test
public void testContainerPage() throws Exception {
Injector injector =
Expand Down Expand Up @@ -181,5 +228,4 @@ protected ApplicationHistoryStore createApplicationHistoryStore(
return store;
}
};

}
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,8 @@ public static String appsTableInit(boolean isFairSchedulerPage) {

private static String getAppsTableColumnDefs(boolean isFairSchedulerPage) {
StringBuilder sb = new StringBuilder();
return sb
.append("[\n")
.append("{'sType':'string', 'aTargets': [0]")
return sb.append("[\n")
.append("{'sType':'natural', 'aTargets': [0]")
.append(", 'mRender': parseHadoopID }")
.append("\n, {'sType':'numeric', 'aTargets': " +
(isFairSchedulerPage ? "[6, 7]": "[5, 6]"))
Expand All @@ -63,7 +62,7 @@ public static String attemptsTableInit() {

private static String getAttemptsTableColumnDefs() {
StringBuilder sb = new StringBuilder();
return sb.append("[\n").append("{'sType':'string', 'aTargets': [0]")
return sb.append("[\n").append("{'sType':'natural', 'aTargets': [0]")
.append(", 'mRender': parseHadoopID }")
.append("\n, {'sType':'numeric', 'aTargets': [1]")
.append(", 'mRender': renderHadoopDate }]").toString();
Expand All @@ -79,7 +78,7 @@ public static String containersTableInit() {

private static String getContainersTableColumnDefs() {
StringBuilder sb = new StringBuilder();
return sb.append("[\n").append("{'sType':'string', 'aTargets': [0]")
return sb.append("[\n").append("{'sType':'natural', 'aTargets': [0]")
.append(", 'mRender': parseHadoopID }]").toString();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,14 @@ private String appsTableInit() {
// Sort by id upon page load
append(", aaSorting: [[0, 'asc']]").
// applicationid, applicationstate
append(", aoColumns:[null, null]} ").toString();
append(", aoColumns:[").append(getApplicationsIdColumnDefs())
.append(", null]} ").toString();
}

private String getApplicationsIdColumnDefs() {
StringBuilder sb = new StringBuilder();
return sb.append("{'sType':'natural', 'aTargets': [0]")
.append(", 'mRender': parseHadoopID }").toString();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,15 @@ public class AllContainersPage extends NMView {
private String containersTableInit() {
return tableInit().
// containerid, containerid, log-url
append(", aoColumns:[null, null, {bSearchable:false}]} ").toString();
append(", aoColumns:[").append(getContainersIdColumnDefs())
.append(", null, {bSearchable:false}]} ").toString();
}

private String getContainersIdColumnDefs() {
StringBuilder sb = new StringBuilder();
return sb.append("{'sType':'natural', 'aTargets': [0]")
.append(", 'mRender': parseHadoopID }").toString();
}
@Override
protected Class<? extends SubView> content() {
return AllContainersBlock.class;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentMap;

import org.apache.hadoop.conf.Configuration;
Expand Down Expand Up @@ -119,6 +120,10 @@ public void configure(Binder binder) {
YarnApplicationState.RUNNING.toString()));
rmViewInstance.render();
WebAppTests.flushOutput(injector);
Map<String, String> moreParams =
rmViewInstance.context().requestContext().moreParams();
String appsTableColumnsMeta = moreParams.get("ui.dataTables.apps.init");
Assert.assertTrue(appsTableColumnsMeta.indexOf("natural") != -1);
}

@Test public void testNodesPage() {
Expand Down

0 comments on commit 6a30d93

Please sign in to comment.