123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303 |
- /**
- * 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');
- require('utils/configs/config_initializer_class');
- require('utils/configs/ha_config_initializer_class');
- require('utils/configs/hosts_based_initializer_mixin');
- require('utils/configs/control_flow_initializer_mixin');
- var _slice = Array.prototype.slice;
- /**
- * Main class responsible for properties computation.
- * This class contains all required info to manipulate properties regarding value updates
- * during removing/adding components.
- * To determine when component removed or added you just need to setup properly localDB object
- * and set `isInstalled` flag to `true` where selected component(s) will be located after adding/removing.
- * By default all initializer handlers filtering localDB by `isInstalled` `true`.
- *
- * @mixes App.ControlFlowInitializerMixin
- * @mixes App.HostsBasedInitializerMixin
- * @type {AddComponentConfigInitializer}
- * @augments {HaConfigInitializerClass}
- */
- App.AddComponentConfigInitializer = App.HaConfigInitializerClass.extend(App.HostsBasedInitializerMixin, App.ControlFlowInitializerMixin, {
- /**
- * All initializer properties definition.
- * Object format is the same as for App.ConfigInitializerClass.initializers
- * @see App.ConfigInitializerClass.initializers
- *
- * @return {object} property name - initializer map
- */
- __defaultInitializers: function() {
- return {
- 'ha.zookeeper.quorum': this.getNameNodeHAOnlyHostsPortConfig('ZOOKEEPER_SERVER', '', '', ',', 'zkClientPort', true),
- 'hbase.zookeeper.quorum': this.getHostsListComponentConfig('ZOOKEEPER_SERVER', true),
- 'instance.zookeeper.host': this.getHostsWithPortConfig('ZOOKEEPER_SERVER', '', '', ',', 'zkClientPort', true),
- 'templeton.zookeeper.hosts': this.getHostsWithPortConfig('ZOOKEEPER_SERVER', '', '', ',', 'zkClientPort', true),
- 'hive.cluster.delegation.token.store.zookeeper.connectString': this.getHostsWithPortConfig('ZOOKEEPER_SERVER', '', '', ',', 'zkClientPort', true),
- 'storm.zookeeper.servers': this.getHostsListComponentJSONStringifiedConfig('ZOOKEEPER_SERVER', true),
- 'hive.zookeeper.quorum': this.getHDPStackOnlyHostsPortConfig('2.2', 'ZOOKEEPER_SERVER', '', '', ',', 'zkClientPort', true),
- 'hadoop.registry.zk.quorum': this.getHDPStackOnlyHostsPortConfig('2.2', 'ZOOKEEPER_SERVER', '', '', ',', 'zkClientPort', true),
- 'nimbus.seeds': this.getHostsListComponentJSONStringifiedConfig('NIMBUS', true),
- 'hadoop.proxyuser.{{hiveUser}}.hosts': this.getComponentsHostsConfig(['HIVE_SERVER', 'WEBHCAT_SERVER', 'HIVE_METASTORE'], false),
- 'hadoop.proxyuser.{{webhcatUser}}.hosts': this.getComponentsHostsConfig(['HIVE_SERVER', 'WEBHCAT_SERVER', 'HIVE_METASTORE'], false, true),
- 'hadoop.proxyuser.{{hiveUser}}.hosts': this.getComponentsHostsConfig(['HIVE_SERVER', 'WEBHCAT_SERVER', 'HIVE_METASTORE'], false, true),
- 'hive.metastore.uris': this.getHostsWithPortConfig(['WEBHCAT_SERVER', 'HIVE_METASTORE'], 'thrift://', '', ',thrift://', 'hiveMetastorePort', true)
- };
- },
- /**
- * All unique initializer definition.
- * Object format is the same as for App.ConfigInitializerClass.uniqueInitializers
- * @see App.ConfigInitializerClass.uniqueInitializers
- *
- * @type {Object}
- */
- __defaultUniqueInitializers: {
- 'yarn.resourcemanager.zk-address': '_initYarnRMZkAdress',
- 'templeton.hive.properties': '_initTempletonHiveProperties'
- },
- /**
- * Property names to initialize. This attribute should be overrided in class instance.
- * `initializers` property will set up according this list from `__defaultUniqueInitializers` and
- * `__defaultInitializers`
- *
- * @type {string[]}
- */
- initializeForProperties: null,
- initializers: function() {
- return {};
- }.property(),
- uniqueInitializers: {},
- init: function() {
- this._super();
- this._bootstrapInitializers(this.get('initializeForProperties'));
- },
- initializerTypes: [
- {
- name: 'json_stringified_value',
- method: '_initAsJSONStrigifiedValueConfig'
- }
- ],
- /**
- * @override
- * @param {object} settings
- */
- setup: function (settings) {
- this._updateInitializers(settings);
- },
- /**
- * @override
- */
- cleanup: function () {
- this._restoreInitializers();
- },
- getJSONStringifiedValueConfig: function() {
- return {
- type: 'json_stringified_value'
- };
- },
- _initAsJSONStrigifiedValueConfig: function(configProperty, localDB, dependencies, initializer) {
- var hostsValue = Em.get(configProperty, 'value').split(Em.getWithDefault(initializer, 'modifier.delimiter', ','));
- var propertyValue = JSON.stringify(hostsValue).replace(/"/g, "'");
- Em.setProperties(configProperty, {
- value: propertyValue,
- recommendedValue: propertyValue
- });
- return configProperty;
- },
- /**
- * Perform value update according to hosts. Mutate <code>siteConfigs</code>
- *
- * @param {object} siteConfigs
- * @param {configProperty} configProperty
- * @returns {boolean}
- */
- updateSiteObj: function(siteConfigs, configProperty) {
- if (!siteConfigs || !configProperty) return false;
- App.config.updateHostsListValue(siteConfigs, configProperty.name, configProperty.value);
- return true;
- },
- /**
- * @see App.ControlFlowInitializerMixin.getNameNodeHAControl
- * @see App.HostsBasedInitializerMixin.getComponentsHostsConfig
- */
- getNameNodeHAOnlyHostsConfig: function(components, asArray) {
- return [
- this.getNameNodeHAControl(),
- this.getComponentsHostsConfig.apply(this, _slice.call(arguments))
- ];
- },
- /**
- * @override
- **/
- getHostsWithPortConfig: function (component, prefix, suffix, delimiter, port, portFromDependencies) {
- var ret = this._super.apply(this, _slice.call(arguments));
- ret.componentExists = true;
- return ret;
- },
- /**
- * @see App.ControlFlowInitializerMixin.getNameNodeHAControl
- * @see App.HostsBasedInitializerMixin.getHostsWithPortConfig
- */
- getNameNodeHAOnlyHostsPortConfig: function(component, prefix, suffix, delimiter, port, portFromDependencies) {
- return [
- this.getNameNodeHAControl(),
- this.getHostsWithPortConfig.apply(this, _slice.call(arguments))
- ];
- },
- /**
- * @see App.ControlFlowInitializerMixin.getResourceManagerHAControl
- * @see App.HostsBasedInitializerMixin.getHostsWithPortConfig
- */
- getResourceManagerHAOnlyHostsPortConfig: function(component, prefix, suffix, delimiter, port, portFromDependencies) {
- return [
- this.getResourceManagerHAControl(),
- this.getHostsWithPortConfig.apply(this, _slice.call(arguments))
- ];
- },
- /**
- * @see App.HostsBasedInitializerMixin.getHostsListComponentConfig
- * @see getJSONStringifiedValueConfig
- */
- getHostsListComponentJSONStringifiedConfig: function(component, componentExists, delimiter) {
- return [
- this.getHostsListComponentConfig.apply(this, _slice.call(arguments)),
- this.getJSONStringifiedValueConfig()
- ];
- },
- /**
- * @see App.ControlFlowInitializerMixin.getHDPStackVersionControl
- * @see App.HostsBasedInitializerMixin.getHostsWithPortConfig
- */
- getHDPStackOnlyHostsPortConfig: function(minStackVersion, component, prefix, suffix, delimiter, port, portFromDependencies) {
- return [
- this.getHDPStackVersionControl(minStackVersion),
- this.getHostsWithPortConfig.apply(this, _slice.call(arguments, 1))
- ];
- },
- _initYarnRMZkAdress: function(configProperty, localDB, dependencies) {
- if (App.get('isRMHaEnabled') || App.get('isHadoop22Stack')) {
- return this._initAsHostsWithPort(configProperty, localDB, dependencies, {
- component: 'ZOOKEEPER_SERVER',
- componentExists: true,
- modifier: {
- prefix: '',
- suffix: '',
- delimiter: ','
- },
- portKey: 'zkClientPort'
- });
- } else {
- return configProperty;
- }
- },
- _initTempletonHiveProperties: function(configProperty, localDB, dependecies, initializer) {
- var hostNames = localDB.masterComponentHosts.filter(function(masterComponent) {
- return ['WEBHCAT_SERVER', 'HIVE_METASTORE'].contains(masterComponent.component) && masterComponent.isInstalled === true;
- }).mapProperty('hostName').uniq().sort();
- var hiveMSHosts = hostNames.map(function(hostName) {
- return "thrift://" + hostName + ":" + dependecies.hiveMetastorePort;
- }).join('\\,');
- var value = configProperty.value.replace(/thrift.+[0-9]{2,},/i, hiveMSHosts + ",");
- Em.setProperties(configProperty, {
- value: value,
- recommendedValue: value
- });
- return configProperty;
- },
- /**
- * Set up `this.initializers` and `this.uniqueInitializers` properties according
- * to property list names.
- *
- * @param {string[]} properties list of property names
- */
- _bootstrapInitializers: function(properties) {
- var initializers = {},
- uniqueInitializers = {},
- defaultInitializers = this.__defaultInitializers(),
- defaultUniqueInitializers = this.get('__defaultUniqueInitializers');
- if (Em.isNone(properties)) {
- initializers = this.__defaultInitializers();
- uniqueInitializer = this.get('__defaultUniqueInitializers');
- } else {
- properties.forEach(function(propertyName) {
- if (defaultInitializers[propertyName]) {
- initializers[propertyName] = defaultInitializers[propertyName];
- } else if (defaultUniqueInitializers[propertyName]) {
- uniqueInitializers[propertyName] = defaultUniqueInitializers[propertyName];
- }
- });
- }
- this._setForComputed('initializers', initializers);
- this.set('uniqueInitializers', uniqueInitializers);
- }
- });
- /**
- * ZooKeeper service add/remove components initializer.
- * @instance App.AddComponentConfigInitializer
- */
- App.AddZooKeeperComponentsInitializer = App.AddComponentConfigInitializer.create({
- initializeForProperties: [
- 'ha.zookeeper.quorum',
- 'hbase.zookeeper.quorum',
- 'instance.zookeeper.host',
- 'templeton.zookeeper.hosts',
- 'hive.cluster.delegation.token.store.zookeeper.connectString',
- 'yarn.resourcemanager.zk-address',
- 'hive.zookeeper.quorum',
- 'storm.zookeeper.servers',
- 'hadoop.registry.zk.quorum'
- ]
- });
- /**
- * Hive service add/remove components initializer.
- * @instance App.AddComponentConfigInitializer
- */
- App.AddHiveComponentsInitializer = App.AddComponentConfigInitializer.create({
- initializeForProperties: [
- 'hive.metastore.uris',
- 'templeton.hive.properties',
- 'hadoop.proxyuser.{{webhcatUser}}.hosts',
- 'hadoop.proxyuser.{{hiveUser}}.hosts'
- ]
- });
|