Repository: ambari Updated Branches: refs/heads/trunk f8d75a608 -> 684ffd294
AMBARI-11019 AMS config warning message is confusing. (atkach) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/684ffd29 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/684ffd29 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/684ffd29 Branch: refs/heads/trunk Commit: 684ffd294ded1375b0212b54907f74b27a45ab4e Parents: f8d75a6 Author: Andrii Tkach <atk...@hortonworks.com> Authored: Fri May 8 13:47:33 2015 +0300 Committer: Andrii Tkach <atk...@hortonworks.com> Committed: Fri May 8 13:47:33 2015 +0300 ---------------------------------------------------------------------- .../stacks/HDP/2.0.6/services/stack_advisor.py | 43 +++++++++++++------- ambari-web/app/messages.js | 1 + ambari-web/app/mixins/common/serverValidator.js | 11 +++-- .../config_recommendation_popup.hbs | 16 +++++--- 4 files changed, 48 insertions(+), 23 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/684ffd29/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py index c67c39d..e27236f 100644 --- a/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py +++ b/ambari-server/src/main/resources/stacks/HDP/2.0.6/services/stack_advisor.py @@ -340,9 +340,37 @@ class HDP206StackAdvisor(DefaultStackAdvisor): print("Recommendations: %s\n********\n" % str(siteRecommendations)) resultItems = method(siteProperties, siteRecommendations, configurations, services, hosts) items.extend(resultItems) + clusterWideItems = self.validateClusterConfigurations(configurations, services, hosts) + items.extend(clusterWideItems) self.validateMinMax(items, recommendedDefaults, configurations) return items + def validateClusterConfigurations(self, configurations, services, hosts): + validationItems = [] + hostComponents = {} + failureMessage = "" + + for service in services["services"]: + for component in service["components"]: + if component["StackServiceComponents"]["hostnames"] is not None: + for hostName in component["StackServiceComponents"]["hostnames"]: + if hostName not in hostComponents.keys(): + hostComponents[hostName] = [] + hostComponents[hostName].append(component["StackServiceComponents"]["component_name"]) + + for host in hosts["items"]: + # Not enough physical memory + requiredMemory = getMemorySizeRequired(hostComponents[host["Hosts"]["host_name"]], configurations) + if host["Hosts"]["total_mem"] * 1024 < requiredMemory: # in bytes + failureMessage += "Not enough physical RAM on the host {0}. " \ + "At least {1} MB is recommended based on components assigned.\n" \ + .format(host["Hosts"]["host_name"], requiredMemory/1048576) # MB + if failureMessage: + notEnoughMemoryItem = self.getWarnItem(failureMessage) + validationItems.extend([{"config-name": "", "item": notEnoughMemoryItem}]) + + return self.toConfigurationValidationProblems(validationItems, "") + def getServiceConfigurationValidators(self): return { "HDFS": {"hadoop-env": self.validateHDFSConfigurationsEnv}, @@ -447,16 +475,12 @@ class HDP206StackAdvisor(DefaultStackAdvisor): masterHostItem = None if masterItem is None: - hostComponents = {} hostMasterComponents = {} for service in services["services"]: for component in service["components"]: if component["StackServiceComponents"]["hostnames"] is not None: for hostName in component["StackServiceComponents"]["hostnames"]: - if hostName not in hostComponents.keys(): - hostComponents[hostName] = [] - hostComponents[hostName].append(component["StackServiceComponents"]["component_name"]) if self.isMasterComponent(component): if hostName not in hostMasterComponents.keys(): hostMasterComponents[hostName] = [] @@ -478,17 +502,6 @@ class HDP206StackAdvisor(DefaultStackAdvisor): masterHostItem = self.getWarnItem( masterHostMessage.format( collectorHostName, str(", ".join(hostMasterComponents[collectorHostName])))) - - # Not enough physical memory - requiredMemory = getMemorySizeRequired(hostComponents[collectorHostName], configurations) - if host["Hosts"]["total_mem"] * 1024 < requiredMemory: # in bytes - message = "Not enough total RAM on the host {0}, " \ - "at least {1} MB required for the components({2})" \ - .format(collectorHostName, requiredMemory/1048576, - str(", ".join(hostComponents[collectorHostName]))) # MB - regionServerItem = self.getErrorItem(message) - masterItem = self.getErrorItem(message) - break pass # Check RS memory in distributed mode since we set default as 512m http://git-wip-us.apache.org/repos/asf/ambari/blob/684ffd29/ambari-web/app/messages.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js index c7693a7..8011182 100644 --- a/ambari-web/app/messages.js +++ b/ambari-web/app/messages.js @@ -55,6 +55,7 @@ Em.I18n.translations = { 'ok':'OK', 'as':'as', 'on':'on', + 'in':'in', 'any': 'Any', 'more':'more', 'yes':'Yes', http://git-wip-us.apache.org/repos/asf/ambari/blob/684ffd29/ambari-web/app/mixins/common/serverValidator.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/mixins/common/serverValidator.js b/ambari-web/app/mixins/common/serverValidator.js index ce8a426..5b2057e 100644 --- a/ambari-web/app/mixins/common/serverValidator.js +++ b/ambari-web/app/mixins/common/serverValidator.js @@ -230,11 +230,16 @@ App.ServerValidatorMixin = Em.Mixin.create({ var message = { propertyName: item['config-name'], filename: item['config-type'], - warnMessage: item.message, - serviceName: App.StackService.find().filter(function(service) { + warnMessage: item.message + }; + if (item['config-type'] === "" && item['config-name'] === "") { + //service-independent validation + message.isGeneral = true; + } else { + message.serviceName = App.StackService.find().filter(function(service) { return !!service.get('configTypes')[item['config-type']]; })[0].get('displayName') - }; + } self.set(item.level == 'WARN' ? 'configValidationWarning' : 'configValidationError', true); globalWarning.push(message); } http://git-wip-us.apache.org/repos/asf/ambari/blob/684ffd29/ambari-web/app/templates/common/modal_popups/config_recommendation_popup.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/common/modal_popups/config_recommendation_popup.hbs b/ambari-web/app/templates/common/modal_popups/config_recommendation_popup.hbs index 54fec3a..5283417 100644 --- a/ambari-web/app/templates/common/modal_popups/config_recommendation_popup.hbs +++ b/ambari-web/app/templates/common/modal_popups/config_recommendation_popup.hbs @@ -57,11 +57,17 @@ {{/each}} {{/each}} {{#each message in configValidationGlobalMessage}} - <tr> - <td>{{message.serviceName}}</td> - <td>{{message.propertyName}}</td> - <td colspan="2">{{message.warnMessage}} in {{message.filename}}</td> - </tr> + {{#if message.isGeneral}} + <tr> + <td colspan="4">{{message.warnMessage}}</td> + </tr> + {{else}} + <tr> + <td>{{message.serviceName}}</td> + <td>{{message.propertyName}}</td> + <td colspan="2">{{message.warnMessage}} {{t in}} {{message.filename}}</td> + </tr> + {{/if}} {{/each}} </tbody> </table>