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');
   }