Updated Branches: refs/heads/trunk c864766af -> 87e914c1b
AMBARI-3650 Poll for host_components which have stale_configs. (atkach) Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/87e914c1 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/87e914c1 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/87e914c1 Branch: refs/heads/trunk Commit: 87e914c1b3dce97f55791ede7ee7bc80a1823264 Parents: c864766 Author: atkach <[email protected]> Authored: Fri Nov 1 14:20:55 2013 +0200 Committer: atkach <[email protected]> Committed: Fri Nov 1 14:20:55 2013 +0200 ---------------------------------------------------------------------- .../services/host_component_stale_configs.json | 42 ++++++++++++++ .../controllers/global/cluster_controller.js | 8 ++- .../app/controllers/global/update_controller.js | 10 ++++ .../controllers/main/service/info/configs.js | 1 + ambari-web/app/initialize.js | 5 +- .../app/mappers/component_config_mapper.js | 61 ++++++++++++++++++++ ambari-web/app/models/service.js | 2 +- ambari-web/app/views/main/host/summary.js | 4 +- 8 files changed, 127 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/87e914c1/ambari-web/app/assets/data/services/host_component_stale_configs.json ---------------------------------------------------------------------- diff --git a/ambari-web/app/assets/data/services/host_component_stale_configs.json b/ambari-web/app/assets/data/services/host_component_stale_configs.json new file mode 100644 index 0000000..e256ff0 --- /dev/null +++ b/ambari-web/app/assets/data/services/host_component_stale_configs.json @@ -0,0 +1,42 @@ +{ + "href" : "http://192.168.56.101:8080/api/v1/clusters/cl/host_components?fields=HostRoles/component_name&HostRoles/stale_configs=true", + "items" : [ + { + "href" : "http://192.168.56.101:8080/api/v1/clusters/cl/hosts/dev01.hortonworks.com/host_components/HBASE_CLIENT", + "HostRoles" : { + "cluster_name" : "cl", + "component_name" : "HBASE_CLIENT", + "host_name" : "dev01.hortonworks.com", + "stale_configs" : true + }, + "host" : { + "href" : "http://192.168.56.101:8080/api/v1/clusters/cl/hosts/dev01.hortonworks.com" + } + }, + { + "href" : "http://192.168.56.101:8080/api/v1/clusters/cl/hosts/dev01.hortonworks.com/host_components/HBASE_MASTER", + "HostRoles" : { + "cluster_name" : "cl", + "component_name" : "HBASE_MASTER", + "ha_status" : "passive", + "host_name" : "dev01.hortonworks.com", + "stale_configs" : true + }, + "host" : { + "href" : "http://192.168.56.101:8080/api/v1/clusters/cl/hosts/dev01.hortonworks.com" + } + }, + { + "href" : "http://192.168.56.101:8080/api/v1/clusters/cl/hosts/dev01.hortonworks.com/host_components/HBASE_REGIONSERVER", + "HostRoles" : { + "cluster_name" : "cl", + "component_name" : "HBASE_REGIONSERVER", + "host_name" : "dev01.hortonworks.com", + "stale_configs" : true + }, + "host" : { + "href" : "http://192.168.56.101:8080/api/v1/clusters/cl/hosts/dev01.hortonworks.com" + } + } + ] +} http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/87e914c1/ambari-web/app/controllers/global/cluster_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/global/cluster_controller.js b/ambari-web/app/controllers/global/cluster_controller.js index 8e1860c..492ed3d 100644 --- a/ambari-web/app/controllers/global/cluster_controller.js +++ b/ambari-web/app/controllers/global/cluster_controller.js @@ -60,7 +60,8 @@ App.ClusterController = Em.Controller.extend({ 'users':false, 'datasets':false, 'targetclusters':false, - 'status': false + 'status': false, + 'componentConfigs': !App.supports.hostOverrides }), /** @@ -375,6 +376,11 @@ App.ClusterController = Em.Controller.extend({ self.loadUpdatedStatus(function(){ self.updateLoadStatus('status'); }); + if (App.supports.hostOverrides) { + App.router.get('updateController').updateComponentConfig(function () { + self.updateLoadStatus('componentConfigs'); + }); + } self.updateLoadStatus('services'); }, true); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/87e914c1/ambari-web/app/controllers/global/update_controller.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/global/update_controller.js b/ambari-web/app/controllers/global/update_controller.js index d0faa71..68c2977 100644 --- a/ambari-web/app/controllers/global/update_controller.js +++ b/ambari-web/app/controllers/global/update_controller.js @@ -40,6 +40,9 @@ App.UpdateController = Em.Controller.extend({ App.updater.run(this, 'updateHost', 'isWorking'); App.updater.run(this, 'updateServiceMetric', 'isWorking'); App.updater.run(this, 'graphsUpdate', 'isWorking'); + if (App.supports.hostOverrides) { + App.updater.run(this, 'updateComponentConfig', 'isWorking'); + } } }.observes('isWorking'), @@ -135,6 +138,13 @@ App.UpdateController = Em.Controller.extend({ callback(); } }); + }, + updateComponentConfig: function (callback) { + var testUrl = '/data/services/host_component_stale_configs.json'; + var componentConfigUrl = this.getUrl(testUrl, '/host_components?fields=HostRoles/component_name&HostRoles/stale_configs=true'); + App.HttpClient.get(componentConfigUrl, App.componentConfigMapper, { + complete: callback + }); } }); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/87e914c1/ambari-web/app/controllers/main/service/info/configs.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/service/info/configs.js b/ambari-web/app/controllers/main/service/info/configs.js index 9ceb8ee..f139a8d 100644 --- a/ambari-web/app/controllers/main/service/info/configs.js +++ b/ambari-web/app/controllers/main/service/info/configs.js @@ -614,6 +614,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend({ dfd.done(function () { var result = self.saveServiceConfigProperties(); App.router.get('clusterController').updateClusterData(); + App.router.get('updateController').updateComponentConfig(function(){}); flag = result.flag; if (result.flag === true) { header = Em.I18n.t('services.service.config.saved'); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/87e914c1/ambari-web/app/initialize.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/initialize.js b/ambari-web/app/initialize.js index 17d7c9b..bf7ca99 100644 --- a/ambari-web/app/initialize.js +++ b/ambari-web/app/initialize.js @@ -25,7 +25,7 @@ require('messages'); require('utils/base64'); require('utils/db'); require('utils/helper'); -require('utils/config') +require('utils/config'); require('models'); require('controllers'); require('templates'); @@ -33,7 +33,7 @@ require('views'); require('router'); require('utils/ajax'); -require('utils/updater');; +require('utils/updater'); require('mappers/server_data_mapper'); require('mappers/status_mapper'); @@ -47,6 +47,7 @@ require('mappers/users_mapper'); require('mappers/service_mapper'); require('mappers/target_cluster_mapper'); require('mappers/dataset_mapper'); +require('mappers/component_config_mapper'); require('utils/http_client'); require('utils/host_progress_popup'); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/87e914c1/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 new file mode 100644 index 0000000..afef667 --- /dev/null +++ b/ambari-web/app/mappers/component_config_mapper.js @@ -0,0 +1,61 @@ +/** + * 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. + */ + +var App = require('app'); + +/** + * The usage of previousResponse is due to detect + * which exactly components has stale_configs changed in comparison to previous response + */ +var previousResponse = {}; + +App.componentConfigMapper = App.QuickDataMapper.create({ + map: function (json) { + console.time('App.componentConfigMapper execution time'); + if (json.items) { + var result = {}; + 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]; + } else { + result[component.HostRoles.component_name + "_" + component.HostRoles.host_name] = true; + } + currentResponse[component.HostRoles.component_name + "_" + component.HostRoles.host_name] = true; + }); + + /** + * if stale_configs of components became + * true: + * then they will be in "result" 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); + + previousResponse = currentResponse; + } + console.timeEnd('App.componentConfigMapper execution time'); + } +}); http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/87e914c1/ambari-web/app/models/service.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/models/service.js b/ambari-web/app/models/service.js index 5319fc7..ebe5b08 100644 --- a/ambari-web/app/models/service.js +++ b/ambari-web/app/models/service.js @@ -83,7 +83,7 @@ App.Service = DS.Model.extend({ this.set('restartRequiredHostsAndComponents', hc); return (rhc.length>0); - }.property('serviceName', 'hostComponents'), + }.property('serviceName', '[email protected]'), /** * Contains a map of which hosts and host_components http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/87e914c1/ambari-web/app/views/main/host/summary.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/main/host/summary.js b/ambari-web/app/views/main/host/summary.js index 51ef1a0..5373269 100644 --- a/ambari-web/app/views/main/host/summary.js +++ b/ambari-web/app/views/main/host/summary.js @@ -34,11 +34,11 @@ App.MainHostSummaryView = Em.View.extend({ needToRestartComponentsCount: function() { return this.get('sortedComponents').filterProperty('staleConfigs', true).length; - }.property('sortedComponents'), + }.property('[email protected]'), needToRestartMessage: function() { return Em.I18n.t('hosts.host.details.needToRestart').format(this.get('needToRestartComponentsCount')); - }.property(), + }.property('needToRestartComponentsCount'), /** * @type: [{String}]
