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 <[email protected]> Authored: Mon Jan 13 14:32:44 2014 +0200 Committer: atkach <[email protected]> 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'); }
