You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by de...@apache.org on 2015/06/20 07:08:35 UTC
hadoop git commit: MAPREDUCE-6405. NullPointerException in App
Attempts page. Contributed by Siqi Li and Gera Shegalov.
Repository: hadoop
Updated Branches:
refs/heads/trunk d112d1832 -> 311a4179c
MAPREDUCE-6405. NullPointerException in App Attempts page. Contributed by
Siqi Li and Gera Shegalov.
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/311a4179
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/311a4179
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/311a4179
Branch: refs/heads/trunk
Commit: 311a4179cc53a2754d1185b1cb10e6adb1b95d3d
Parents: d112d18
Author: Devaraj K <de...@apache.org>
Authored: Sat Jun 20 10:35:04 2015 +0530
Committer: Devaraj K <de...@apache.org>
Committed: Sat Jun 20 10:35:04 2015 +0530
----------------------------------------------------------------------
hadoop-mapreduce-project/CHANGES.txt | 3 +
.../mapreduce/v2/app/webapp/TaskPage.java | 82 +++++++++++---------
2 files changed, 49 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/311a4179/hadoop-mapreduce-project/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-mapreduce-project/CHANGES.txt b/hadoop-mapreduce-project/CHANGES.txt
index 7e57804..dfac028 100644
--- a/hadoop-mapreduce-project/CHANGES.txt
+++ b/hadoop-mapreduce-project/CHANGES.txt
@@ -483,6 +483,9 @@ Release 2.8.0 - UNRELEASED
MAPREDUCE-6373. The logger reports total input paths but it is referring
to input files. (Bibin A Chundatt via devaraj)
+ MAPREDUCE-6405. NullPointerException in App Attempts page.
+ (Siqi Li and Gera Shegalov via devaraj)
+
Release 2.7.1 - UNRELEASED
INCOMPATIBLE CHANGES
http://git-wip-us.apache.org/repos/asf/hadoop/blob/311a4179/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TaskPage.java
----------------------------------------------------------------------
diff --git a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TaskPage.java b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TaskPage.java
index 758b02c..d9f17c8 100644
--- a/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TaskPage.java
+++ b/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/webapp/TaskPage.java
@@ -24,11 +24,14 @@ import static org.apache.hadoop.yarn.webapp.view.JQueryUI.DATATABLES_ID;
import static org.apache.hadoop.yarn.webapp.view.JQueryUI.initID;
import static org.apache.hadoop.yarn.webapp.view.JQueryUI.tableInit;
+import java.util.EnumSet;
import java.util.Collection;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.mapreduce.MRConfig;
+import org.apache.hadoop.mapreduce.v2.api.records.JobId;
+import org.apache.hadoop.mapreduce.v2.api.records.TaskAttemptState;
import org.apache.hadoop.mapreduce.v2.app.job.TaskAttempt;
import org.apache.hadoop.mapreduce.v2.app.webapp.dao.TaskAttemptInfo;
import org.apache.hadoop.mapreduce.v2.util.MRWebAppUtil;
@@ -48,7 +51,6 @@ public class TaskPage extends AppView {
static class AttemptsBlock extends HtmlBlock {
final App app;
final boolean enableUIActions;
- private String stateURLFormat;
@Inject
AttemptsBlock(App ctx, Configuration conf) {
@@ -66,37 +68,36 @@ public class TaskPage extends AppView {
return;
}
+ JobId jobId = app.getJob().getID();
if (enableUIActions) {
// Kill task attempt
- String appID = app.getJob().getID().getAppId().toString();
- String jobID = app.getJob().getID().toString();
- String taskID = app.getTask().getID().toString();
- stateURLFormat =
- String.format("/proxy/%s/ws/v1/mapreduce/jobs/%s/tasks/%s/"
- + "attempts", appID, jobID, taskID) + "/%s/state";
-
- String current =
- String.format("/proxy/%s/mapreduce/task/%s", appID, taskID);
StringBuilder script = new StringBuilder();
- script.append("function confirmAction(stateURL) {")
- .append(" b = confirm(\"Are you sure?\");")
- .append(" if (b == true) {")
- .append(" $.ajax({")
- .append(" type: 'PUT',")
- .append(" url: stateURL,")
- .append(" contentType: 'application/json',")
- .append(" data: '{\"state\":\"KILLED\"}',")
- .append(" dataType: 'json'")
- .append(" }).done(function(data){")
- .append(" setTimeout(function(){")
- .append(" location.href = '").append(current).append("';")
- .append(" }, 1000);")
- .append(" }).fail(function(data){")
- .append(" console.log(data);")
- .append(" });")
- .append(" }")
- .append("}");
+ script
+ .append("function confirmAction(appID, jobID, taskID, attID) {\n")
+ .append(" var b = confirm(\"Are you sure?\");\n")
+ .append(" if (b == true) {\n")
+ .append(" var current = '/proxy/' + appID")
+ .append(" + '/mapreduce/task/' + taskID;\n")
+ .append(" var stateURL = '/proxy/' + appID")
+ .append(" + '/ws/v1/mapreduce/jobs/' + jobID")
+ .append(" + '/tasks/' + taskID")
+ .append(" + '/attempts/' + attID + '/state';\n")
+ .append(" $.ajax({\n")
+ .append(" type: 'PUT',\n")
+ .append(" url: stateURL,\n")
+ .append(" contentType: 'application/json',\n")
+ .append(" data: '{\"state\":\"KILLED\"}',\n")
+ .append(" dataType: 'json'\n")
+ .append(" }).done(function(data) {\n")
+ .append(" setTimeout(function() {\n")
+ .append(" location.href = current;\n")
+ .append(" }, 1000);\n")
+ .append(" }).fail(function(data) {\n")
+ .append(" console.log(data);\n")
+ .append(" });\n")
+ .append(" }\n")
+ .append("}\n");
html.script().$type("text/javascript")._(script.toString())._();
}
@@ -135,8 +136,8 @@ public class TaskPage extends AppView {
StringEscapeUtils.escapeHtml(ta.getStatus()))).append("\",\"")
.append(nodeHttpAddr == null ? "N/A" :
- "<a class='nodelink' href='" + MRWebAppUtil.getYARNWebappScheme() + nodeHttpAddr + "'>"
- + nodeHttpAddr + "</a>")
+ "<a class='nodelink' href='" + MRWebAppUtil.getYARNWebappScheme() + nodeHttpAddr + "'>"
+ + nodeHttpAddr + "</a>")
.append("\",\"")
.append(ta.getAssignedContainerId() == null ? "N/A" :
@@ -151,12 +152,21 @@ public class TaskPage extends AppView {
.append(StringEscapeUtils.escapeJavaScript(StringEscapeUtils.escapeHtml(
diag)));
if (enableUIActions) {
- attemptsTableData.append("\",\"")
- .append("<a href=javascript:void(0) onclick=confirmAction('")
- .append(String.format(stateURLFormat, ta.getId()))
- .append("');>Kill</a>")
- .append("\"],\n");
- } else {
+ attemptsTableData.append("\",\"");
+ if (EnumSet.of(
+ TaskAttemptState.SUCCEEDED,
+ TaskAttemptState.FAILED,
+ TaskAttemptState.KILLED).contains(attempt.getState())) {
+ attemptsTableData.append("N/A");
+ } else {
+ attemptsTableData
+ .append("<a href=javascript:void(0) onclick=confirmAction('")
+ .append(jobId.getAppId()).append("','")
+ .append(jobId).append("','")
+ .append(attempt.getID().getTaskId()).append("','")
+ .append(ta.getId())
+ .append("');>Kill</a>");
+ }
attemptsTableData.append("\"],\n");
}
}