You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ab...@apache.org on 2015/08/03 11:30:35 UTC
[3/3] ambari git commit: AMBARI-12618 Service config pages load too
slowly. (ababiichuk)
AMBARI-12618 Service config pages load too slowly. (ababiichuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/9582cc0a
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/9582cc0a
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/9582cc0a
Branch: refs/heads/branch-2.1
Commit: 9582cc0a7f5f527aa9f9dd2521c7ce8a48fc26ac
Parents: 1b3f6f7
Author: aBabiichuk <ab...@cybervisiontech.com>
Authored: Mon Aug 3 12:25:11 2015 +0300
Committer: aBabiichuk <ab...@cybervisiontech.com>
Committed: Mon Aug 3 12:25:11 2015 +0300
----------------------------------------------------------------------
.../controllers/global/cluster_controller.js | 4 +-
.../main/admin/kerberos/step2_controller.js | 14 +-
.../main/admin/kerberos/wizard_controller.js | 24 +-
.../main/admin/serviceAccounts_controller.js | 19 +-
.../controllers/main/service/info/configs.js | 287 +-----
ambari-web/app/controllers/wizard.js | 74 +-
.../app/controllers/wizard/step7_controller.js | 117 +--
ambari-web/app/data/HDP2.3/site_properties.js | 8 +-
ambari-web/app/data/host_component_mapping.js | 142 +++
.../configs/stack_config_properties_mapper.js | 42 +-
ambari-web/app/mappers/configs/themes_mapper.js | 2 +-
.../app/mixins/common/configs/configs_saver.js | 2 +
.../mixins/common/configs/enhanced_configs.js | 10 +-
.../main/service/configs/config_overridable.js | 12 +-
.../app/models/configs/stack_config_property.js | 9 +-
ambari-web/app/routes/add_service_routes.js | 1 -
ambari-web/app/routes/installer.js | 5 +-
ambari-web/app/utils/ajax/ajax.js | 5 +
ambari-web/app/utils/config.js | 992 ++++++-------------
.../app/views/common/configs/services_config.js | 4 +-
ambari-web/app/views/common/controls_view.js | 2 +-
.../common/modal_popups/select_groups_popup.js | 6 +-
.../views/main/admin/serviceAccounts_view.js | 5 +-
.../main/service/info/config_test.js | 93 +-
.../test/controllers/wizard/step7_test.js | 37 +-
ambari-web/test/controllers/wizard_test.js | 43 -
ambari-web/test/utils/config_test.js | 863 ++++++++--------
27 files changed, 1071 insertions(+), 1751 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/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 e4a74c0..b9d9711 100644
--- a/ambari-web/app/controllers/global/cluster_controller.js
+++ b/ambari-web/app/controllers/global/cluster_controller.js
@@ -216,7 +216,9 @@ App.ClusterController = Em.Controller.extend({
updater.updateServices(function () {
self.updateLoadStatus('services');
App.config.loadConfigsFromStack(App.Service.find().mapProperty('serviceName')).complete(function () {
- self.set('isConfigsPropertiesLoaded', true);
+ App.config.loadClusterConfigsFromStack().complete(function() {
+ self.set('isConfigsPropertiesLoaded', true);
+ });
});
// service metrics loading doesn't affect overall progress
updater.updateServiceMetric(function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/controllers/main/admin/kerberos/step2_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/kerberos/step2_controller.js b/ambari-web/app/controllers/main/admin/kerberos/step2_controller.js
index 332da6a..083e0c0 100644
--- a/ambari-web/app/controllers/main/admin/kerberos/step2_controller.js
+++ b/ambari-web/app/controllers/main/admin/kerberos/step2_controller.js
@@ -72,6 +72,10 @@ App.KerberosWizardStep2Controller = App.WizardStep7Controller.extend({
},
+ isConfigsLoaded: function () {
+ return this.get('wizardController.stackConfigsLoaded');
+ }.property('wizardController.stackConfigsLoaded'),
+
/**
* On load function
* @method loadStep
@@ -82,18 +86,12 @@ App.KerberosWizardStep2Controller = App.WizardStep7Controller.extend({
return;
}
this.clearStep();
- //STEP 1: Load advanced configs
- var advancedConfigs = this.get('content.advancedServiceConfig');
//STEP 2: Load on-site configs by service from local DB
var storedConfigs = this.get('content.serviceConfigProperties');
//STEP 3: Merge pre-defined configs with loaded on-site configs
- this.set('configs', App.config.mergePreDefinedWithStored(
- storedConfigs,
- advancedConfigs,
- this.get('selectedServiceNames')));
+ this.set('configs', App.config.mergePreDefinedWithStack(this.get('selectedServiceNames')));
App.config.setPreDefinedServiceConfigs(this.get('addMiscTabToPage'));
- //STEP 4: Add advanced configs
- App.config.addAdvancedConfigs(this.get('configs'), advancedConfigs);
+
this.filterConfigs(this.get('configs'));
this.applyServicesConfigs(this.get('configs'), storedConfigs);
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/controllers/main/admin/kerberos/wizard_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/kerberos/wizard_controller.js b/ambari-web/app/controllers/main/admin/kerberos/wizard_controller.js
index e66d6c7..5096602 100644
--- a/ambari-web/app/controllers/main/admin/kerberos/wizard_controller.js
+++ b/ambari-web/app/controllers/main/admin/kerberos/wizard_controller.js
@@ -30,6 +30,7 @@ App.KerberosWizardController = App.WizardController.extend({
isKerberosWizard: true,
+ stackConfigsLoaded: false,
/**
* Used for hiding back button in wizard
*/
@@ -153,21 +154,6 @@ App.KerberosWizardController = App.WizardController.extend({
this.set('content.serviceConfigProperties', serviceConfigProperties);
},
- /**
- * load advanced configs from server
- */
- loadAdvancedConfigs: function (dependentController) {
- var self = this;
- var loadAdvancedConfigResult = [];
- dependentController.set('isAdvancedConfigLoaded', false);
- var serviceName = this.get('content.serviceName');
- App.config.loadAdvancedConfig(serviceName, function (properties) {
- loadAdvancedConfigResult.pushObjects(properties);
- self.set('content.advancedServiceConfig', loadAdvancedConfigResult);
- dependentController.set('isAdvancedConfigLoaded', true);
- });
- },
-
loadKerberosDescriptorConfigs: function () {
var kerberosDescriptorConfigs = this.getDBProperty('kerberosDescriptorConfigs');
this.set('kerberosDescriptorConfigs', kerberosDescriptorConfigs);
@@ -268,9 +254,13 @@ App.KerberosWizardController = App.WizardController.extend({
{
type: 'sync',
callback: function () {
- var kerberosStep2controller = App.get('router.kerberosWizardStep2Controller');
- this.loadAdvancedConfigs(kerberosStep2controller);
+ var self = this;
this.loadServiceConfigProperties();
+ if (!this.get('stackConfigsLoaded')) {
+ App.config.loadConfigsFromStack(['KERBEROS']).complete(function() {
+ self.set('stackConfigsLoaded', true);
+ }, this);
+ }
}
}
],
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/controllers/main/admin/serviceAccounts_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/serviceAccounts_controller.js b/ambari-web/app/controllers/main/admin/serviceAccounts_controller.js
index 3fcb1df..8629d67 100644
--- a/ambari-web/app/controllers/main/admin/serviceAccounts_controller.js
+++ b/ambari-web/app/controllers/main/admin/serviceAccounts_controller.js
@@ -45,9 +45,7 @@ App.MainAdminServiceAccountsController = App.MainServiceInfoConfigsController.ex
},
loadServiceTagSuccess: function (data, opt, params) {
var self = this;
- var installedServices = App.Service.find().mapProperty("serviceName");
var serviceConfigsDef = params.serviceConfigsDef;
- var serviceName = this.get('selectedService');
var loadedClusterSiteToTagMap = {};
for (var site in Em.get(data, 'Clusters.desired_configs')) {
@@ -58,15 +56,7 @@ App.MainAdminServiceAccountsController = App.MainServiceInfoConfigsController.ex
this.setServiceConfigTags(loadedClusterSiteToTagMap);
// load server stored configurations
App.router.get('configurationController').getConfigsByTags(this.get('serviceConfigTags')).done(function (serverConfigs) {
- // load configurations list for installed services
- App.config.loadAdvancedConfigPartial(installedServices, {
- queryFilter: 'configurations/StackConfigurations/property_type.matches(.*[USER,GROUP].*)'
- }, function(advancedConfigs) {
- // load cluster configs
- App.config.loadClusterConfig(function(clusterConfigs) {
- self.createConfigObject(serverConfigs, advancedConfigs.concat(clusterConfigs));
- });
- });
+ self.createConfigObject(serverConfigs);
});
},
@@ -111,11 +101,10 @@ App.MainAdminServiceAccountsController = App.MainServiceInfoConfigsController.ex
* Generate configuration object that will be rendered
*
* @param {Object[]} serverConfigs
- * @param {Object[]} advancedConfigs
*/
- createConfigObject: function(serverConfigs, advancedConfigs) {
- var configSet = App.config.mergePreDefinedWithLoaded(serverConfigs, advancedConfigs, this.get('serviceConfigTags'), this.get('selectedService'));
- var miscConfigs = configSet.configs.filterProperty('serviceName', this.get('selectedService')).filterProperty('category', 'Users and Groups').filterProperty('isVisible', true).rejectProperty('displayType', 'password').rejectProperty('displayType', 'checkbox');
+ createConfigObject: function(serverConfigs) {
+ var configs = App.config.mergePredefinedWithSaved(serverConfigs, this.get('selectedService'));
+ var miscConfigs = configs.filterProperty('displayType', 'user').filterProperty('category', 'Users and Groups').filterProperty('isVisible', true);
miscConfigs = App.config.miscConfigVisibleProperty(miscConfigs, App.Service.find().mapProperty('serviceName').concat('MISC'));
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/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 ce06786..ca2500f 100644
--- a/ambari-web/app/controllers/main/service/info/configs.js
+++ b/ambari-web/app/controllers/main/service/info/configs.js
@@ -106,16 +106,6 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ConfigsLoader, A
}.property('content.serviceName', 'dependentServiceNames'),
/**
- * configs from stack for dependent services
- * @type {App.StackConfigProperty[]}
- */
- advancedConfigs: function() {
- return App.StackConfigProperty.find().filter(function(scp) {
- return this.get('servicesToLoad').contains(scp.get('serviceName'));
- }, this);
- }.property('content.serviceName', 'App.router.clusterController.isStackConfigsLoaded'),
-
- /**
* @type {boolean}
*/
isCurrentSelected: function () {
@@ -134,10 +124,6 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ConfigsLoader, A
return App.config.get('preDefinedServiceConfigs');
}.property('App.config.preDefinedServiceConfigs'),
- configMapping: function () {
- return App.config.get('configMapping');
- }.property('App.config.configMapping'),
-
configs: function () {
return App.config.get('preDefinedSiteProperties');
}.property('App.config.preDefinedSiteProperties'),
@@ -213,6 +199,20 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ConfigsLoader, A
],
/**
+ * get array of config proerties that are shown in settings tab
+ * @type {App.StackConfigProperty[]}
+ */
+ settingsTabProperties: function() {
+ var properties = [];
+ App.Tab.find(this.get('content.serviceName') + '_settings').get('sections').forEach(function(s) {
+ s.get('subSections').forEach(function(ss) {
+ properties = properties.concat(ss.get('configProperties').filterProperty('id'));
+ });
+ });
+ return properties;
+ }.property('content.serviceName', 'App.router.clusterController.isStackConfigsLoaded'),
+
+ /**
* Dropdown menu items in filter combobox
* @type {{attributeName: string, attributeValue: string, name: string, selected: boolean}[]}
*/
@@ -366,8 +366,8 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ConfigsLoader, A
});
}
});
- var configs = App.config.mergePredefinedWithSaved(configGroups, this.get('advancedConfigs'), serviceName, this.get('selectedConfigGroup'), this.get('canEdit'));
- configs = App.config.syncOrderWithPredefined(configs);
+ var configs = App.config.mergePredefinedWithSaved(configGroups, serviceName, this.get('selectedConfigGroup'), this.get('canEdit'));
+ configs = App.config.sortConfigs(configs);
/**
* if property defined in stack but somehow it missed from cluster properties (can be after stack upgrade)
* ui should add this properties to step configs
@@ -376,7 +376,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ConfigsLoader, A
//put properties from capacity-scheduler.xml into one config with textarea view
if (this.get('content.serviceName') === 'YARN') {
- var configsToSkip = this.get('advancedConfigs').filterProperty('filename', 'capacity-scheduler.xml').filterProperty('subSection');
+ var configsToSkip = this.get('settingsTabProperties').filterProperty('filename', 'capacity-scheduler.xml');
configs = App.config.fileConfigsIntoTextarea(configs, 'capacity-scheduler.xml', configsToSkip);
}
@@ -386,9 +386,10 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ConfigsLoader, A
configs.findProperty('name', 'kdc_host').set('isRequired', false).set('isVisible', false);
configs.findProperty('name', 'admin_server_host').set('isRequired', false).set('isVisible', false);
configs.findProperty('name', 'domains').set('isRequired', false).set('isVisible', false);
+ } else if (kdc_type.get('value') === 'active-directory') {
+ configs.findProperty('name', 'container_dn').set('isVisible', true);
+ configs.findProperty('name', 'ldap_url').set('isVisible', true);
}
-
- kdc_type.set('value', App.router.get('mainAdminKerberosController.kdcTypesValues')[kdc_type.get('value')]);
}
this.set('allConfigs', configs);
@@ -397,26 +398,6 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ConfigsLoader, A
},
/**
- * revert certain config values to their innital value
- * i.e. don't save the KDC Type as "Existing MIT KDC", instead save it as mit-kdc
- */
- configValueRevert: function () {
- var stepConfigs = this.get('stepConfigs').findProperty('serviceName', this.get('content.serviceName'));
- if (!stepConfigs) { return; }
-
- var configs = stepConfigs.configs;
- if (configs) {
- var kdc_type = configs.findProperty('name', 'kdc_type');
-
- if (!kdc_type) { return; };
- if (App.router.get('mainAdminKerberosController.kdcTypesValues')[kdc_type.get('value')]) { return; }
-
- kdc_type.set('value', kdc_type.get('savedValue'));
- }
-
- }.observes('saveInProgress'),
-
- /**
* adds properties form stack that doesn't belong to cluster
* to step configs
* also set recommended value if isn't exists
@@ -424,14 +405,9 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ConfigsLoader, A
* @return {App.ServiceConfigProperty[]}
* @method mergeWithStackProperties
*/
- mergeWithStackProperties: function(configs) {
- this.get('advancedConfigs').forEach(function(advanced) {
- var c = configs.findProperty('name', advanced.get('name'));
- if (c) {
- if (!c.get('recommendedValue')) {
- c.set('recommendedValue', advanced.get('value'));
- }
- } else if (advanced.get('widget')) {
+ mergeWithStackProperties: function (configs) {
+ this.get('settingsTabProperties').forEach(function (advanced) {
+ if (!configs.someProperty('name', advanced.get('name'))) {
configs.pushObject(App.ServiceConfigProperty.create({
name: advanced.get('name'),
displayName: advanced.get('displayName'),
@@ -467,12 +443,14 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ConfigsLoader, A
if (serviceConfig) {
if (self.get('selectedConfigGroup.isDefault') || configGroup.get('name') == self.get('selectedConfigGroup.name')) {
- var override = self.createNewSCP({"value": value, "isFinal": isFinal, "group": configGroup}, serviceConfig, self.get('selectedConfigGroup.isDefault'));
- override.set('isEditable', self.get('canEdit') && configGroup.get('name') == self.get('selectedConfigGroup.name'));
- if (!serviceConfig.get('overrides')) serviceConfig.set('overrides', []);
- serviceConfig.get('overrides').pushObject(override);
- serviceConfig.set('overrideValues', serviceConfig.get('overrides').mapProperty('value'));
- serviceConfig.set('overrideIsFinalValues', serviceConfig.get('overrides').mapProperty('isFinal'));
+ var overridePlainObject = {
+ "value": value,
+ "savedValue": value,
+ "isFinal": isFinal,
+ "savedIsFinal": isFinal,
+ "isEditable": self.get('canEdit') && configGroup.get('name') == self.get('selectedConfigGroup.name')
+ };
+ App.config.createOverride(serviceConfig, overridePlainObject, configGroup);
}
} else {
var isEditable = self.get('canEdit') && configGroup.get('name') == self.get('selectedConfigGroup.name');
@@ -630,187 +608,33 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ConfigsLoader, A
},
/**
- * trigger addOverrideProperty
- * @param {Object[]} configs
+ * trigger App.config.createOverride
+ * @param {Object[]} stepConfig
* @private
* @method checkOverrideProperty
*/
- checkOverrideProperty: function (componentConfig) {
+ checkOverrideProperty: function (stepConfig) {
var overrideToAdd = this.get('overrideToAdd');
- var value = Em.get(overrideToAdd, 'value');
- var isEnhanced = !!this.get('overrideToAdd.widget');
+ var value = !!this.get('overrideToAdd.widget') ? Em.get(overrideToAdd, 'value') : '';
if (overrideToAdd) {
- overrideToAdd = componentConfig.configs.filter(function(c){
+ overrideToAdd = stepConfig.configs.filter(function(c){
return c.name == overrideToAdd.name && c.filename == overrideToAdd.filename;
});
if (overrideToAdd[0]) {
- this.addOverrideProperty(overrideToAdd[0], this.get('selectedConfigGroup'), isEnhanced ? value : null);
+ App.config.createOverride(overrideToAdd[0], {"isEditable": true, "value": value}, this.get('selectedConfigGroup'));
this.set('overrideToAdd', null);
}
}
},
/**
- * create new overridden property and set appropriate fields
- * @param override
- * @param serviceConfigProperty
- * @param defaultGroupSelected
- * @returns {*}
- * @private
- * @method createNewSCP
- */
- createNewSCP: function (override, serviceConfigProperty, defaultGroupSelected) {
- var newSCP = App.ServiceConfigProperty.create(serviceConfigProperty, {
- value: Em.get(override, 'value'),
- savedValue: Em.get(override, 'value'),
- recommendedValue: serviceConfigProperty.get('recommendedValue'),
- isFinal: Em.get(override, 'isFinal'),
- savedIsFinal: Em.get(override, 'isFinal'),
- recommendedIsFinal: serviceConfigProperty.get('recommendedIsFinal'),
- group: Em.get(override, 'group'),
- supportsFinal: serviceConfigProperty.get('supportsFinal'),
- isOriginalSCP: false,
- parentSCP: serviceConfigProperty,
- overrides: null
- });
- if (defaultGroupSelected) {
- newSCP.set('isEditable', false);
- }
- newSCP.validate();
- return newSCP;
- },
-
- /**
- * Array of Objects
- * {
- * hostProperty - hostName property name for current component
- * componentName - master componentName
- * serviceName - serviceName of component
- * serviceUseThis - services that use hostname property of component(componentName)
- * m(multiple) - true if can be more than one components installed on cluster
- * }
- */
-
- hostComponentsMapping: [
- {
- hostProperty: 'snamenode_host',
- componentName: 'SECONDARY_NAMENODE',
- serviceName: 'HDFS',
- serviceUseThis: []
- },
- {
- hostProperty: 'jobtracker_host',
- componentName: 'JOBTRACKER',
- serviceName: 'MAPREDUCE2',
- serviceUseThis: []
- },
- {
- hostProperty: 'hs_host',
- componentName: 'HISTORYSERVER',
- serviceName: 'MAPREDUCE2',
- serviceUseThis: ['YARN']
- },
- {
- hostProperty: 'ats_host',
- componentName: 'APP_TIMELINE_SERVER',
- serviceName: 'YARN',
- serviceUseThis: []
- },
- {
- hostProperty: 'rm_host',
- componentName: 'RESOURCEMANAGER',
- serviceName: 'YARN',
- serviceUseThis: []
- },
- {
- hostProperty: 'hivemetastore_host',
- componentName: 'HIVE_METASTORE',
- serviceName: 'HIVE',
- serviceUseThis: ['HIVE'],
- m: true
- },
- {
- hostProperty: 'hive_ambari_host',
- componentName: 'HIVE_SERVER',
- serviceName: 'HIVE',
- serviceUseThis: []
- },
- {
- hostProperty: 'oozieserver_host',
- componentName: 'OOZIE_SERVER',
- serviceName: 'OOZIE',
- serviceUseThis: [],
- m: true
- },
- {
- hostProperty: 'oozie_ambari_host',
- componentName: 'OOZIE_SERVER',
- serviceName: 'OOZIE',
- serviceUseThis: []
- },
- {
- hostProperty: 'hbasemaster_host',
- componentName: 'HBASE_MASTER',
- serviceName: 'HBASE',
- serviceUseThis: [],
- m: true
- },
- {
- hostProperty: 'webhcatserver_host',
- componentName: 'WEBHCAT_SERVER',
- serviceName: 'HIVE',
- serviceUseThis: [],
- m: true
- },
- {
- hostProperty: 'zookeeperserver_hosts',
- componentName: 'ZOOKEEPER_SERVER',
- serviceName: 'ZOOKEEPER',
- serviceUseThis: ['HBASE', 'HIVE'],
- m: true
- },
- {
- hostProperty: 'stormuiserver_host',
- componentName: 'STORM_UI_SERVER',
- serviceName: 'STORM',
- serviceUseThis: []
- },
- {
- hostProperty: 'drpcserver_host',
- componentName: 'DRPC_SERVER',
- serviceName: 'STORM',
- serviceUseThis: []
- },
- {
- hostProperty: 'storm_rest_api_host',
- componentName: 'STORM_REST_API',
- serviceName: 'STORM',
- serviceUseThis: []
- },
- {
- hostProperty: 'supervisor_hosts',
- componentName: 'SUPERVISOR',
- serviceName: 'STORM',
- serviceUseThis: [],
- m: true
- },
- {
- hostProperty: 'rangerserver_host',
- componentName: 'RANGER_ADMIN',
- serviceName: 'RANGER',
- serviceUseThis: [],
- m: true
- }
- ],
-
- /**
* Adds host name of master component to config
* @private
* @method addHostNamesToGlobalConfig
*/
addHostNamesToConfig: function () {
var serviceName = this.get('content.serviceName');
- var configs = this.get('allConfigs');
+ var hostComponentMapping = require('data/host_component_mapping');
//namenode_host is required to derive "fs.default.name" a property of core-site
try {
this.setHostForService('HDFS', 'NAMENODE', 'namenode_host', true);
@@ -818,7 +642,7 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ConfigsLoader, A
console.log("No NameNode Host available. This is expected if you're using GLUSTERFS rather than HDFS.");
}
- var hostProperties = this.get('hostComponentsMapping').filter(function (h) {
+ var hostProperties = hostComponentMapping.filter(function (h) {
return h.serviceUseThis.contains(serviceName) || h.serviceName == serviceName;
});
hostProperties.forEach(function (h) {
@@ -961,39 +785,6 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ConfigsLoader, A
},
/**
- * add new overridden property to config property object
- * @param {object} serviceConfigProperty - config property object
- * @param {App.ConfigGroup} group - config group for new property
- * @param {String} value
- * @param {boolean} isNotSaved TODO
- * @method addOverrideProperty
- */
- addOverrideProperty: function (serviceConfigProperty, group, value, isNotSaved) {
- if (serviceConfigProperty.get('isOriginalSCP')) {
- var overrides = serviceConfigProperty.get('overrides');
- if (!overrides) {
- overrides = [];
- serviceConfigProperty.set('overrides', overrides);
- }
- // create new override with new value
- var newSCP = App.ServiceConfigProperty.create(serviceConfigProperty, {
- value: value || '',
- recommendedValue: serviceConfigProperty.get('recommendedValue'),
- recommendedIsFinal: serviceConfigProperty.get('recommendedIsFinal'),
- isOriginalSCP: false,
- parentSCP: serviceConfigProperty,
- isEditable: true,
- group: group,
- overrides: null,
- isNotSaved: isNotSaved
- });
- console.debug("createOverrideProperty(): Added:", newSCP, " to main-property:", serviceConfigProperty);
- newSCP.validate();
- overrides.pushObject(newSCP);
- }
- },
-
- /**
* trigger manageConfigurationGroups
* @method manageConfigurationGroup
*/
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/controllers/wizard.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard.js b/ambari-web/app/controllers/wizard.js
index c34cad9..0cc8e74 100644
--- a/ambari-web/app/controllers/wizard.js
+++ b/ambari-web/app/controllers/wizard.js
@@ -833,43 +833,6 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, App.ThemesMappingM
},
/**
- * load advanced configs from server
- */
- loadAdvancedConfigs: function (dependentController) {
- var self = this;
- var loadServiceConfigsFn = function (clusterProperties) {
- var stackServices = self.get('content.services').filter(function (service) {
- return service.get('isInstalled') || service.get('isSelected');
- });
- var loadAdvancedConfigResult = [];
- dependentController.set('isAdvancedConfigLoaded', false);
-
- App.config.loadAdvancedConfigAll(stackServices.mapProperty('serviceName'), function (configMap) {
- stackServices.forEach(function (service) {
- var serviceName = service.get('serviceName');
- var properties = configMap[serviceName];
- var supportsFinal = App.config.getConfigTypesInfoFromService(service).supportsFinal;
-
- properties.forEach(function (property) {
- property.supportsFinal = Boolean(supportsFinal.find(function (configType) {
- return property.filename.startsWith(configType);
- }));
- if (property.serviceName == 'MISC' && property.name == 'yarn_user') {
- property.supportsFinal = false;
- }
- });
- loadAdvancedConfigResult.pushObjects(properties);
- });
- loadAdvancedConfigResult.pushObjects(clusterProperties);
- self.set('content.advancedServiceConfig', loadAdvancedConfigResult);
- dependentController.set('isAdvancedConfigLoaded', true);
- });
- };
- App.config.loadClusterConfig(loadServiceConfigsFn);
- },
-
-
- /**
* Load serviceConfigProperties to model
*/
loadServiceConfigProperties: function () {
@@ -891,29 +854,8 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, App.ThemesMappingM
}
_content.get('configs').forEach(function (_configProperties) {
- var configProperty = {
- id: _configProperties.get('id'),
- name: _configProperties.get('name'),
- displayName: _configProperties.get('displayName'),
- value: _configProperties.get('value'),
- savedValue: _configProperties.get('savedValue'),
- recommendedValue: _configProperties.get('recommendedValue'),
- description: _configProperties.get('description'),
- serviceName: _configProperties.get('serviceName'),
- domain: _configProperties.get('domain'),
- isVisible: _configProperties.get('isVisible'),
- isFinal: _configProperties.get('isFinal'),
- recommendedIsFinal: _configProperties.get('isFinal'),
- supportsFinal: _configProperties.get('supportsFinal'),
- filename: _configProperties.get('filename'),
- displayType: _configProperties.get('displayType'),
- isRequiredByAgent: _configProperties.get('isRequiredByAgent'),
- hasInitialValue: !!_configProperties.get('hasInitialValue'),
- isRequired: _configProperties.get('isRequired'), // flag that allow saving property with empty value
- group: !!_configProperties.get('group') ? _configProperties.get('group.name') : null,
- showLabel: _configProperties.get('showLabel'),
- category: _configProperties.get('category')
- };
+ var configProperty = App.config.createDefaultConfig(_configProperties.get('name'), _configProperties.get('filename'), _configProperties.get('isUserProperty'), {value: _configProperties.get('value')});
+ configProperty = App.config.mergeStaticProperties(configProperty, _configProperties, ['name', 'filename']);
if (this.isExcludedConfig(configProperty)) {
configProperty.value = '';
@@ -1248,11 +1190,13 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, App.ThemesMappingM
return s.get('isSelected') || s.get('isInstalled');
}).mapProperty('serviceName');
// Load stack configs before loading themes
- App.config.loadConfigsFromStack(serviceNames).done(function () {
- self.loadConfigThemeForServices(serviceNames).always(function () {
- self.set('stackConfigsLoaded', true);
- App.themesMapper.generateAdvancedTabs(serviceNames);
- dfd.resolve();
+ App.config.loadClusterConfigsFromStack().always(function() {
+ App.config.loadConfigsFromStack(serviceNames).done(function () {
+ self.loadConfigThemeForServices(serviceNames).always(function () {
+ self.set('stackConfigsLoaded', true);
+ App.themesMapper.generateAdvancedTabs(serviceNames);
+ dfd.resolve();
+ });
});
});
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/controllers/wizard/step7_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard/step7_controller.js b/ambari-web/app/controllers/wizard/step7_controller.js
index 67fb944..1d3eea4 100644
--- a/ambari-web/app/controllers/wizard/step7_controller.js
+++ b/ambari-web/app/controllers/wizard/step7_controller.js
@@ -106,20 +106,14 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
serviceConfigTags: [],
/**
- * Are advanced configs loaded
- * @type {bool}
- */
- isAdvancedConfigLoaded: true,
-
- /**
* Are applied to service configs loaded
* @type {bool}
*/
isAppliedConfigLoaded: true,
isConfigsLoaded: function () {
- return (this.get('isAdvancedConfigLoaded') && this.get('isAppliedConfigLoaded'));
- }.property('isAdvancedConfigLoaded', 'isAppliedConfigLoaded'),
+ return (this.get('wizardController.stackConfigsLoaded') && this.get('isAppliedConfigLoaded'));
+ }.property('wizardController.stackConfigsLoaded', 'isAppliedConfigLoaded'),
/**
* Number of errors in the configs in the selected service
@@ -540,7 +534,9 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
if (overrideToAdd) {
overrideToAdd = componentConfig.get('configs').findProperty('name', overrideToAdd.name);
if (overrideToAdd) {
- this.addOverrideProperty(overrideToAdd);
+ var group = this.get('selectedService.configGroups').findProperty('name', this.get('selectedConfigGroup.name'));
+ var newSCP = App.config.createOverride(overrideToAdd, {isEditable: true}, group);
+ group.get('properties').pushObject(newSCP);
component.set('overrideToAdd', null);
}
}
@@ -624,19 +620,12 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
this.clearStep();
var self = this;
- //STEP 1: Load advanced configs
- var advancedConfigs = this.get('content.advancedServiceConfig');
//STEP 2: Load on-site configs by service from local DB
var storedConfigs = this.get('content.serviceConfigProperties');
//STEP 3: Merge pre-defined configs with loaded on-site configs
- var configs = App.config.mergePreDefinedWithStored(
- storedConfigs,
- advancedConfigs,
- this.get('selectedServiceNames').concat(this.get('installedServiceNames'))
- );
+ var configs = (storedConfigs && storedConfigs.length) ? storedConfigs
+ : App.config.mergePreDefinedWithStack(this.get('selectedServiceNames').concat(this.get('installedServiceNames')));
App.config.setPreDefinedServiceConfigs(this.get('addMiscTabToPage'));
- //STEP 4: Add advanced configs
- App.config.addAdvancedConfigs(configs, advancedConfigs);
this.set('groupsToDelete', this.get('wizardController').getDBProperty('groupsToDelete') || []);
if (this.get('wizardController.name') === 'addServiceController') {
@@ -668,51 +657,37 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
this.activateSpecialConfigs();
this.selectProperService();
var self = this;
- this.loadServerSideConfigsRecommendations().always(function () {
- // format descriptor configs
- var serviceConfigPropertiesNames = (self.get('content.serviceConfigProperties') || []).mapProperty('name'),
- serviceConfigPropertiesFileNames = (self.get('content.serviceConfigProperties') || []).mapProperty('filename'),
- recommendedToDelete = self.get('_dependentConfigValues').filterProperty('toDelete');
- recommendedToDelete.forEach(function (c) {
- var name = Em.get(c, 'propertyName'),
- filename = Em.get(c, 'fileName');
- if (serviceConfigPropertiesNames.contains(name) && serviceConfigPropertiesFileNames.contains(filename)) {
- Em.set(c, 'toDelete', false);
- }
- });
-
- var rangerService = App.StackService.find().findProperty('serviceName', 'RANGER');
- if (rangerService && !rangerService.get('isInstalled') && !rangerService.get('isSelected')) {
- App.config.removeRangerConfigs(self.get('stepConfigs'));
- }
- if (!self.get('content.serviceConfigProperties.length')) {
- // for Add Service just remove or add dependent properties and ignore config values changes
- // for installed services only
+ var rangerService = App.StackService.find().findProperty('serviceName', 'RANGER');
+ if (rangerService && !rangerService.get('isInstalled') && !rangerService.get('isSelected')) {
+ App.config.removeRangerConfigs(self.get('stepConfigs'));
+ }
+ if (this.get('content.serviceConfigProperties.length') > 0) {
+ this.completeConfigLoading();
+ } else {
+ this.loadServerSideConfigsRecommendations().always(function () {
if (self.get('wizardController.name') == 'addServiceController') {
+ // for Add Service just remove or add dependent properties and ignore config values changes
+ // for installed services only
self.addRemoveDependentConfigs(self.get('installedServiceNames'));
self.clearDependenciesForInstalledServices(self.get('installedServiceNames'), self.get('stepConfigs'));
}
// * add dependencies based on recommendations
// * update config values with recommended
- // * remove properties recieved from recommendations
+ // * remove properties received from recommendations
self.updateDependentConfigs();
- } else {
- // control flow for managing dependencies for stored configs,
- // * Don't update values with recommended to save user's input
- // * add dependencies based on user's input for parent configs
- // * remove dependencies based on user's input for parent configs
- self.addRemoveDependentConfigs();
- }
- self.restoreRecommendedConfigs();
- self.clearDependentConfigsByService(App.StackService.find().filterProperty('isSelected').mapProperty('serviceName'));
- self.set('isRecommendedLoaded', true);
- if (self.get('content.skipConfigStep')) {
- App.router.send('next');
- }
- self.set('hash', self.getHash());
- });
+ self.completeConfigLoading();
+ });
+ }
},
+ completeConfigLoading: function() {
+ this.clearDependentConfigsByService(App.StackService.find().filterProperty('isSelected').mapProperty('serviceName'));
+ this.set('isRecommendedLoaded', true);
+ if (this.get('content.skipConfigStep')) {
+ App.router.send('next');
+ }
+ this.set('hash', this.getHash());
+ },
/**
* After user navigates back to step7, values for depended configs should be set to values set by user and not to default values
* @method restoreRecommendedConfigs
@@ -1178,7 +1153,11 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
configOverrides = overrides.filterProperty('name', config.get('name'));
if (!selectedGroup) return config;
if (overrideToAdd && overrideToAdd.get('name') === config.get('name')) {
- configOverrides.push(this.addOverrideProperty(config));
+ var valueForOverride = (config.get('widget') || config.get('displayType') == 'checkbox') ? config.get('value') : '';
+ var group = this.get('selectedService.configGroups').findProperty('name', selectedGroup.get('name'));
+ var newSCP = App.config.createOverride(config, {value: valueForOverride, recommendedValue: valueForOverride}, group);
+ configOverrides.push(newSCP);
+ group.get('properties').pushObject(newSCP);
this.set('overrideToAdd', null);
}
configOverrides.setEach('isEditable', !selectedGroup.get('isDefault'));
@@ -1188,34 +1167,6 @@ App.WizardStep7Controller = Em.Controller.extend(App.ServerValidatorMixin, App.E
},
/**
- * create overriden property and push it into Config group
- * @param serviceConfigProperty
- * @param group
- * @param value
- * @param isNotSaved
- * @param {App.ServiceConfigProperty} serviceConfigProperty
- * @return {App.ServiceConfigProperty}
- * @method addOverrideProperty
- */
- addOverrideProperty: function (serviceConfigProperty, group, value, isNotSaved) {
- var overrides = serviceConfigProperty.get('overrides') || [];
- var newSCP = App.ServiceConfigProperty.create(serviceConfigProperty);
- group = group || this.get('selectedService.configGroups').findProperty('name', this.get('selectedConfigGroup.name'));
- var valueForOverride = (serviceConfigProperty.get('widget') || serviceConfigProperty.get('displayType') == 'checkbox') ? serviceConfigProperty.get('value') : '';
- newSCP.set('group', group);
- newSCP.set('value', value || valueForOverride);
- newSCP.set('recommendedValue', value || valueForOverride);
- newSCP.set('isOriginalSCP', false); // indicated this is overridden value,
- newSCP.set('parentSCP', serviceConfigProperty);
- newSCP.set('isEditable', true);
- newSCP.set('isNotSaved', isNotSaved);
- group.get('properties').pushObject(newSCP);
- overrides.pushObject(newSCP);
- newSCP.validate();
- return newSCP;
- },
-
- /**
* @method manageConfigurationGroup
*/
manageConfigurationGroup: function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/data/HDP2.3/site_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2.3/site_properties.js b/ambari-web/app/data/HDP2.3/site_properties.js
index 152d58d..1babe76 100644
--- a/ambari-web/app/data/HDP2.3/site_properties.js
+++ b/ambari-web/app/data/HDP2.3/site_properties.js
@@ -41,7 +41,13 @@ var excludedConfigs = [
'xa_ldap_ad_domain',
'xa_ldap_ad_url',
'policymgr_http_enabled',
- 'policymgr_external_url'
+ 'policymgr_external_url',
+ 'hbase.regionserver.global.memstore.lowerLimit',
+ 'hbase.regionserver.global.memstore.upperLimit',
+ "port",
+ "hive.metastore.heapsize",
+ "hive.client.heapsize",
+ "SQL_COMMAND_INVOKER"
];
var hdp23properties = hdp22properties.filter(function (item) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/data/host_component_mapping.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/host_component_mapping.js b/ambari-web/app/data/host_component_mapping.js
new file mode 100644
index 0000000..be5f891
--- /dev/null
+++ b/ambari-web/app/data/host_component_mapping.js
@@ -0,0 +1,142 @@
+/**
+ * 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');
+
+/**
+ * Array of Objects
+ * {
+ * hostProperty - hostName property name for current component
+ * componentName - master componentName
+ * serviceName - serviceName of component
+ * serviceUseThis - services that use hostname property of component(componentName)
+ * m(multiple) - true if can be more than one components installed on cluster
+ * }
+ */
+
+module.exports = [
+ {
+ hostProperty: 'snamenode_host',
+ componentName: 'SECONDARY_NAMENODE',
+ serviceName: 'HDFS',
+ serviceUseThis: []
+ },
+ {
+ hostProperty: 'jobtracker_host',
+ componentName: 'JOBTRACKER',
+ serviceName: 'MAPREDUCE2',
+ serviceUseThis: []
+ },
+ {
+ hostProperty: 'hs_host',
+ componentName: 'HISTORYSERVER',
+ serviceName: 'MAPREDUCE2',
+ serviceUseThis: ['YARN']
+ },
+ {
+ hostProperty: 'ats_host',
+ componentName: 'APP_TIMELINE_SERVER',
+ serviceName: 'YARN',
+ serviceUseThis: []
+ },
+ {
+ hostProperty: 'rm_host',
+ componentName: 'RESOURCEMANAGER',
+ serviceName: 'YARN',
+ serviceUseThis: []
+ },
+ {
+ hostProperty: 'hivemetastore_host',
+ componentName: 'HIVE_METASTORE',
+ serviceName: 'HIVE',
+ serviceUseThis: ['HIVE'],
+ m: true
+ },
+ {
+ hostProperty: 'hive_ambari_host',
+ componentName: 'HIVE_SERVER',
+ serviceName: 'HIVE',
+ serviceUseThis: []
+ },
+ {
+ hostProperty: 'oozieserver_host',
+ componentName: 'OOZIE_SERVER',
+ serviceName: 'OOZIE',
+ serviceUseThis: [],
+ m: true
+ },
+ {
+ hostProperty: 'oozie_ambari_host',
+ componentName: 'OOZIE_SERVER',
+ serviceName: 'OOZIE',
+ serviceUseThis: []
+ },
+ {
+ hostProperty: 'hbasemaster_host',
+ componentName: 'HBASE_MASTER',
+ serviceName: 'HBASE',
+ serviceUseThis: [],
+ m: true
+ },
+ {
+ hostProperty: 'webhcatserver_host',
+ componentName: 'WEBHCAT_SERVER',
+ serviceName: 'HIVE',
+ serviceUseThis: [],
+ m: true
+ },
+ {
+ hostProperty: 'zookeeperserver_hosts',
+ componentName: 'ZOOKEEPER_SERVER',
+ serviceName: 'ZOOKEEPER',
+ serviceUseThis: ['HBASE', 'HIVE'],
+ m: true
+ },
+ {
+ hostProperty: 'stormuiserver_host',
+ componentName: 'STORM_UI_SERVER',
+ serviceName: 'STORM',
+ serviceUseThis: []
+ },
+ {
+ hostProperty: 'drpcserver_host',
+ componentName: 'DRPC_SERVER',
+ serviceName: 'STORM',
+ serviceUseThis: []
+ },
+ {
+ hostProperty: 'storm_rest_api_host',
+ componentName: 'STORM_REST_API',
+ serviceName: 'STORM',
+ serviceUseThis: []
+ },
+ {
+ hostProperty: 'supervisor_hosts',
+ componentName: 'SUPERVISOR',
+ serviceName: 'STORM',
+ serviceUseThis: [],
+ m: true
+ },
+ {
+ hostProperty: 'rangerserver_host',
+ componentName: 'RANGER_ADMIN',
+ serviceName: 'RANGER',
+ serviceUseThis: [],
+ m: true
+ }
+];
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/configs/stack_config_properties_mapper.js b/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
index 09f3cf9..e907020 100644
--- a/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
+++ b/ambari-web/app/mappers/configs/stack_config_properties_mapper.js
@@ -34,25 +34,34 @@ App.stackConfigPropertiesMapper = App.QuickDataMapper.create({
property_depended_by: 'StackConfigurations.property_depended_by',
property_depends_on: 'StackConfigurations.property_depends_on',
value_attributes: 'StackConfigurations.property_value_attributes',
- is_final: 'default_is_final',
- recommended_is_final: 'default_is_final',
+ is_final: 'recommended_is_final',
+ recommended_is_final: 'recommended_is_final',
supports_final: 'supports_final',
widget: 'widget',
/**** ui properties ***/
display_type: 'display_type',
- category: 'category'
+ category: 'category',
+ index: 'index'
},
map: function (json) {
- console.time('stackConfigMapper execution time');
+ console.time('stackConfigPropertiesMapper execution time');
+ if (json && json.Versions) {
+ //hack for cluster versions
+ json = {items: [json]};
+ var clusterConfigs = true;
+ }
if (json && json.items) {
var configs = [];
json.items.forEach(function(stackItem) {
- var configTypeInfo = Em.get(stackItem, 'StackServices.config_types');
+ var configTypeInfo = clusterConfigs ? Em.get(stackItem, 'Versions.config_types') : Em.get(stackItem, 'StackServices.config_types');
stackItem.configurations.forEach(function(config) {
+ if (clusterConfigs) {
+ config.StackConfigurations = config.StackLevelConfigurations;
+ }
var configType = App.config.getConfigTagFromFileName(config.StackConfigurations.type);
- config.id = config.StackConfigurations.property_name + '_' + configType;
+ config.id = App.config.configId(config.StackConfigurations.property_name, configType);
config.recommended_is_final = config.StackConfigurations.final === "true";
config.supports_final = !!configTypeInfo[configType] && configTypeInfo[configType].supports.final === "true";
// Map from /dependencies to property_depended_by
@@ -90,10 +99,10 @@ App.stackConfigPropertiesMapper = App.QuickDataMapper.create({
}, this);
App.store.loadMany(this.get('model'), configs);
}
- console.timeEnd('stackConfigMapper execution time');
+ console.timeEnd('stackConfigPropertiesMapper execution time');
},
- /******************* METHODS TO MERGE STACK PROPERTIES WITH STORED ON UI (NOT USED FOR NOW)*********************************/
+ /******************* METHODS TO MERGE STACK PROPERTIES WITH STORED ON UI *********************************/
/**
* find UI config with current name and fileName
@@ -102,13 +111,18 @@ App.stackConfigPropertiesMapper = App.QuickDataMapper.create({
* @method mergeWithUI
*/
mergeWithUI: function(config) {
- var uiConfigProperty = this.getUIConfig(config.StackConfigurations.property_name, config.StackConfigurations.type);
- var displayType = App.permit(App.config.advancedConfigIdentityData(config.StackConfigurations), 'displayType').displayType || 'string';
- if (!config.StackConfigurations.property_display_name) {
- config.StackConfigurations.property_display_name = uiConfigProperty && uiConfigProperty.displayName ? uiConfigProperty.displayName : config.StackConfigurations.property_name;
+ var c = config.StackConfigurations;
+ var uiConfigProperty = this.getUIConfig(c.property_name, c.type);
+ var advancedData = App.config.advancedConfigIdentityData(c);
+
+ if (!c.property_display_name) {
+ c.property_display_name = App.config.getPropertyIfExists('displayName', App.config.getDefaultDisplayName(c.property_name, c.type), advancedData, uiConfigProperty);
}
- config.category = uiConfigProperty ? uiConfigProperty.category : 'Advanced ' + App.config.getConfigTagFromFileName(config.StackConfigurations.type);
- config.display_type = uiConfigProperty ? uiConfigProperty.displayType || displayType : displayType;
+ c.service_name = App.config.getPropertyIfExists('serviceName', c.service_name, advancedData, uiConfigProperty);
+
+ config.category = App.config.getPropertyIfExists('category', App.config.getDefaultCategory(true, c.type), advancedData, uiConfigProperty);
+ config.display_type = App.config.getPropertyIfExists('displayType', App.config.getDefaultDisplayType(c.property_name, c.type, c.property_value), advancedData, uiConfigProperty);
+ config.index = App.config.getPropertyIfExists('index', null, advancedData, uiConfigProperty);
},
/**
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/mappers/configs/themes_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/configs/themes_mapper.js b/ambari-web/app/mappers/configs/themes_mapper.js
index eda0e52..e632860 100644
--- a/ambari-web/app/mappers/configs/themes_mapper.js
+++ b/ambari-web/app/mappers/configs/themes_mapper.js
@@ -164,7 +164,7 @@ App.themesMapper = App.QuickDataMapper.create({
getConfigId: function(json) {
if (json && json.config && typeof json.config === "string") {
var split = json.config.split("/");
- return split[1] + "_" + split[0];
+ return App.config.configId(split[1], split[0]);
} else {
console.warn('getConfigId: invalid input data');
return null;
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/mixins/common/configs/configs_saver.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/configs/configs_saver.js b/ambari-web/app/mixins/common/configs/configs_saver.js
index b00a28e..252229c 100644
--- a/ambari-web/app/mixins/common/configs/configs_saver.js
+++ b/ambari-web/app/mixins/common/configs/configs_saver.js
@@ -555,6 +555,8 @@ App.ConfigsSaverMixin = Em.Mixin.create({
return property.get('value').toString();
}
switch (name) {
+ case 'kdc_type':
+ return App.router.get('mainAdminKerberosController.kdcTypesValues')[property.get('value')];
case 'storm.zookeeper.servers':
case 'nimbus.seeds':
if (Em.isArray(value)) {
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/mixins/common/configs/enhanced_configs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/common/configs/enhanced_configs.js b/ambari-web/app/mixins/common/configs/enhanced_configs.js
index 5e5f653..b08e7b2 100644
--- a/ambari-web/app/mixins/common/configs/enhanced_configs.js
+++ b/ambari-web/app/mixins/common/configs/enhanced_configs.js
@@ -555,7 +555,7 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
var properties = configs[siteName].property_attributes || {};
Em.keys(properties).forEach(function (propertyName) {
var cp = configProperties.findProperty('name', propertyName);
- var stackProperty = App.StackConfigProperty.find().findProperty('id', propertyName + '_' + siteName);
+ var stackProperty = App.StackConfigProperty.find().findProperty('id', App.config.configId(propertyName, siteName));
var attributes = properties[propertyName] || {};
Em.keys(attributes).forEach(function (attributeName) {
if (attributeName == 'delete') {
@@ -684,7 +684,13 @@ App.EnhancedConfigsMixin = Em.Mixin.create({
overriddenProperty.set('value', Em.get(propertyToAdd, 'recommendedValue'));
overriddenProperty.set('recommendedValue', Em.get(propertyToAdd, 'recommendedValue'));
} else {
- this.addOverrideProperty(cp, selectedGroup, Em.get(propertyToAdd, 'recommendedValue'), !Em.get(propertyToAdd, 'isDeleted'));
+ var overridePlainObject = {
+ "value": Em.get(propertyToAdd, 'recommendedValue'),
+ "recommendedValue": Em.get(propertyToAdd, 'recommendedValue'),
+ "isNotSaved": !Em.get(propertyToAdd, 'isDeleted'),
+ "isEditable": true
+ };
+ App.config.createOverride(cp, overridePlainObject, selectedGroup);
}
}
Em.setProperties(propertyToAdd, {
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/mixins/main/service/configs/config_overridable.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mixins/main/service/configs/config_overridable.js b/ambari-web/app/mixins/main/service/configs/config_overridable.js
index 1dc3d24..4f42b34 100644
--- a/ambari-web/app/mixins/main/service/configs/config_overridable.js
+++ b/ambari-web/app/mixins/main/service/configs/config_overridable.js
@@ -53,7 +53,6 @@ App.ConfigOverridable = Em.Mixin.create({
configGroups,
serviceConfigProperty,
function (selectedGroupInPopup) {
- console.log("launchConfigGroupSelectionCreationDialog(): Selected/Created:", selectedGroupInPopup);
if (selectedGroupInPopup) {
serviceConfigController.set('overrideToAdd', serviceConfigProperty);
serviceConfigController.set('selectedConfigGroup', selectedGroupInPopup);
@@ -63,8 +62,11 @@ App.ConfigOverridable = Em.Mixin.create({
);
}
else {
- var valueForOverride = (serviceConfigProperty.get('widget') || serviceConfigProperty.get('displayType') == 'checkbox') ? serviceConfigProperty.get('value') : null;
- serviceConfigController.addOverrideProperty(serviceConfigProperty, selectedConfigGroup, valueForOverride);
+ var valueForOverride = (serviceConfigProperty.get('widget') || serviceConfigProperty.get('displayType') == 'checkbox') ? serviceConfigProperty.get('value') : '';
+ var override = App.config.createOverride(serviceConfigProperty, { "value": valueForOverride, "isEditable": true }, selectedConfigGroup);
+ if (isInstaller) {
+ selectedConfigGroup.get('properties').pushObject(override);
+ }
}
Em.$('body>.tooltip').remove();
},
@@ -126,8 +128,10 @@ App.ConfigOverridable = Em.Mixin.create({
if (this.get('optionSelectConfigGroup')) {
var selectedConfigGroup = this.get('selectedConfigGroup');
this.hide();
- App.get('router.mainServiceInfoConfigsController').loadSelectedVersion(null, this.get('selectedConfigGroup'));
callback(selectedConfigGroup);
+ if (!isInstaller) {
+ App.get('router.mainServiceInfoConfigsController').doSelectConfigGroup({context: selectedConfigGroup});
+ }
} else {
var newConfigGroupName = this.get('newConfigGroupName').trim();
var newConfigGroup = App.ConfigGroup.create({
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/models/configs/stack_config_property.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/configs/stack_config_property.js b/ambari-web/app/models/configs/stack_config_property.js
index 7caeadf..a1925a4 100644
--- a/ambari-web/app/models/configs/stack_config_property.js
+++ b/ambari-web/app/models/configs/stack_config_property.js
@@ -86,7 +86,7 @@ App.StackConfigProperty = DS.Model.extend({
* service name
* @property {string}
*/
- serviceName: DS.attr('string'),
+ serviceName: DS.attr('string', {defaultValue: 'MISC'}),
/**
* stack name
@@ -182,7 +182,12 @@ App.StackConfigProperty = DS.Model.extend({
* config property isFinal value same as recommendedIsFinal
* @property {boolean}
*/
- isFinal: DS.attr('boolean', {defaultValue: false})
+ isFinal: DS.attr('boolean', {defaultValue: false}),
+
+ /**
+ * @type {boolean}
+ */
+ index: DS.attr('number', {defaultValue: null})
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/routes/add_service_routes.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/add_service_routes.js b/ambari-web/app/routes/add_service_routes.js
index 9a4071f..96937f9 100644
--- a/ambari-web/app/routes/add_service_routes.js
+++ b/ambari-web/app/routes/add_service_routes.js
@@ -214,7 +214,6 @@ module.exports = App.WizardRoute.extend({
controller.dataLoading().done(function () {
var wizardStep7Controller = router.get('wizardStep7Controller');
controller.loadAllPriorSteps().done(function () {
- controller.loadAdvancedConfigs(wizardStep7Controller);
wizardStep7Controller.getConfigTags();
wizardStep7Controller.set('wizardController', controller);
controller.usersLoading().done(function () {
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/routes/installer.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/installer.js b/ambari-web/app/routes/installer.js
index c57da9c..4422f2b 100644
--- a/ambari-web/app/routes/installer.js
+++ b/ambari-web/app/routes/installer.js
@@ -302,11 +302,8 @@ module.exports = Em.Route.extend(App.RouterRedirections, {
},
connectOutlets: function (router, context) {
var controller = router.get('installerController');
-
+ var wizardStep7Controller = router.get('wizardStep7Controller');
controller.loadAllPriorSteps().done(function () {
- var wizardStep7Controller = router.get('wizardStep7Controller');
- controller.loadAdvancedConfigs(wizardStep7Controller);
- wizardStep7Controller.set('isAdvancedConfigLoaded', false);
wizardStep7Controller.set('wizardController', controller);
controller.connectOutlet('wizardStep7', controller.get('content'));
});
http://git-wip-us.apache.org/repos/asf/ambari/blob/9582cc0a/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index ef6cee3..bde7af6 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -640,6 +640,11 @@ var urls = {
/*************************STACK CONFIGS**************************************/
+ 'configs.stack_configs.load.cluster_configs': {
+ 'real': '{stackVersionUrl}?fields=configurations/*,Versions/config_types/*',
+ 'mock': '/data/stacks/HDP-2.2/configurations.json'
+ },
+
'configs.stack_configs.load.all': {
'real': '{stackVersionUrl}/services?fields=configurations/*,StackServices/config_types/*',
'mock': '/data/stacks/HDP-2.2/configurations.json'