You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2014/01/13 13:35:14 UTC
git commit: AMBARI-4272 Use map in order to update host-components.
(atkach)
Updated Branches:
refs/heads/trunk 46d3fa97d -> 4316bf08d
AMBARI-4272 Use map in order to update host-components. (atkach)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/4316bf08
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/4316bf08
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/4316bf08
Branch: refs/heads/trunk
Commit: 4316bf08db99ad8045aa404433df90f40041cb89
Parents: 46d3fa9
Author: atkach <at...@hortonworks.com>
Authored: Mon Jan 13 14:32:44 2014 +0200
Committer: atkach <at...@hortonworks.com>
Committed: Mon Jan 13 14:32:44 2014 +0200
----------------------------------------------------------------------
.../app/mappers/component_config_mapper.js | 28 +++++------
ambari-web/app/mappers/server_data_mapper.js | 3 +-
ambari-web/app/mappers/status_mapper.js | 52 +++++++++++---------
3 files changed, 44 insertions(+), 39 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/4316bf08/ambari-web/app/mappers/component_config_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/component_config_mapper.js b/ambari-web/app/mappers/component_config_mapper.js
index afef667..c0d2726 100644
--- a/ambari-web/app/mappers/component_config_mapper.js
+++ b/ambari-web/app/mappers/component_config_mapper.js
@@ -27,33 +27,33 @@ App.componentConfigMapper = App.QuickDataMapper.create({
map: function (json) {
console.time('App.componentConfigMapper execution time');
if (json.items) {
- var result = {};
+ var hostComponentRecordsMap = App.cache['hostComponentRecordsMap'];
+ var staleConfigsTrue = [];
var currentResponse = {};
json.items.forEach(function (component) {
- if (previousResponse[component.HostRoles.component_name + "_" + component.HostRoles.host_name]) {
- delete previousResponse[component.HostRoles.component_name + "_" + component.HostRoles.host_name];
+ var id = component.HostRoles.component_name + "_" + component.HostRoles.host_name;
+ if (previousResponse[id]) {
+ delete previousResponse[id];
} else {
- result[component.HostRoles.component_name + "_" + component.HostRoles.host_name] = true;
+ staleConfigsTrue.push(id);
}
- currentResponse[component.HostRoles.component_name + "_" + component.HostRoles.host_name] = true;
+ currentResponse[id] = true;
});
/**
* if stale_configs of components became
* true:
- * then they will be in "result" object
+ * then they will be in "staleConfigsTrue" object
* false:
* then they will be in "previousResponse" object
* if stale_configs haven't changed then both objects will be empty and components stay the same
*/
- App.HostComponent.find().forEach(function (hostComponent) {
- if (result[hostComponent.get('id')]) {
- hostComponent.set('staleConfigs', true);
- } else if (previousResponse[hostComponent.get('id')]) {
- hostComponent.set('staleConfigs', false);
- }
- }, this);
-
+ staleConfigsTrue.forEach(function (id) {
+ hostComponentRecordsMap[id].set('staleConfigs', true);
+ });
+ for (var id in previousResponse) {
+ hostComponentRecordsMap[id].set('staleConfigs', false)
+ }
previousResponse = currentResponse;
}
console.timeEnd('App.componentConfigMapper execution time');
http://git-wip-us.apache.org/repos/asf/ambari/blob/4316bf08/ambari-web/app/mappers/server_data_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/server_data_mapper.js b/ambari-web/app/mappers/server_data_mapper.js
index fad25ad..36b59c3 100644
--- a/ambari-web/app/mappers/server_data_mapper.js
+++ b/ambari-web/app/mappers/server_data_mapper.js
@@ -27,7 +27,8 @@ App.cache = {
'previousHostStatuses': {},
'previousComponentStatuses': {},
'hostComponentsOnService': {},
- 'services': []
+ 'services': [],
+ 'hostComponentRecordsMap': {}
};
App.ServerDataMapper = Em.Object.extend({
http://git-wip-us.apache.org/repos/asf/ambari/blob/4316bf08/ambari-web/app/mappers/status_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/status_mapper.js b/ambari-web/app/mappers/status_mapper.js
index 666d5ce..2c37933 100644
--- a/ambari-web/app/mappers/status_mapper.js
+++ b/ambari-web/app/mappers/status_mapper.js
@@ -23,14 +23,15 @@ App.statusMapper = App.QuickDataMapper.create({
console.time('App.statusMapper execution time');
if (json.items) {
var hostsCache = App.cache['Hosts'];
+ var previousHostStatuses = App.cache['previousHostStatuses'];
+ var previousComponentStatuses = App.cache['previousComponentStatuses'];
+ var hostComponentRecordsMap = App.cache['hostComponentRecordsMap'];
var hostStatuses = {};
- var hostComponentStatuses = {};
var addedHostComponents = [];
+ var updatedHostComponents = [];
var componentServiceMap = App.QuickDataMapper.componentServiceMap;
var currentComponentStatuses = {};
var currentHostStatuses = {};
- var previousHostStatuses = App.cache['previousHostStatuses'];
- var previousComponentStatuses = App.cache['previousComponentStatuses'];
var hostComponentsOnService = {};
json.items.forEach(function (host) {
@@ -39,6 +40,7 @@ App.statusMapper = App.QuickDataMapper.create({
if (previousHostStatuses[hostName] !== host.Hosts.host_status) {
hostStatuses[hostName] = host.Hosts.host_status;
}
+ //preserve all hosts' status
currentHostStatuses[hostName] = host.Hosts.host_status;
var hostComponentsOnHost = [];
host.host_components.forEach(function (host_component) {
@@ -46,10 +48,13 @@ App.statusMapper = App.QuickDataMapper.create({
var existedComponent = previousComponentStatuses[host_component.id];
var service = componentServiceMap[host_component.HostRoles.component_name];
+ //delete all currently existed host-components to indicate which need to be deleted from model
+ delete previousComponentStatuses[host_component.id];
+
if (existedComponent) {
//update host-components, which have status changed
if (existedComponent !== host_component.HostRoles.state) {
- hostComponentStatuses[host_component.id] = host_component.HostRoles.state;
+ updatedHostComponents.push(host_component);
}
} else {
addedHostComponents.push({
@@ -82,38 +87,37 @@ App.statusMapper = App.QuickDataMapper.create({
}
}, this);
- var hostComponents = App.HostComponent.find();
- var hosts = App.Host.find();
- hostComponents.forEach(function (hostComponent) {
- if (hostComponent) {
- var status = currentComponentStatuses[hostComponent.get('id')];
- //check whether component present in current response
- if (status) {
- //check whether component has status changed
- if (hostComponentStatuses[hostComponent.get('id')]) {
- hostComponent.set('workStatus', status);
- }
- } else {
- this.deleteRecord(hostComponent);
- }
+ for (var id in previousComponentStatuses) {
+ this.deleteRecord(hostComponentRecordsMap[id]);
+ }
+
+ updatedHostComponents.forEach(function (hostComponent) {
+ var hostComponentRecord = hostComponentRecordsMap[hostComponent.id];
+ if (hostComponentRecord) {
+ hostComponentRecord.set('workStatus', hostComponent.HostRoles.state);
}
}, this);
+ var hostRecords = App.Host.find();
+ hostRecords.forEach(function (host) {
+ var status = hostStatuses[host.get('id')];
+ if (status) {
+ host.set('healthStatus', status);
+ }
+ });
+
if (addedHostComponents.length) {
App.store.loadMany(this.get('model'), addedHostComponents);
+ App.HostComponent.find().forEach(function(hostComponent){
+ hostComponentRecordsMap[hostComponent.get('id')] = hostComponent;
+ });
}
App.cache['previousHostStatuses'] = currentHostStatuses;
App.cache['previousComponentStatuses'] = currentComponentStatuses;
App.cache['hostComponentsOnService'] = hostComponentsOnService;
- hosts.forEach(function (host) {
- var status = hostStatuses[host.get('id')];
- if (status) {
- host.set('healthStatus', status);
- }
- });
}
console.timeEnd('App.statusMapper execution time');
}