Code coverage report for app/utils/configs/move_hm_config_initializer.js

Statements: 100% (20 / 20)      Branches: 50% (1 / 2)      Functions: 100% (5 / 5)      Lines: 100% (20 / 20)      Ignored: none     

All files » app/utils/configs/ » move_hm_config_initializer.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106    1                                     1 1             1                                             1   1   1 1   1 2     1 1                               1 1 1   1 1                           2 2 2        
'use strict';
 
;require.register("utils/configs/move_hm_config_initializer", function (exports, require, module) {
  /**
   * 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/move_hive_component_config_initializer_class');
 
  /**
   * Initializer for configs which should be affected when Hive Metastore is moved from one host to another
   *
   * @type {MoveHiveComponentConfigInitializerClass}
   */
  App.MoveHmConfigInitializer = App.MoveHiveComponentConfigInitializerClass.create({
 
    initializers: {
      'hadoop.proxyuser.{{hiveUser}}.hosts': App.MoveHiveComponentConfigInitializerClass.getHostsWithComponentsConfig(['HIVE_SERVER', 'HIVE_METASTORE', 'HIVE_SERVER_INTERACTIVE'], 'HIVE_METASTORE')
    },
 
    uniqueInitializers: {
      'hive.metastore.uris': '_initHiveMetastoreUris',
      'templeton.hive.properties': '_initTempletonHiveProperties'
    },
 
    /**
     * Unique initializer for <code>hive.metastore.uris</code>-config
     * Value example: 'thrift://host1:1234,thrift://host2:1234,thrift://host3:1234'
     *
     * @param {configProperty} configProperty
     * @param {extendedTopologyLocalDB} localDB
     * @param {reassignComponentDependencies} dependencies
     * @returns {object}
     * @private
     * @method _initHiveMetastoreUris
     */
    _initHiveMetastoreUris: function _initHiveMetastoreUris(configProperty, localDB, dependencies) {
      var hiveMSHosts = this.__getHmHostsConsideringMoved(localDB, dependencies);
 
      var value = Em.get(configProperty, 'value');
 
      var port = value.match(/:[0-9]{2,4}/);
      port = port ? port[0].slice(1) : '9083';
 
      value = hiveMSHosts.uniq().map(function (hiveMSHost) {
        return 'thrift://' + hiveMSHost + ':' + port;
      }).join(',');
 
      Em.set(configProperty, 'value', value);
      return configProperty;
    },
 
    /**
     * Unique initializer for <code>templeton.hive.properties</code>-config
     * Replace existing hosts with new
     * Value example: 'hive.metastore.local=false,hive.metastore.uris=thrift://host1:9083,hive.metastore.sasl.enabled=false,hive.metastore.execute.setugi=true'
     *
     * @param {configProperty} configProperty
     * @param {extendedTopologyLocalDB} localDB
     * @param {reassignComponentDependencies} dependencies
     * @returns {object}
     * @private
     * @method _initTempletonHiveProperties
     */
    _initTempletonHiveProperties: function _initTempletonHiveProperties(configProperty, localDB, dependencies) {
      var hiveMSHosts = this.__getHmHostsConsideringMoved(localDB, dependencies);
      var value = Em.get(configProperty, 'value');
      value = value.replace(/thrift.+[0-9]{2,},/i, hiveMSHosts.join('\\,') + ',');
 
      Em.set(configProperty, 'value', value);
      return configProperty;
    },
 
    /**
     * Get list of hosts where HIVE_METASTORE exists considering component's moving (host where it was is removed and host
     * where it will be is added)
     *
     * @param {extendedTopologyLocalDB} localDB
     * @param {reassignComponentDependencies} dependencies
     * @returns {string[]}
     * @private
     * @method __getHmHostsConsideringMoved
     */
    __getHmHostsConsideringMoved: function __getHmHostsConsideringMoved(localDB, dependencies) {
      var hiveMSHosts = localDB.masterComponentHosts.filterProperty('component', 'HIVE_METASTORE').mapProperty('hostName');
      hiveMSHosts = hiveMSHosts.removeObject(dependencies.sourceHostName).addObject(dependencies.targetHostName);
      return hiveMSHosts.uniq();
    }
 
  });
});