You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tez.apache.org by sr...@apache.org on 2017/04/20 09:57:49 UTC
tez git commit: TEZ-3631. Tez UI: TEZ_DAG_EXTRA_INFO compatibility
changes - Makes All DAGs page faster (sree)
Repository: tez
Updated Branches:
refs/heads/master cadf31b5e -> 59f56a540
TEZ-3631. Tez UI: TEZ_DAG_EXTRA_INFO compatibility changes - Makes All DAGs page faster (sree)
Project: http://git-wip-us.apache.org/repos/asf/tez/repo
Commit: http://git-wip-us.apache.org/repos/asf/tez/commit/59f56a54
Tree: http://git-wip-us.apache.org/repos/asf/tez/tree/59f56a54
Diff: http://git-wip-us.apache.org/repos/asf/tez/diff/59f56a54
Branch: refs/heads/master
Commit: 59f56a5403dc8a34daa5f31aae50a407899fe910
Parents: cadf31b
Author: Sreenath Somarajapuram <sr...@apache.org>
Authored: Thu Apr 20 15:27:19 2017 +0530
Committer: Sreenath Somarajapuram <sr...@apache.org>
Committed: Thu Apr 20 15:27:19 2017 +0530
----------------------------------------------------------------------
tez-ui/src/main/webapp/app/adapters/dag-info.js | 22 ++++
.../app/components/home-table-controls.js | 40 +++++++
.../main/webapp/app/controllers/home/index.js | 6 +-
tez-ui/src/main/webapp/app/entities/entity.js | 10 +-
tez-ui/src/main/webapp/app/models/dag-info.js | 28 +++++
tez-ui/src/main/webapp/app/models/dag.js | 30 +++--
.../src/main/webapp/app/routes/dag/counters.js | 3 +
.../src/main/webapp/app/routes/dag/graphical.js | 3 +
tez-ui/src/main/webapp/app/routes/dag/index.js | 3 +
.../src/main/webapp/app/routes/dag/swimlane.js | 3 +
tez-ui/src/main/webapp/app/routes/home/index.js | 18 +++
.../src/main/webapp/app/serializers/dag-info.js | 60 ++++++++++
tez-ui/src/main/webapp/app/serializers/dag.js | 47 +-------
tez-ui/src/main/webapp/app/styles/app.less | 1 +
.../webapp/app/styles/home-table-controls.less | 22 ++++
.../webapp/app/styles/queries-page-search.less | 1 +
tez-ui/src/main/webapp/app/styles/shared.less | 6 +
.../components/home-table-controls.hbs | 24 ++++
.../main/webapp/app/templates/home/index.hbs | 1 +
.../main/webapp/app/utils/download-dag-zip.js | 9 ++
.../src/main/webapp/config/default-app-conf.js | 3 +-
tez-ui/src/main/webapp/package.json | 1 +
.../components/home-table-controls-test.js | 80 +++++++++++++
.../webapp/tests/unit/adapters/dag-info-test.js | 30 +++++
.../tests/unit/controllers/home/index-test.js | 2 +-
.../webapp/tests/unit/models/dag-info-test.js | 35 ++++++
.../main/webapp/tests/unit/models/dag-test.js | 44 +++++++
.../webapp/tests/unit/routes/home/index-test.js | 24 ++++
.../tests/unit/serializers/dag-info-test.js | 114 +++++++++++++++++++
.../webapp/tests/unit/serializers/dag-test.js | 26 ++---
.../tests/unit/serializers/timeline-test.js | 2 +
31 files changed, 630 insertions(+), 68 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/adapters/dag-info.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/adapters/dag-info.js b/tez-ui/src/main/webapp/app/adapters/dag-info.js
new file mode 100644
index 0000000..b47e05f
--- /dev/null
+++ b/tez-ui/src/main/webapp/app/adapters/dag-info.js
@@ -0,0 +1,22 @@
+/**
+ * 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.
+ */
+
+import TimelineAdapter from './timeline';
+
+export default TimelineAdapter.extend({
+});
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/components/home-table-controls.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/components/home-table-controls.js b/tez-ui/src/main/webapp/app/components/home-table-controls.js
new file mode 100644
index 0000000..70c3863
--- /dev/null
+++ b/tez-ui/src/main/webapp/app/components/home-table-controls.js
@@ -0,0 +1,40 @@
+/**
+ * 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.
+ */
+
+import Ember from 'ember';
+
+export default Ember.Component.extend({
+ classNames: ['home-table-controls'],
+
+ countersLoaded: Ember.computed("dataProcessor.processedRows.@each.counterGroupsHash", function () {
+ var processedRows = this.get("dataProcessor.processedRows"),
+ countersLoaded = true;
+ if(processedRows) {
+ countersLoaded = processedRows.some(function (row) {
+ return Object.keys(row.get("counterGroupsHash")).length !== 0;
+ });
+ }
+ return countersLoaded;
+ }),
+
+ actions: {
+ loadCounters: function () {
+ this.get('targetObject.targetObject').send('loadCounters');
+ }
+ }
+});
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/controllers/home/index.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/controllers/home/index.js b/tez-ui/src/main/webapp/app/controllers/home/index.js
index 74050e3..5d8b290 100644
--- a/tez-ui/src/main/webapp/app/controllers/home/index.js
+++ b/tez-ui/src/main/webapp/app/controllers/home/index.js
@@ -52,7 +52,7 @@ export default TableController.extend({
loadingMore: false,
headerComponentNames: ['dags-page-search', 'table-controls', 'pagination-ui'],
- footerComponentNames: ['pagination-ui'],
+ footerComponentNames: ['home-table-controls', 'pagination-ui'],
_definition: TableDefinition.create(),
// Using computed, as observer won't fire if the property is not used
@@ -89,7 +89,9 @@ export default TableController.extend({
pageNum: this.get("pageNum"),
moreAvailable: this.get("moreAvailable"),
- loadingMore: this.get("loadingMore")
+ loadingMore: this.get("loadingMore"),
+
+ minRowsForFooter: 0
});
return definition;
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/entities/entity.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/entities/entity.js b/tez-ui/src/main/webapp/app/entities/entity.js
index c8f602b..22960b9 100644
--- a/tez-ui/src/main/webapp/app/entities/entity.js
+++ b/tez-ui/src/main/webapp/app/entities/entity.js
@@ -185,13 +185,21 @@ var Entity = Ember.Object.extend(NameMixin, {
if(needs) {
MoreObject.forEach(needs, function (name, needOptions) {
+ var loadNeed;
+
needOptions = that.normalizeNeed(name, needOptions, parentModel, queryParams, urlParams);
if(MoreObject.isFunction(needOptions.loadType)) {
needOptions.loadType = needOptions.loadType.call(needOptions, parentModel);
}
- if(needOptions.loadType !== "demand") {
+ loadNeed = needOptions.loadType !== "demand";
+
+ if(options && options.demandNeeds) {
+ loadNeed = options.demandNeeds.indexOf(name) !== -1;
+ }
+
+ if(loadNeed) {
let needLoader = that._loadNeed(loader, parentModel, needOptions, options);
if(needOptions.loadType !== "lazy") {
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/models/dag-info.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/models/dag-info.js b/tez-ui/src/main/webapp/app/models/dag-info.js
new file mode 100644
index 0000000..38387b0
--- /dev/null
+++ b/tez-ui/src/main/webapp/app/models/dag-info.js
@@ -0,0 +1,28 @@
+/**
+ * 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.
+ */
+
+import DS from 'ember-data';
+
+import AMTimelineModel from './am-timeline';
+
+export default AMTimelineModel.extend({
+
+ dagPlan: DS.attr('object'),
+ callerData: DS.attr('object'),
+
+});
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/models/dag.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/models/dag.js b/tez-ui/src/main/webapp/app/models/dag.js
index 2ab4af3..4ddec74 100644
--- a/tez-ui/src/main/webapp/app/models/dag.js
+++ b/tez-ui/src/main/webapp/app/models/dag.js
@@ -19,9 +19,9 @@
import Ember from 'ember';
import DS from 'ember-data';
-import AMTimelineModel from './am-timeline';
+import DAGInfoModel from './dag-info';
-export default AMTimelineModel.extend({
+export default DAGInfoModel.extend({
needs: {
am: {
type: "dagAm",
@@ -49,6 +49,12 @@ export default AMTimelineModel.extend({
}
},
silent: true
+ },
+ info: {
+ type: "dagInfo",
+ idKey: "entityID",
+ loadType: "demand",
+ silent: true
}
},
@@ -57,9 +63,9 @@ export default AMTimelineModel.extend({
submitter: DS.attr("string"),
// Serialize when required
- vertices: DS.attr('object'),
- edges: DS.attr('object'),
- vertexGroups: DS.attr('object'),
+ vertices: Ember.computed.or("dagPlan.vertices", "info.dagPlan.vertices"),
+ edges: Ember.computed.or("dagPlan.edges", "info.dagPlan.edges"),
+ vertexGroups: Ember.computed.or("dagPlan.vertexGroups", "info.dagPlan.vertexGroups"),
domain: DS.attr("string"),
containerLogs: DS.attr("object"),
@@ -72,9 +78,17 @@ export default AMTimelineModel.extend({
vertexNameIdMap: DS.attr("object"),
callerID: DS.attr("string"),
- callerContext: DS.attr("string"),
- callerDescription: DS.attr("string"),
- callerType: DS.attr("string"),
+ callerContext: Ember.computed.or("callerData.callerContext", "info.callerData.callerContext"),
+ callerDescription: Ember.computed.or("callerData.callerDescription", "info.callerData.callerDescription"),
+ callerType: Ember.computed.or("callerData.callerType", "info.callerData.callerType"),
amWsVersion: DS.attr("string"),
+
+ info: DS.attr("object"),
+
+ counterGroupsHash: Ember.computed("am.counterGroupsHash", "_counterGroups", "info.counterGroupsHash", function () {
+ var amCounters = this.get("am.counterGroupsHash"),
+ atsCounters = this.get("info.counterGroupsHash") || this._super();
+ return amCounters ? Ember.$.extend({}, atsCounters, amCounters) : atsCounters;
+ })
});
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/routes/dag/counters.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/routes/dag/counters.js b/tez-ui/src/main/webapp/app/routes/dag/counters.js
index be60c1d..a0a31b7 100644
--- a/tez-ui/src/main/webapp/app/routes/dag/counters.js
+++ b/tez-ui/src/main/webapp/app/routes/dag/counters.js
@@ -30,6 +30,9 @@ export default SingleAmPollsterRoute.extend({
},
load: function (value, query, options) {
+ options = Ember.$.extend({
+ demandNeeds: ["info"]
+ }, options);
return this.get("loader").queryRecord('dag', this.modelFor("dag").get("id"), options);
},
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/routes/dag/graphical.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/routes/dag/graphical.js b/tez-ui/src/main/webapp/app/routes/dag/graphical.js
index 69d2de4..81117d0 100644
--- a/tez-ui/src/main/webapp/app/routes/dag/graphical.js
+++ b/tez-ui/src/main/webapp/app/routes/dag/graphical.js
@@ -30,6 +30,9 @@ export default MultiAmPollsterRoute.extend({
},
load: function (value, query, options) {
+ options = Ember.$.extend({
+ demandNeeds: ["info", "dag"]
+ }, options);
return this.get("loader").query('vertex', {
dagID: this.modelFor("dag").get("id")
}, options);
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/routes/dag/index.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/routes/dag/index.js b/tez-ui/src/main/webapp/app/routes/dag/index.js
index 0bf01b2..46c8b05 100644
--- a/tez-ui/src/main/webapp/app/routes/dag/index.js
+++ b/tez-ui/src/main/webapp/app/routes/dag/index.js
@@ -32,6 +32,9 @@ export default SingleAmPollsterRoute.extend({
},
load: function (value, query, options) {
+ options = Ember.$.extend({
+ demandNeeds: ["info"]
+ }, options);
return this.get("loader").queryRecord('dag', this.modelFor("dag").get("id"), options);
},
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/routes/dag/swimlane.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/routes/dag/swimlane.js b/tez-ui/src/main/webapp/app/routes/dag/swimlane.js
index c79b00c..780184c 100644
--- a/tez-ui/src/main/webapp/app/routes/dag/swimlane.js
+++ b/tez-ui/src/main/webapp/app/routes/dag/swimlane.js
@@ -30,6 +30,9 @@ export default MultiAmPollsterRoute.extend({
},
load: function (value, query, options) {
+ options = Ember.$.extend({
+ demandNeeds: ["info", "dag"]
+ }, options);
return this.get("loader").query('vertex', {
dagID: this.modelFor("dag").get("id")
}, options);
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/routes/home/index.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/routes/home/index.js b/tez-ui/src/main/webapp/app/routes/home/index.js
index 0cdcc7c..da6da79 100644
--- a/tez-ui/src/main/webapp/app/routes/home/index.js
+++ b/tez-ui/src/main/webapp/app/routes/home/index.js
@@ -52,6 +52,8 @@ export default ServerSideOpsRoute.extend({
entityType: "dag",
loaderNamespace: "dags",
+ visibleRecords: [],
+
setupController: function (controller, model) {
this._super(controller, model);
Ember.run.later(this, "startCrumbBubble");
@@ -104,5 +106,21 @@ export default ServerSideOpsRoute.extend({
loader.unloadAll("ahs-app");
this._super();
},
+
+ loadCounters: function () {
+ var visibleRecords = this.get("visibleRecords").slice(),
+ loader = this.get("loader");
+
+ function loadInfoOfNextDAG() {
+ if(visibleRecords.length) {
+ loader.loadNeed(visibleRecords.shift(), "info").finally(loadInfoOfNextDAG);
+ }
+ }
+
+ loadInfoOfNextDAG();
+ },
+ tableRowsChanged: function (records) {
+ this.set("visibleRecords", records);
+ }
}
});
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/serializers/dag-info.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/serializers/dag-info.js b/tez-ui/src/main/webapp/app/serializers/dag-info.js
new file mode 100644
index 0000000..bba1d1b
--- /dev/null
+++ b/tez-ui/src/main/webapp/app/serializers/dag-info.js
@@ -0,0 +1,60 @@
+/**
+ * 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.
+ */
+
+import Ember from 'ember';
+
+import TimelineSerializer from './timeline';
+
+export default TimelineSerializer.extend({
+ maps: {
+ dagPlan: 'otherinfo.dagPlan',
+ callerData: 'callerData',
+ },
+
+ normalizeResourceHash: function (resourceHash) {
+ var data = resourceHash.data,
+ callerData = {},
+ dagInfo = Ember.get(data, "otherinfo.dagPlan.dagInfo"), // New style, from TEZ-2851
+ dagContext = Ember.get(data, "otherinfo.dagPlan.dagContext"); // Old style
+
+ if(dagContext) {
+ callerData.callerContext = Ember.String.classify((Ember.get(dagContext, "context")||"").toLowerCase());
+ callerData.callerDescription = Ember.get(dagContext, "description");
+ callerData.callerType = Ember.get(dagContext, "callerType") || Ember.get(data, "otherinfo.callerType");
+ }
+ else if(dagInfo) {
+ let infoObj = {};
+ try{
+ infoObj = JSON.parse(dagInfo);
+ }catch(e){
+ infoObj = dagInfo;
+ }
+
+ callerData.callerContext = Ember.get(infoObj, "context") || Ember.get(data, "otherinfo.callerContext");
+ callerData.callerDescription = Ember.get(infoObj, "description") || Ember.get(dagInfo, "blob") || dagInfo;
+ }
+
+ data.callerData = callerData;
+
+ return resourceHash;
+ },
+
+ extractAttributes: function (modelClass, resourceHash) {
+ return this._super(modelClass, this.normalizeResourceHash(resourceHash));
+ },
+});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/serializers/dag.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/serializers/dag.js b/tez-ui/src/main/webapp/app/serializers/dag.js
index 04dbdd2..9b3edfc 100644
--- a/tez-ui/src/main/webapp/app/serializers/dag.js
+++ b/tez-ui/src/main/webapp/app/serializers/dag.js
@@ -19,7 +19,7 @@
import Ember from 'ember';
-import TimelineSerializer from './timeline';
+import DAGInfoSerializer from './dag-info';
var MoreObject = more.Object;
@@ -102,12 +102,14 @@ function getIdNameMap(source) {
return idNameMap;
}
-export default TimelineSerializer.extend({
+export default DAGInfoSerializer.extend({
maps: {
name: 'primaryfilters.dagName.0',
submitter: 'primaryfilters.user.0',
+ callerID: 'primaryfilters.callerId.0',
+
atsStatus: getStatus,
// progress
@@ -115,10 +117,6 @@ export default TimelineSerializer.extend({
endTime: getEndTime,
// duration
- vertices: 'otherinfo.dagPlan.vertices',
- edges: 'otherinfo.dagPlan.edges',
- vertexGroups: 'otherinfo.dagPlan.vertexGroups',
-
// appID
domain: 'domain',
@@ -129,41 +127,6 @@ export default TimelineSerializer.extend({
vertexIdNameMap: getIdNameMap,
vertexNameIdMap: 'otherinfo.vertexNameIdMapping',
- callerID: 'primaryfilters.callerId.0',
- callerContext: 'callerContext',
- callerDescription: 'callerDescription',
- callerType: 'callerType',
-
amWsVersion: 'otherinfo.amWebServiceVersion',
- },
-
- normalizeResourceHash: function (resourceHash) {
- var data = resourceHash.data,
- dagInfo = Ember.get(resourceHash, "data.otherinfo.dagPlan.dagInfo"), // New style, from TEZ-2851
- dagContext = Ember.get(resourceHash, "data.otherinfo.dagPlan.dagContext"); // Old style
-
- if(dagContext) {
- data.callerContext = Ember.String.classify((Ember.get(dagContext, "context")||"").toLowerCase());
- data.callerDescription = Ember.get(dagContext, "description");
- data.callerType = Ember.get(dagContext, "callerType");
- }
- else if(dagInfo) {
- let infoObj = {};
- try{
- infoObj = JSON.parse(dagInfo);
- }catch(e){
- infoObj = dagInfo;
- }
-
- data.callerContext = Ember.get(infoObj, "context");
- data.callerDescription = Ember.get(infoObj, "description") || Ember.get(dagInfo, "blob") || dagInfo;
- }
-
- return resourceHash;
- },
-
- extractAttributes: function (modelClass, resourceHash) {
- return this._super(modelClass, this.normalizeResourceHash(resourceHash));
- },
-
+ }
});
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/styles/app.less
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/styles/app.less b/tez-ui/src/main/webapp/app/styles/app.less
index 2ad6449..7c66229 100644
--- a/tez-ui/src/main/webapp/app/styles/app.less
+++ b/tez-ui/src/main/webapp/app/styles/app.less
@@ -43,6 +43,7 @@
@import "em-swimlane-vertex-name";
@import "em-table-status-cell";
@import "query-timeline";
+@import "home-table-controls";
// Modals
@import "column-selector";
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/styles/home-table-controls.less
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/styles/home-table-controls.less b/tez-ui/src/main/webapp/app/styles/home-table-controls.less
new file mode 100644
index 0000000..76d2a4d
--- /dev/null
+++ b/tez-ui/src/main/webapp/app/styles/home-table-controls.less
@@ -0,0 +1,22 @@
+/**
+ * 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.
+ */
+
+.home-table-controls {
+ display: inline-block;
+ margin-top: 10px;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/styles/queries-page-search.less
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/styles/queries-page-search.less b/tez-ui/src/main/webapp/app/styles/queries-page-search.less
index a4a38ab..c279d7f 100644
--- a/tez-ui/src/main/webapp/app/styles/queries-page-search.less
+++ b/tez-ui/src/main/webapp/app/styles/queries-page-search.less
@@ -49,6 +49,7 @@
label {
margin-bottom: 2px;
+ .no-wrap;
}
}
}
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/styles/shared.less
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/styles/shared.less b/tez-ui/src/main/webapp/app/styles/shared.less
index 0fa7309..24da150 100644
--- a/tez-ui/src/main/webapp/app/styles/shared.less
+++ b/tez-ui/src/main/webapp/app/styles/shared.less
@@ -54,4 +54,10 @@ b {
.em-progress-container {
padding-top: 1px;
}
+
+ .table-footer {
+ .pagination-ui {
+ margin-top: 10px;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/templates/components/home-table-controls.hbs
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/templates/components/home-table-controls.hbs b/tez-ui/src/main/webapp/app/templates/components/home-table-controls.hbs
new file mode 100644
index 0000000..459ff22
--- /dev/null
+++ b/tez-ui/src/main/webapp/app/templates/components/home-table-controls.hbs
@@ -0,0 +1,24 @@
+{{!
+ * 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.
+}}
+
+<button type="button"
+ class="btn btn-success {{if countersLoaded 'no-visible'}}"
+ {{action "loadCounters"}}
+ title="Load counter values for all the above rows. Please note that loading counters is a costly operation.">
+ Load Counters
+</button>
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/templates/home/index.hbs
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/templates/home/index.hbs b/tez-ui/src/main/webapp/app/templates/home/index.hbs
index e6f3aa0..ee68386 100644
--- a/tez-ui/src/main/webapp/app/templates/home/index.hbs
+++ b/tez-ui/src/main/webapp/app/templates/home/index.hbs
@@ -35,6 +35,7 @@
search="search"
loadPage="loadPage"
reload="reload"
+ rowsChanged="tableRowsChanged"
}}
{{#if queue}}
<div class="alert alert-info">
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/app/utils/download-dag-zip.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/app/utils/download-dag-zip.js b/tez-ui/src/main/webapp/app/utils/download-dag-zip.js
index 8f10bde..0af83ae 100644
--- a/tez-ui/src/main/webapp/app/utils/download-dag-zip.js
+++ b/tez-ui/src/main/webapp/app/utils/download-dag-zip.js
@@ -306,6 +306,15 @@ export default function downloadDagZip(dag, options) {
retryCount: 3,
},
{
+ url: getUrl('TEZ_DAG_EXTRA_INFO', dagID),
+ context: { name: 'dag-extra-info', type: 'TEZ_DAG_EXTRA_INFO' },
+ onFetch: onFetch,
+ onRetry: onRetry,
+ onItemFetched: processSingleItem,
+ onItemFail: processFailure,
+ retryCount: 3,
+ },
+ {
url: getUrl('TEZ_DAG_ID', dagID),
context: { name: 'dag', type: 'TEZ_DAG_ID' },
onFetch: onFetch,
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/config/default-app-conf.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/config/default-app-conf.js b/tez-ui/src/main/webapp/config/default-app-conf.js
index 1e38024..71c4ca7 100644
--- a/tez-ui/src/main/webapp/config/default-app-conf.js
+++ b/tez-ui/src/main/webapp/config/default-app-conf.js
@@ -46,7 +46,8 @@ module.exports = { // Tez App configurations
task: 'TEZ_TASK_ID',
attempt: 'TEZ_TASK_ATTEMPT_ID',
- "hive-query": 'HIVE_QUERY_ID',
+ 'dag-info': 'TEZ_DAG_EXTRA_INFO',
+ 'hive-query': 'HIVE_QUERY_ID',
app: 'TEZ_APPLICATION'
},
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/package.json
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/package.json b/tez-ui/src/main/webapp/package.json
index 7c9e348..f4e30ff 100644
--- a/tez-ui/src/main/webapp/package.json
+++ b/tez-ui/src/main/webapp/package.json
@@ -12,6 +12,7 @@
"build": "TMPDIR=tmp node ./node_modules/ember-cli/bin/ember build",
"start": "TMPDIR=tmp node ./node_modules/ember-cli/bin/ember server",
"test": "TMPDIR=tmp node ./node_modules/ember-cli/bin/ember test",
+ "test-serve": "TMPDIR=tmp node ./node_modules/ember-cli/bin/ember test --serve",
"build:mvn": "TMPDIR=tmp node/node ./node_modules/ember-cli/bin/ember build -prod",
"test:mvn": "TMPDIR=tmp node/node ./node_modules/ember-cli/bin/ember test"
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/integration/components/home-table-controls-test.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/tests/integration/components/home-table-controls-test.js b/tez-ui/src/main/webapp/tests/integration/components/home-table-controls-test.js
new file mode 100644
index 0000000..ccce2db
--- /dev/null
+++ b/tez-ui/src/main/webapp/tests/integration/components/home-table-controls-test.js
@@ -0,0 +1,80 @@
+/**
+ * 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.
+ */
+
+import { moduleForComponent, test } from 'ember-qunit';
+import hbs from 'htmlbars-inline-precompile';
+
+import Ember from 'ember';
+
+moduleForComponent('home-table-controls', 'Integration | Component | home table controls', {
+ integration: true
+});
+
+test('Basic creation test', function(assert) {
+ this.render(hbs`{{home-table-controls}}`);
+
+ assert.equal(this.$().text().trim(), 'Load Counters');
+ assert.equal(this.$().find("button").attr("class").split(" ").indexOf("no-visible"), 2);
+
+ // Template block usage:" + EOL +
+ this.render(hbs`
+ {{#home-table-controls}}
+ template block text
+ {{/home-table-controls}}
+ `);
+
+ assert.equal(this.$().text().trim(), 'Load Counters');
+});
+
+test('countersLoaded test', function(assert) {
+ this.set("dataProcessor", {
+ processedRows: [Ember.Object.create({
+ counterGroupsHash: {
+ counter: {}
+ }
+ }), Ember.Object.create({
+ counterGroupsHash: {
+ counter: {}
+ }
+ })]
+ });
+ this.render(hbs`{{home-table-controls dataProcessor=dataProcessor}}`);
+ assert.equal(this.$().find("button").attr("class").split(" ").indexOf("no-visible"), 2);
+
+ this.set("dataProcessor", {
+ processedRows: [Ember.Object.create({
+ counterGroupsHash: {}
+ }), Ember.Object.create({
+ counterGroupsHash: {
+ counter: {}
+ }
+ })]
+ });
+ this.render(hbs`{{home-table-controls dataProcessor=dataProcessor}}`);
+ assert.equal(this.$().find("button").attr("class").split(" ").indexOf("no-visible"), 2);
+
+ this.set("dataProcessor", {
+ processedRows: [Ember.Object.create({
+ counterGroupsHash: {}
+ }), Ember.Object.create({
+ counterGroupsHash: {}
+ })]
+ });
+ this.render(hbs`{{home-table-controls dataProcessor=dataProcessor}}`);
+ assert.equal(this.$().find("button").attr("class").split(" ").indexOf("no-visible"), -1);
+});
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/adapters/dag-info-test.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/tests/unit/adapters/dag-info-test.js b/tez-ui/src/main/webapp/tests/unit/adapters/dag-info-test.js
new file mode 100644
index 0000000..44eebcf
--- /dev/null
+++ b/tez-ui/src/main/webapp/tests/unit/adapters/dag-info-test.js
@@ -0,0 +1,30 @@
+/**
+ * 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.
+ */
+
+import { moduleFor, test } from 'ember-qunit';
+
+moduleFor('adapter:dag-info', 'Unit | Adapter | dag info', {
+ // Specify the other units that are required for this test.
+ // needs: ['serializer:foo']
+});
+
+test('Basic creation test', function(assert) {
+ let adapter = this.subject();
+
+ assert.ok(adapter);
+});
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/controllers/home/index-test.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/tests/unit/controllers/home/index-test.js b/tez-ui/src/main/webapp/tests/unit/controllers/home/index-test.js
index a9e5ac1..0e3977a 100644
--- a/tez-ui/src/main/webapp/tests/unit/controllers/home/index-test.js
+++ b/tez-ui/src/main/webapp/tests/unit/controllers/home/index-test.js
@@ -47,7 +47,7 @@ test('Basic creation test', function(assert) {
assert.ok(controller.queryParams);
assert.ok(controller.headerComponentNames);
assert.equal(controller.headerComponentNames.length, 3);
- assert.equal(controller.footerComponentNames.length, 1);
+ assert.equal(controller.footerComponentNames.length, 2);
assert.ok(controller._definition);
assert.ok(controller.definition);
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/models/dag-info-test.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/tests/unit/models/dag-info-test.js b/tez-ui/src/main/webapp/tests/unit/models/dag-info-test.js
new file mode 100644
index 0000000..f2ceca3
--- /dev/null
+++ b/tez-ui/src/main/webapp/tests/unit/models/dag-info-test.js
@@ -0,0 +1,35 @@
+/**
+ * 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.
+ */
+
+import { moduleForModel, test } from 'ember-qunit';
+
+moduleForModel('dag-info', 'Unit | Model | dag info', {
+ // Specify the other units that are required for this test.
+ needs: []
+});
+
+test('Basic creation test', function(assert) {
+ let model = this.subject();
+ // let store = this.store();
+ assert.ok(!!model);
+
+ assert.ok(model.dagPlan);
+ assert.ok(model.callerData);
+});
+
+
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/models/dag-test.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/tests/unit/models/dag-test.js b/tez-ui/src/main/webapp/tests/unit/models/dag-test.js
index 06e0ec1..468c87f 100644
--- a/tez-ui/src/main/webapp/tests/unit/models/dag-test.js
+++ b/tez-ui/src/main/webapp/tests/unit/models/dag-test.js
@@ -35,6 +35,7 @@ test('Basic creation test', function(assert) {
assert.ok(!!model);
assert.ok(!!model.needs.am);
+ assert.ok(!!model.needs.info);
assert.equal(model.get("queue"), testQueue);
});
@@ -56,6 +57,10 @@ test('Basic creation test', function(assert) {
assert.ok(model.callerDescription);
assert.ok(model.callerType);
+ assert.ok(model.dagPlan);
+ assert.ok(model.callerData);
+ assert.ok(model.info);
+
assert.ok(model.amWsVersion);
});
@@ -95,3 +100,42 @@ test('queue test', function(assert) {
assert.equal(model.get("queue"), queueName);
});
});
+
+test('vertices, edges & vertexGroups test', function(assert) {
+ let testVertices = {},
+ testEdges = {},
+ testVertexGroups = {},
+ model = this.subject({
+ dagPlan: {
+ vertices: testVertices,
+ edges: testEdges,
+ vertexGroups: testVertexGroups
+ }
+ });
+
+ assert.equal(model.get("vertices"), testVertices);
+ assert.equal(model.get("edges"), testEdges);
+ assert.equal(model.get("vertexGroups"), testVertexGroups);
+
+ Ember.run(function () {
+ testVertices = {};
+ testEdges = {};
+ testVertexGroups = {};
+
+ model.set("info", {
+ dagPlan: {
+ vertices: testVertices,
+ edges: testEdges,
+ vertexGroups: testVertexGroups
+ }
+ });
+ assert.notEqual(model.get("vertices"), testVertices);
+ assert.notEqual(model.get("edges"), testEdges);
+ assert.notEqual(model.get("vertexGroups"), testVertexGroups);
+
+ model.set("dagPlan", null);
+ assert.equal(model.get("vertices"), testVertices);
+ assert.equal(model.get("edges"), testEdges);
+ assert.equal(model.get("vertexGroups"), testVertexGroups);
+ });
+});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/routes/home/index-test.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/tests/unit/routes/home/index-test.js b/tez-ui/src/main/webapp/tests/unit/routes/home/index-test.js
index d35a325..afe83cb 100644
--- a/tez-ui/src/main/webapp/tests/unit/routes/home/index-test.js
+++ b/tez-ui/src/main/webapp/tests/unit/routes/home/index-test.js
@@ -40,6 +40,8 @@ test('Basic creation test', function(assert) {
assert.ok(route.filterRecords);
assert.ok(route.actions.willTransition);
+ assert.ok(route.actions.loadCounters);
+ assert.ok(route.actions.tableRowsChanged);
});
test('refresh test', function(assert) {
@@ -162,3 +164,25 @@ test('actions.willTransition test', function(assert) {
assert.expect(2);
route.send("willTransition");
});
+
+test('actions.loadCounters test', function(assert) {
+ let route = this.subject({
+ controller: Ember.Object.create()
+ }),
+ visibleRecords = [{}, {}, {}],
+ index = 0;
+
+ route.loader = {
+ loadNeed: function (record, name) {
+ assert.equal(record, visibleRecords[index++]);
+ assert.equal(name, "info");
+ return Ember.RSVP.resolve(record);
+ }
+ };
+ assert.expect(3 * 2);
+
+ route.send("loadCounters");
+
+ route.set("visibleRecords", visibleRecords);
+ route.send("loadCounters");
+});
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/serializers/dag-info-test.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/tests/unit/serializers/dag-info-test.js b/tez-ui/src/main/webapp/tests/unit/serializers/dag-info-test.js
new file mode 100644
index 0000000..b5c46f0
--- /dev/null
+++ b/tez-ui/src/main/webapp/tests/unit/serializers/dag-info-test.js
@@ -0,0 +1,114 @@
+/**
+ * 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.
+ */
+
+import { moduleFor, test } from 'ember-qunit';
+
+moduleFor('serializer:dag-info', 'Unit | Serializer | dag info', {
+ // Specify the other units that are required for this test.
+ // needs: ['serializer:dag-info']
+});
+
+test('Basic creation test', function(assert) {
+ let serializer = this.subject();
+
+ assert.ok(serializer);
+
+ assert.ok(serializer.normalizeResourceHash);
+
+ assert.ok(serializer.maps.dagPlan);
+ assert.ok(serializer.maps.callerData);
+
+ assert.equal(Object.keys(serializer.get("maps")).length, 2 + 7); //2 own & 7 inherited
+});
+
+test('normalizeResourceHash test', function(assert) {
+ let serializer = this.subject(),
+
+ callerInfo = {
+ callerId: "id_1",
+ callerType: "HIVE_QUERY_ID",
+ context: "Hive",
+ description: "hive query"
+ },
+
+ data;
+
+ // dagContext test
+ data = serializer.normalizeResourceHash({
+ data: {
+ otherinfo: {
+ dagPlan: {
+ dagContext: callerInfo
+ }
+ }
+ }
+ }).data;
+
+ assert.equal(data.callerData.callerContext, callerInfo.context);
+ assert.equal(data.callerData.callerDescription, callerInfo.description);
+ assert.equal(data.callerData.callerType, callerInfo.callerType);
+
+ // dagInfo test
+ data = serializer.normalizeResourceHash({
+ data: {
+ otherinfo: {
+ dagPlan: {
+ dagInfo: `{"context": "${callerInfo.context}", "description": "${callerInfo.description}"}`
+ }
+ }
+ }
+ }).data;
+
+ assert.equal(data.callerData.callerContext, callerInfo.context);
+ assert.equal(data.callerData.callerDescription, callerInfo.description);
+ assert.notOk(data.callerData.callerType);
+
+ // dagInfo.blob test
+ data = serializer.normalizeResourceHash({
+ data: {
+ otherinfo: {
+ dagPlan: {
+ dagInfo: {
+ context: callerInfo.context,
+ blob: callerInfo.description
+ }
+ }
+ }
+ }
+ }).data;
+
+ assert.equal(data.callerData.callerContext, callerInfo.context);
+ assert.equal(data.callerData.callerDescription, callerInfo.description);
+ assert.notOk(data.callerData.callerType);
+
+ // dagContext have presidence over dagInfo
+ data = serializer.normalizeResourceHash({
+ data: {
+ otherinfo: {
+ dagPlan: {
+ dagContext: callerInfo,
+ dagInfo: `{"context": "RandomContext", "description": "RandomDesc"}`
+ }
+ }
+ }
+ }).data;
+
+ assert.equal(data.callerData.callerContext, callerInfo.context);
+ assert.equal(data.callerData.callerDescription, callerInfo.description);
+ assert.equal(data.callerData.callerType, callerInfo.callerType);
+});
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/serializers/dag-test.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/tests/unit/serializers/dag-test.js b/tez-ui/src/main/webapp/tests/unit/serializers/dag-test.js
index e782869..f57d1af 100644
--- a/tez-ui/src/main/webapp/tests/unit/serializers/dag-test.js
+++ b/tez-ui/src/main/webapp/tests/unit/serializers/dag-test.js
@@ -36,7 +36,7 @@ test('Basic creation test', function(assert) {
assert.ok(serializer.maps.containerLogs);
assert.ok(serializer.maps.vertexIdNameMap);
- assert.equal(Object.keys(serializer.get("maps")).length, 18 + 5); //18 own & 7 inherited
+ assert.equal(Object.keys(serializer.get("maps")).length, 12 + 7); //12 own & 9 inherited (2 overwritten)
});
test('atsStatus test', function(assert) {
@@ -158,9 +158,9 @@ test('normalizeResourceHash test', function(assert) {
}
}).data;
- assert.equal(data.callerContext, callerInfo.context);
- assert.equal(data.callerDescription, callerInfo.description);
- assert.equal(data.callerType, callerInfo.callerType);
+ assert.equal(data.callerData.callerContext, callerInfo.context);
+ assert.equal(data.callerData.callerDescription, callerInfo.description);
+ assert.equal(data.callerData.callerType, callerInfo.callerType);
// dagInfo test
data = serializer.normalizeResourceHash({
@@ -173,9 +173,9 @@ test('normalizeResourceHash test', function(assert) {
}
}).data;
- assert.equal(data.callerContext, callerInfo.context);
- assert.equal(data.callerDescription, callerInfo.description);
- assert.notOk(data.callerType);
+ assert.equal(data.callerData.callerContext, callerInfo.context);
+ assert.equal(data.callerData.callerDescription, callerInfo.description);
+ assert.notOk(data.callerData.callerType);
// dagInfo.blob test
data = serializer.normalizeResourceHash({
@@ -191,9 +191,9 @@ test('normalizeResourceHash test', function(assert) {
}
}).data;
- assert.equal(data.callerContext, callerInfo.context);
- assert.equal(data.callerDescription, callerInfo.description);
- assert.notOk(data.callerType);
+ assert.equal(data.callerData.callerContext, callerInfo.context);
+ assert.equal(data.callerData.callerDescription, callerInfo.description);
+ assert.notOk(data.callerData.callerType);
// dagContext have presidence over dagInfo
data = serializer.normalizeResourceHash({
@@ -207,7 +207,7 @@ test('normalizeResourceHash test', function(assert) {
}
}).data;
- assert.equal(data.callerContext, callerInfo.context);
- assert.equal(data.callerDescription, callerInfo.description);
- assert.equal(data.callerType, callerInfo.callerType);
+ assert.equal(data.callerData.callerContext, callerInfo.context);
+ assert.equal(data.callerData.callerDescription, callerInfo.description);
+ assert.equal(data.callerData.callerType, callerInfo.callerType);
});
http://git-wip-us.apache.org/repos/asf/tez/blob/59f56a54/tez-ui/src/main/webapp/tests/unit/serializers/timeline-test.js
----------------------------------------------------------------------
diff --git a/tez-ui/src/main/webapp/tests/unit/serializers/timeline-test.js b/tez-ui/src/main/webapp/tests/unit/serializers/timeline-test.js
index 3c267ad..8f39df7 100644
--- a/tez-ui/src/main/webapp/tests/unit/serializers/timeline-test.js
+++ b/tez-ui/src/main/webapp/tests/unit/serializers/timeline-test.js
@@ -29,6 +29,8 @@ test('Basic creation test', function(assert) {
assert.ok(serializer);
assert.ok(serializer.extractArrayPayload);
assert.ok(serializer.maps);
+
+ assert.equal(Object.keys(serializer.get("maps")).length, 7);
});
test('extractArrayPayload test', function(assert) {