You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tez.apache.org by ss...@apache.org on 2015/02/12 08:27:53 UTC
[07/12] tez git commit: TEZ-2078. Tez UI: Task logs url use
in-progress url causing various errors. (Sreenath Somarajapuram via hitesh)
TEZ-2078. Tez UI: Task logs url use in-progress url causing various errors. (Sreenath Somarajapuram via hitesh)
Project: http://git-wip-us.apache.org/repos/asf/tez/repo
Commit: http://git-wip-us.apache.org/repos/asf/tez/commit/758c26f0
Tree: http://git-wip-us.apache.org/repos/asf/tez/tree/758c26f0
Diff: http://git-wip-us.apache.org/repos/asf/tez/diff/758c26f0
Branch: refs/heads/TEZ-2003
Commit: 758c26f0282ed11f059578240b677774e2a5ee69
Parents: 96a61f8
Author: Hitesh Shah <hi...@apache.org>
Authored: Wed Feb 11 12:19:05 2015 -0800
Committer: Hitesh Shah <hi...@apache.org>
Committed: Wed Feb 11 12:19:05 2015 -0800
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../controllers/dag-task-attempts-controller.js | 32 +++++++--
.../app/scripts/controllers/dag_controller.js | 7 ++
.../webapp/app/scripts/controllers/dag_tasks.js | 39 +++++++---
.../task_task_attempts_controller.js | 75 ++++++++++++++++++--
.../scripts/controllers/vertex_controller.js | 13 +++-
.../vertex_task_attempts_controller.js | 32 +++++++--
.../controllers/vertex_tasks_controller.js | 39 +++++++---
.../app/scripts/models/TimelineRestAdapter.js | 1 -
9 files changed, 199 insertions(+), 40 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tez/blob/758c26f0/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 79674a8..bfecc37 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -61,6 +61,7 @@ Release 0.6.1: Unreleased
INCOMPATIBLE CHANGES
ALL CHANGES:
+ TEZ-2078. Tez UI: Task logs url use in-progress url causing various errors.
TEZ-2077. Tez UI: No diagnostics on Task Attempt Details page if task attempt failed.
TEZ-2065. Setting up tez.tez-ui.history-url.base with a trailing slash can result in failures to redirect correctly.
TEZ-2068. Tez UI: Dag view should use full window height, disable webuiservice in localmode.
http://git-wip-us.apache.org/repos/asf/tez/blob/758c26f0/tez-ui/src/main/webapp/app/scripts/controllers/dag-task-attempts-controller.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/dag-task-attempts-controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/dag-task-attempts-controller.js
index d473d9a..d151af8 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/dag-task-attempts-controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/dag-task-attempts-controller.js
@@ -53,6 +53,7 @@ App.DagTaskAttemptsController = Em.ObjectController.extend(App.PaginatedContentM
},
defaultColumnConfigs: function() {
+ var that = this;
return [
{
id: 'taskId',
@@ -158,19 +159,36 @@ App.DagTaskAttemptsController = Em.ObjectController.extend(App.PaginatedContentM
tableCellViewClass: Em.Table.TableCell.extend({
template: Em.Handlebars.compile(
'<span class="ember-table-content">\
- {{#unless view.cellContent}}\
+ {{#unless view.cellContent.notAvailable}}\
Not Available\
{{else}}\
- <a target="_blank" href="//{{unbound view.cellContent}}">View</a>\
- \
- <a target="_blank" href="//{{unbound view.cellContent}}?start=0" download target="_blank" type="application/octet-stream">Download</a>\
+ {{#if view.cellContent.viewUrl}}\
+ <a target="_blank" href="//{{unbound view.cellContent.viewUrl}}">View</a>\
+ \
+ {{/if}}\
+ {{#if view.cellContent.downloadUrl}}\
+ <a target="_blank" href="{{unbound view.cellContent.downloadUrl}}?start=0" download type="application/octet-stream">Download</a>\
+ {{/if}}\
{{/unless}}\
</span>')
}),
getCellContent: function(row) {
- var logFile = row.get('inProgressLog') || row.get('completedLog');
- if(logFile) logFile += "/syslog_" + row.get('id');
- return logFile;
+ var yarnAppState = that.get('controllers.dag.yarnAppState'),
+ suffix = "/syslog_" + row.get('id'),
+ link = row.get('inProgressLog') || row.get('completedLog'),
+ cellContent = {};
+
+ if(link) {
+ cellContent.viewUrl = link + suffix;
+ }
+ link = row.get('completedLog');
+ if (link && yarnAppState === 'FINISHED' || yarnAppState === 'KILLED' || yarnAppState === 'FAILED') {
+ cellContent.downloadUrl = link + suffix;
+ }
+
+ cellContent.notAvailable = cellContent.viewUrl || cellContent.downloadUrl;
+
+ return cellContent;
}
}
];
http://git-wip-us.apache.org/repos/asf/tez/blob/758c26f0/tez-ui/src/main/webapp/app/scripts/controllers/dag_controller.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/dag_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/dag_controller.js
index b17157f..b488841 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/dag_controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/dag_controller.js
@@ -46,6 +46,13 @@ App.DagController = Em.ObjectController.extend(App.Helpers.DisplayHelper, {
that.set('tezApp', app);
});
+ var appDetailFetcher = that.store.find('appDetail', applicationId).then(function(appDetail) {
+ var appState = appDetail.get('appState');
+ if (appState) {
+ that.set('yarnAppState', appState);
+ }
+ });
+ loaders.push(appDetailFetcher);
Em.RSVP.allSettled(loaders).then(function(){
that.set('loading', false);
});
http://git-wip-us.apache.org/repos/asf/tez/blob/758c26f0/tez-ui/src/main/webapp/app/scripts/controllers/dag_tasks.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/dag_tasks.js b/tez-ui/src/main/webapp/app/scripts/controllers/dag_tasks.js
index 3be59f0..849b1db 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/dag_tasks.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/dag_tasks.js
@@ -96,6 +96,7 @@ App.DagTasksController = Em.ObjectController.extend(App.PaginatedContentMixin, A
},
defaultColumnConfigs: function() {
+ var that = this;
return [
{
id: 'id',
@@ -183,20 +184,42 @@ App.DagTasksController = Em.ObjectController.extend(App.PaginatedContentMixin, A
tableCellViewClass: Em.Table.TableCell.extend({
template: Em.Handlebars.compile(
'<span class="ember-table-content">\
- {{#unless view.cellContent}}\
+ {{#unless view.cellContent.notAvailable}}\
Not Available\
{{else}}\
- <a target="_blank" href="//{{unbound view.cellContent}}">View</a>\
- \
- <a target="_blank" href="//{{unbound view.cellContent}}?start=0" download target="_blank" type="application/octet-stream">Download</a>\
+ {{#if view.cellContent.viewUrl}}\
+ <a target="_blank" href="//{{unbound view.cellContent.viewUrl}}">View</a>\
+ \
+ {{/if}}\
+ {{#if view.cellContent.downloadUrl}}\
+ <a target="_blank" href="{{unbound view.cellContent.downloadUrl}}?start=0" download type="application/octet-stream">Download</a>\
+ {{/if}}\
{{/unless}}\
</span>')
}),
getCellContent: function(row) {
- var attempt = row.get('pivotAttempt');
- var logFile = attempt && (attempt.get('inProgressLog') || attempt.get('completedLog'));
- if(logFile) logFile += "/syslog_" + attempt.get('id');
- return logFile;
+ var yarnAppState = that.get('controllers.dag.yarnAppState'),
+ attempt = row.get('pivotAttempt'),
+ suffix,
+ link,
+ cellContent = {};
+
+ if(attempt) {
+ suffix = "/syslog_" + attempt.get('id'),
+ link = attempt.get('inProgressLog') || attempt.get('completedLog');
+
+ if(link) {
+ cellContent.viewUrl = link + suffix;
+ }
+ link = attempt.get('completedLog');
+ if (link && yarnAppState === 'FINISHED' || yarnAppState === 'KILLED' || yarnAppState === 'FAILED') {
+ cellContent.downloadUrl = link + suffix;
+ }
+ }
+
+ cellContent.notAvailable = cellContent.viewUrl || cellContent.downloadUrl;
+
+ return cellContent;
}
}
];
http://git-wip-us.apache.org/repos/asf/tez/blob/758c26f0/tez-ui/src/main/webapp/app/scripts/controllers/task_task_attempts_controller.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/task_task_attempts_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/task_task_attempts_controller.js
index aacefe3..84de0a7 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/task_task_attempts_controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/task_task_attempts_controller.js
@@ -41,6 +41,49 @@ App.TaskAttemptsController = Em.ObjectController.extend(App.PaginatedContentMixi
this.setFiltersAndLoadEntities(filters);
},
+ loadEntities: function () {
+ var that = this;
+ var childEntityType = this.get('childEntityType');
+ var defaultErrMsg = 'Error while loading %@. could not connect to %@'
+ .fmt(childEntityType, App.env.timelineBaseUrl);
+
+ that.set('loading', true);
+
+ this.get('store').unloadAll(childEntityType);
+ this.get('store').findQuery(childEntityType, this.getFilterProperties()).then(function(entities){
+ that.set('entities', entities);
+ var loaders = [];
+ try {
+ var loader = Em.tryInvoke(that, 'loadAdditional');
+ if (!!loader) {
+ loaders.push(loader);
+ }
+ } catch(error) {
+ Em.Logger.error("Exception invoking additional load", error);
+ }
+
+ var appDetailFetcher = that.store.find('dag', that.get('controllers.task.dagID')).
+ then(function (dag) {
+ return that.store.find('appDetail', dag.get('applicationId'));
+ }).
+ then(function(appDetail) {
+ var appState = appDetail.get('appState');
+ if (appState) {
+ that.set('yarnAppState', appState);
+ }
+ });
+ loaders.push(appDetailFetcher);
+ Em.RSVP.allSettled(loaders).then(function(){
+ that.set('loading', false);
+ });
+ }).catch(function(error){
+ Em.Logger.error(error);
+ var err = App.Helpers.misc.formatError(error, defaultErrMsg);
+ var msg = 'error code: %@, message: %@'.fmt(err.errCode, err.msg);
+ App.Helpers.ErrorBar.getInstance().show(msg, err.details);
+ });
+ },
+
actions : {
filterUpdated: function(filterID, value) {
// any validations required goes here.
@@ -54,6 +97,7 @@ App.TaskAttemptsController = Em.ObjectController.extend(App.PaginatedContentMixi
},
defaultColumnConfigs: function() {
+ var that = this;
return [
{
id: 'id',
@@ -159,19 +203,36 @@ App.TaskAttemptsController = Em.ObjectController.extend(App.PaginatedContentMixi
tableCellViewClass: Em.Table.TableCell.extend({
template: Em.Handlebars.compile(
'<span class="ember-table-content">\
- {{#unless view.cellContent}}\
+ {{#unless view.cellContent.notAvailable}}\
Not Available\
{{else}}\
- <a target="_blank" href="//{{unbound view.cellContent}}">View</a>\
- \
- <a target="_blank" href="//{{unbound view.cellContent}}?start=0" download target="_blank" type="application/octet-stream">Download</a>\
+ {{#if view.cellContent.viewUrl}}\
+ <a target="_blank" href="//{{unbound view.cellContent.viewUrl}}">View</a>\
+ \
+ {{/if}}\
+ {{#if view.cellContent.downloadUrl}}\
+ <a target="_blank" href="{{unbound view.cellContent.downloadUrl}}?start=0" download type="application/octet-stream">Download</a>\
+ {{/if}}\
{{/unless}}\
</span>')
}),
getCellContent: function(row) {
- var logFile = row.get('inProgressLog') || row.get('completedLog');
- if(logFile) logFile += "/syslog_" + row.get('id');
- return logFile;
+ var yarnAppState = that.get('yarnAppState'),
+ suffix = "/syslog_" + row.get('id'),
+ link = row.get('inProgressLog') || row.get('completedLog'),
+ cellContent = {};
+
+ if(link) {
+ cellContent.viewUrl = link + suffix;
+ }
+ link = row.get('completedLog');
+ if (link && yarnAppState === 'FINISHED' || yarnAppState === 'KILLED' || yarnAppState === 'FAILED') {
+ cellContent.downloadUrl = link + suffix;
+ }
+
+ cellContent.notAvailable = cellContent.viewUrl || cellContent.downloadUrl;
+
+ return cellContent;
}
}
];
http://git-wip-us.apache.org/repos/asf/tez/blob/758c26f0/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js
index e5e74e5..3c56690 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_controller.js
@@ -25,12 +25,13 @@ App.VertexController = Em.ObjectController.extend(App.Helpers.DisplayHelper, {
updateLoading: function() {
var loaders = [],
- that = this;
+ that = this,
+ applicationId = this.get('applicationId');
if (this.get('status') == 'RUNNING') {
var vertexIdx = that.get('id').split('_').splice(-1).pop();
var progressLoader = this.store.find('vertexProgress', vertexIdx, {
- appId: that.get('applicationId'),
+ appId: applicationId,
dagIdx: that.get('dagIdx')
}).then(function(vertexProgressInfo) {
if (vertexProgressInfo) {
@@ -41,6 +42,14 @@ App.VertexController = Em.ObjectController.extend(App.Helpers.DisplayHelper, {
});
loaders.push(progressLoader);
}
+
+ var appDetailFetcher = that.store.find('appDetail', applicationId).then(function(appDetail) {
+ var appState = appDetail.get('appState');
+ if (appState) {
+ that.set('yarnAppState', appState);
+ }
+ });
+ loaders.push(appDetailFetcher);
Em.RSVP.allSettled(loaders).then(function(){
that.set('loading', false);
});
http://git-wip-us.apache.org/repos/asf/tez/blob/758c26f0/tez-ui/src/main/webapp/app/scripts/controllers/vertex_task_attempts_controller.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_task_attempts_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_task_attempts_controller.js
index 4c38f51..e6ee417 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_task_attempts_controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_task_attempts_controller.js
@@ -54,6 +54,7 @@ App.VertexTaskAttemptsController = Em.ObjectController.extend(App.PaginatedConte
},
defaultColumnConfigs: function() {
+ var that = this;
return [
{
id: 'taskId',
@@ -159,19 +160,36 @@ App.VertexTaskAttemptsController = Em.ObjectController.extend(App.PaginatedConte
tableCellViewClass: Em.Table.TableCell.extend({
template: Em.Handlebars.compile(
'<span class="ember-table-content">\
- {{#unless view.cellContent}}\
+ {{#unless view.cellContent.notAvailable}}\
Not Available\
{{else}}\
- <a target="_blank" href="//{{unbound view.cellContent}}">View</a>\
- \
- <a target="_blank" href="//{{unbound view.cellContent}}?start=0" download target="_blank" type="application/octet-stream">Download</a>\
+ {{#if view.cellContent.viewUrl}}\
+ <a target="_blank" href="//{{unbound view.cellContent.viewUrl}}">View</a>\
+ \
+ {{/if}}\
+ {{#if view.cellContent.downloadUrl}}\
+ <a target="_blank" href="{{unbound view.cellContent.downloadUrl}}?start=0" download type="application/octet-stream">Download</a>\
+ {{/if}}\
{{/unless}}\
</span>')
}),
getCellContent: function(row) {
- var logFile = row.get('inProgressLog') || row.get('completedLog');
- if(logFile) logFile += "/syslog_" + row.get('id');
- return logFile;
+ var yarnAppState = that.get('controllers.vertex.yarnAppState'),
+ suffix = "/syslog_" + row.get('id'),
+ link = row.get('inProgressLog') || row.get('completedLog'),
+ cellContent = {};
+
+ if(link) {
+ cellContent.viewUrl = link + suffix;
+ }
+ link = row.get('completedLog');
+ if (link && yarnAppState === 'FINISHED' || yarnAppState === 'KILLED' || yarnAppState === 'FAILED') {
+ cellContent.downloadUrl = link + suffix;
+ }
+
+ cellContent.notAvailable = cellContent.viewUrl || cellContent.downloadUrl;
+
+ return cellContent;
}
}
];
http://git-wip-us.apache.org/repos/asf/tez/blob/758c26f0/tez-ui/src/main/webapp/app/scripts/controllers/vertex_tasks_controller.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_tasks_controller.js b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_tasks_controller.js
index 1edb834..90340ff 100644
--- a/tez-ui/src/main/webapp/app/scripts/controllers/vertex_tasks_controller.js
+++ b/tez-ui/src/main/webapp/app/scripts/controllers/vertex_tasks_controller.js
@@ -87,6 +87,7 @@ App.VertexTasksController = Em.ObjectController.extend(App.PaginatedContentMixin
},
defaultColumnConfigs: function() {
+ var that = this;
return [
{
id: 'id',
@@ -167,20 +168,42 @@ App.VertexTasksController = Em.ObjectController.extend(App.PaginatedContentMixin
tableCellViewClass: Em.Table.TableCell.extend({
template: Em.Handlebars.compile(
'<span class="ember-table-content">\
- {{#unless view.cellContent}}\
+ {{#unless view.cellContent.notAvailable}}\
Not Available\
{{else}}\
- <a target="_blank" href="//{{unbound view.cellContent}}">View</a>\
- \
- <a target="_blank" href="//{{unbound view.cellContent}}?start=0" download target="_blank" type="application/octet-stream">Download</a>\
+ {{#if view.cellContent.viewUrl}}\
+ <a target="_blank" href="//{{unbound view.cellContent.viewUrl}}">View</a>\
+ \
+ {{/if}}\
+ {{#if view.cellContent.downloadUrl}}\
+ <a target="_blank" href="{{unbound view.cellContent.downloadUrl}}?start=0" download type="application/octet-stream">Download</a>\
+ {{/if}}\
{{/unless}}\
</span>')
}),
getCellContent: function(row) {
- var attempt = row.get('pivotAttempt');
- var logFile = attempt && (attempt.get('inProgressLog') || attempt.get('completedLog'));
- if(logFile) logFile += "/syslog_" + attempt.get('id');
- return logFile;
+ var yarnAppState = that.get('controllers.vertex.yarnAppState'),
+ attempt = row.get('pivotAttempt'),
+ suffix,
+ link,
+ cellContent = {};
+
+ if(attempt) {
+ suffix = "/syslog_" + attempt.get('id'),
+ link = attempt.get('inProgressLog') || attempt.get('completedLog');
+
+ if(link) {
+ cellContent.viewUrl = link + suffix;
+ }
+ link = attempt.get('completedLog');
+ if (link && yarnAppState === 'FINISHED' || yarnAppState === 'KILLED' || yarnAppState === 'FAILED') {
+ cellContent.downloadUrl = link + suffix;
+ }
+ }
+
+ cellContent.notAvailable = cellContent.viewUrl || cellContent.downloadUrl;
+
+ return cellContent;
}
}
];
http://git-wip-us.apache.org/repos/asf/tez/blob/758c26f0/tez-ui/src/main/webapp/app/scripts/models/TimelineRestAdapter.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/scripts/models/TimelineRestAdapter.js b/tez-ui/src/main/webapp/app/scripts/models/TimelineRestAdapter.js
index ed524dd..09c81ad 100644
--- a/tez-ui/src/main/webapp/app/scripts/models/TimelineRestAdapter.js
+++ b/tez-ui/src/main/webapp/app/scripts/models/TimelineRestAdapter.js
@@ -229,7 +229,6 @@ var timelineJsonToTaskMap = {
counterGroups: 'counterGroups',
successfulAttemptId: 'otherinfo.successfulAttemptId',
attempts: 'relatedentities.TEZ_TASK_ATTEMPT_ID',
- dagID: 'primaryfilters.TEZ_DAG_ID.0',
numAttempts: 'relatedentities.TEZ_TASK_ATTEMPT_ID.length'
};