Repository: ambari Updated Branches: refs/heads/trunk 7cea66b6e -> ec9462989
AMBARI-8109 Fix Tez configuration section on Ambari UI. (Buzhor Denys via atkach) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/ec946298 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/ec946298 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/ec946298 Branch: refs/heads/trunk Commit: ec94629891bb4592593f9060b496629d6f2aaa64 Parents: 7cea66b Author: atkach <[email protected]> Authored: Sun Nov 2 22:22:37 2014 +0200 Committer: atkach <[email protected]> Committed: Sun Nov 2 22:22:37 2014 +0200 ---------------------------------------------------------------------- ambari-web/app/data/HDP2.2/site_properties.js | 14 ++- ambari-web/app/data/HDP2.2/tez_properties.js | 43 ++++++++++ ambari-web/app/utils/config.js | 39 ++++++++- ambari-web/test/utils/config_test.js | 99 ++++++++++++++++++++++ 4 files changed, 191 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/ec946298/ambari-web/app/data/HDP2.2/site_properties.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/data/HDP2.2/site_properties.js b/ambari-web/app/data/HDP2.2/site_properties.js index 5b49100..979d16a 100644 --- a/ambari-web/app/data/HDP2.2/site_properties.js +++ b/ambari-web/app/data/HDP2.2/site_properties.js @@ -18,6 +18,7 @@ var App = require('app'); +var tezProperties = require('data/HDP2.2/tez_properties'); var hdp2properties = require('data/HDP2/site_properties').configProperties; var excludedConfigs = [ 'storm.thrift.transport', //In HDP2.2 storm.thrift.transport property is computed on server @@ -31,7 +32,7 @@ var excludedConfigs = [ 'tez.runtime.intermediate-input.is-compressed', 'tez.runtime.intermediate-output.compress.codec', 'tez.runtime.intermediate-output.should-compress', - 'dfs.datanode.data.dir' //this property is overridden with different properties + 'dfs.datanode.data.dir' ]; var hdp22properties = hdp2properties.filter(function (item) { return !excludedConfigs.contains(item.name); @@ -79,7 +80,16 @@ hdp22properties.push( "index": 1 }); +var additionalProperties = []; + +tezProperties.forEach(function(config) { + if (!hdp22properties.findProperty('name', config.name)) additionalProperties.push(config); + else { + hdp22properties.findProperty('name', config.name).category = config.category; + } +}); + module.exports = { - "configProperties": hdp22properties + "configProperties": hdp22properties.concat(additionalProperties) }; http://git-wip-us.apache.org/repos/asf/ambari/blob/ec946298/ambari-web/app/data/HDP2.2/tez_properties.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/data/HDP2.2/tez_properties.js b/ambari-web/app/data/HDP2.2/tez_properties.js new file mode 100644 index 0000000..46f18ba --- /dev/null +++ b/ambari-web/app/data/HDP2.2/tez_properties.js @@ -0,0 +1,43 @@ +/** + * 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'); + +var tezPropsToCategory = { + 'General': [ + 'tez.am.launch.cmd-opts', + 'tez.am.launch.env', + 'tez.task.resource.memory.mb', + 'tez.task.launch.cmd-opts', + 'tez.task.launch.env', + 'tez.grouping.split-waves', + 'tez.grouping.min-size', + 'tez.grouping.max-size', + 'tez.runtime.compress', + 'tez.runtime.compress.codec' + ] +}; + +var tezProps = []; + +for (var category in tezPropsToCategory) { + tezProps = tezProps.concat(App.config.generateConfigPropertiesByName(tezPropsToCategory[category], + { category: category, serviceName: 'TEZ', filename: 'tez-site.xml'})); +} + +module.exports = tezProps; + http://git-wip-us.apache.org/repos/asf/ambari/blob/ec946298/ambari-web/app/utils/config.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/utils/config.js b/ambari-web/app/utils/config.js index a934cae..2f157e8 100644 --- a/ambari-web/app/utils/config.js +++ b/ambari-web/app/utils/config.js @@ -1662,8 +1662,43 @@ App.config = Em.Object.create({ * @param hostName * (string) host name used to register */ - getConfigGroupsForHost: function (hostName) { + getConfigGroupsForHost: function (hostName) { - } + }, + /** + * Generate minimal config property object used in *_properties.js files. + * Example: + * <code> + * var someProperties = App.config.generateConfigPropertiesByName([ + * 'property_1', 'property_2', 'property_3'], { category: 'General', filename: 'myFileName'}); + * // someProperties contains Object[] + * [ + * { + * name: 'property_1', + * displayName: 'property_1', + * isVisible: true, + * isReconfigurable: true, + * category: 'General', + * filename: 'myFileName' + * }, + * ....... + * ] + * </code> + * @param {Array} names + * @param {Object} properties - additional properties which will merge with base object definition + * @returns {*} + */ + generateConfigPropertiesByName: function(names, properties) { + return names.map(function (item) { + var baseObj = { + name: item, + displayName: item, + isVisible: true, + isReconfigurable: true + }; + if (properties) return $.extend(baseObj, properties); + else return baseObj; + }); + } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/ec946298/ambari-web/test/utils/config_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/utils/config_test.js b/ambari-web/test/utils/config_test.js index 25b454f..5dec0ae 100644 --- a/ambari-web/test/utils/config_test.js +++ b/ambari-web/test/utils/config_test.js @@ -477,6 +477,105 @@ describe('App.config', function () { }); }); + describe('#generateConfigPropertiesByName', function() { + var tests = [ + { + names: ['property_1', 'property_2'], + properties: undefined, + e: { + keys: ['name', 'displayName', 'isVisible', 'isReconfigurable'] + }, + m: 'Should generate base property object without additional fields' + }, + { + names: ['property_1', 'property_2'], + properties: { category: 'SomeCat', serviceName: 'SERVICE_NAME' }, + e: { + keys: ['name', 'displayName', 'isVisible', 'isReconfigurable', 'category', 'serviceName'] + }, + m: 'Should generate base property object without additional fields' + } + ]; + + tests.forEach(function(test) { + it(test.m, function() { + expect(App.config.generateConfigPropertiesByName(test.names, test.properties).length).to.eql(test.names.length); + expect(App.config.generateConfigPropertiesByName(test.names, test.properties).map(function(property) { + return Em.keys(property); + }).reduce(function(p, c) { + return p.concat(c); + }).uniq()).to.eql(test.e.keys); + }); + }); + + }); + + describe('#generateConfigPropertiesByName', function() { + var tests = [ + { + names: ['property_1', 'property_2'], + properties: undefined, + e: { + keys: ['name', 'displayName', 'isVisible', 'isReconfigurable'] + }, + m: 'Should generate base property object without additional fields' + }, + { + names: ['property_1', 'property_2'], + properties: { category: 'SomeCat', serviceName: 'SERVICE_NAME' }, + e: { + keys: ['name', 'displayName', 'isVisible', 'isReconfigurable', 'category', 'serviceName'] + }, + m: 'Should generate base property object without additional fields' + } + ]; + + tests.forEach(function(test) { + it(test.m, function() { + expect(App.config.generateConfigPropertiesByName(test.names, test.properties).length).to.eql(test.names.length); + expect(App.config.generateConfigPropertiesByName(test.names, test.properties).map(function(property) { + return Em.keys(property); + }).reduce(function(p, c) { + return p.concat(c); + }).uniq()).to.eql(test.e.keys); + }); + }); + + }); + + describe('#generateConfigPropertiesByName', function() { + var tests = [ + { + names: ['property_1', 'property_2'], + properties: undefined, + e: { + keys: ['name', 'displayName', 'isVisible', 'isReconfigurable'] + }, + m: 'Should generate base property object without additional fields' + }, + { + names: ['property_1', 'property_2'], + properties: { category: 'SomeCat', serviceName: 'SERVICE_NAME' }, + e: { + keys: ['name', 'displayName', 'isVisible', 'isReconfigurable', 'category', 'serviceName'] + }, + m: 'Should generate base property object without additional fields' + } + ]; + + tests.forEach(function(test) { + it(test.m, function() { + expect(App.config.generateConfigPropertiesByName(test.names, test.properties).length).to.eql(test.names.length); + expect(App.config.generateConfigPropertiesByName(test.names, test.properties).map(function(property) { + return Em.keys(property); + }).reduce(function(p, c) { + return p.concat(c); + }).uniq()).to.eql(test.e.keys); + }); + }); + + }); + describe('#isManagedMySQLForHiveAllowed', function () { var cases = [
