Procházet zdrojové kódy

AMBARI-10899. Agents Changes For Supporting HDP 2.3 conf-select On Upgrade (ncole)

Nate Cole před 10 roky
rodič
revize
a6b9e95596
82 změnil soubory, kde provedl 1475 přidání a 33 odebrání
  1. 68 0
      ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py
  2. 2 0
      ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/package/scripts/falcon_client.py
  3. 2 0
      ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/package/scripts/falcon_server.py
  4. 4 1
      ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_client.py
  5. 2 0
      ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/upgrade.py
  6. 2 0
      ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/datanode.py
  7. 2 0
      ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs_client.py
  8. 2 0
      ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/journalnode.py
  9. 2 0
      ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py
  10. 2 0
      ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_client.py
  11. 2 0
      ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_metastore.py
  12. 2 0
      ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_server.py
  13. 3 0
      ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat_server.py
  14. 2 0
      ambari-server/src/main/resources/common-services/KAFKA/0.8.1.2.2/package/scripts/upgrade.py
  15. 3 0
      ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox_gateway.py
  16. 2 0
      ambari-server/src/main/resources/common-services/MAHOUT/1.0.0.2.3/package/scripts/mahout_client.py
  17. 2 0
      ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie_client.py
  18. 2 0
      ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie_server.py
  19. 2 0
      ambari-server/src/main/resources/common-services/PIG/0.12.0.2.0/package/scripts/pig_client.py
  20. 3 1
      ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/upgrade.py
  21. 3 0
      ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/slider_client.py
  22. 2 0
      ambari-server/src/main/resources/common-services/SPARK/1.2.0.2.2/package/scripts/job_history_server.py
  23. 2 0
      ambari-server/src/main/resources/common-services/SPARK/1.2.0.2.2/package/scripts/spark_client.py
  24. 3 0
      ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/package/scripts/sqoop_client.py
  25. 2 1
      ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/drpc_server.py
  26. 2 0
      ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/nimbus.py
  27. 2 1
      ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/nimbus_prod.py
  28. 2 0
      ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/rest_api.py
  29. 2 0
      ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/supervisor.py
  30. 2 0
      ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/supervisor_prod.py
  31. 2 0
      ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/ui_server.py
  32. 2 0
      ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/package/scripts/tez_client.py
  33. 2 0
      ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/application_timeline_server.py
  34. 2 0
      ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/historyserver.py
  35. 2 0
      ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/mapreduce2_client.py
  36. 2 0
      ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/nodemanager.py
  37. 2 0
      ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/resourcemanager.py
  38. 2 0
      ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/yarn_client.py
  39. 3 1
      ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/zookeeper.py
  40. 2 0
      ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/zookeeper_client.py
  41. 2 0
      ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/zookeeper_server.py
  42. 48 3
      ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_client.py
  43. 41 3
      ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py
  44. 31 0
      ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_regionserver.py
  45. 30 0
      ambari-server/src/test/python/stacks/2.0.6/HDFS/test_datanode.py
  46. 30 1
      ambari-server/src/test/python/stacks/2.0.6/HDFS/test_hdfs_client.py
  47. 30 3
      ambari-server/src/test/python/stacks/2.0.6/HDFS/test_journalnode.py
  48. 28 0
      ambari-server/src/test/python/stacks/2.0.6/HDFS/test_namenode.py
  49. 30 0
      ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_client.py
  50. 30 0
      ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_server.py
  51. 31 1
      ambari-server/src/test/python/stacks/2.0.6/HIVE/test_webhcat_server.py
  52. 32 1
      ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_client.py
  53. 69 0
      ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py
  54. 30 1
      ambari-server/src/test/python/stacks/2.0.6/PIG/test_pig_client.py
  55. 26 0
      ambari-server/src/test/python/stacks/2.0.6/SQOOP/test_sqoop.py
  56. 29 0
      ambari-server/src/test/python/stacks/2.0.6/YARN/test_historyserver.py
  57. 30 1
      ambari-server/src/test/python/stacks/2.0.6/YARN/test_mapreduce2_client.py
  58. 30 1
      ambari-server/src/test/python/stacks/2.0.6/YARN/test_nodemanager.py
  59. 30 1
      ambari-server/src/test/python/stacks/2.0.6/YARN/test_resourcemanager.py
  60. 30 1
      ambari-server/src/test/python/stacks/2.0.6/YARN/test_yarn_client.py
  61. 33 0
      ambari-server/src/test/python/stacks/2.0.6/ZOOKEEPER/test_zookeeper_client.py
  62. 34 1
      ambari-server/src/test/python/stacks/2.0.6/ZOOKEEPER/test_zookeeper_server.py
  63. 31 1
      ambari-server/src/test/python/stacks/2.1/FALCON/test_falcon_client.py
  64. 34 1
      ambari-server/src/test/python/stacks/2.1/FALCON/test_falcon_server.py
  65. 31 2
      ambari-server/src/test/python/stacks/2.1/HIVE/test_hive_metastore.py
  66. 29 1
      ambari-server/src/test/python/stacks/2.1/STORM/test_storm_drpc_server.py
  67. 27 0
      ambari-server/src/test/python/stacks/2.1/STORM/test_storm_nimbus.py
  68. 28 0
      ambari-server/src/test/python/stacks/2.1/STORM/test_storm_nimbus_prod.py
  69. 27 0
      ambari-server/src/test/python/stacks/2.1/STORM/test_storm_rest_api_service.py
  70. 28 0
      ambari-server/src/test/python/stacks/2.1/STORM/test_storm_supervisor.py
  71. 28 0
      ambari-server/src/test/python/stacks/2.1/STORM/test_storm_supervisor_prod.py
  72. 29 0
      ambari-server/src/test/python/stacks/2.1/STORM/test_storm_ui_server.py
  73. 44 0
      ambari-server/src/test/python/stacks/2.1/TEZ/test_tez_client.py
  74. 31 2
      ambari-server/src/test/python/stacks/2.1/YARN/test_apptimelineserver.py
  75. 31 1
      ambari-server/src/test/python/stacks/2.2/KAFKA/test_kafka_broker.py
  76. 33 0
      ambari-server/src/test/python/stacks/2.2/KNOX/test_knox_gateway.py
  77. 28 0
      ambari-server/src/test/python/stacks/2.2/RANGER/test_ranger_admin.py
  78. 31 0
      ambari-server/src/test/python/stacks/2.2/RANGER/test_ranger_usersync.py
  79. 37 1
      ambari-server/src/test/python/stacks/2.2/SLIDER/test_slider_client.py
  80. 29 0
      ambari-server/src/test/python/stacks/2.2/SPARK/test_job_history_server.py
  81. 29 0
      ambari-server/src/test/python/stacks/2.2/SPARK/test_spark_client.py
  82. 32 1
      ambari-server/src/test/python/stacks/2.3/MAHOUT/test_mahout_client.py

+ 68 - 0
ambari-common/src/main/python/resource_management/libraries/functions/conf_select.py

@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+"""
+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.
+
+"""
+
+__all__ = ["select", "create"]
+
+import version
+from resource_management.core import shell
+
+TEMPLATE = "conf-select {0} --package {1} --stack-version {2} --conf-version 0"
+
+def _valid(stack_name, package, ver):
+  if stack_name != "HDP":
+    return False
+
+  if version.compare_versions(version.format_hdp_stack_version(ver), "2.3.0.0") < 0:
+    return False
+
+  return True
+
+def create(stack_name, package, version):
+  """
+  Creates a config version for the specified package
+  :stack_name: the name of the stack
+  :package: the name of the package, as-used by conf-select
+  :version: the version number to create
+  """
+
+  if not _valid(stack_name, package, version):
+    return
+
+  shell.call(TEMPLATE.format("create-conf-dir", package, version))
+
+
+def select(stack_name, package, version, try_create=True):
+  """
+  Selects a config version for the specified package.  Currently only works if the version is
+  for HDP-2.3 or higher
+  :stack_name: the name of the stack
+  :package: the name of the package, as-used by conf-select
+  :version: the version number to create
+  :try_create: optional argument to attempt to create the directory before setting it
+  """
+
+  if not _valid(stack_name, package, version):
+    return
+
+  if try_create:
+    create(stack_name, package, version)
+
+  shell.call(TEMPLATE.format("set-conf-dir", package, version), logoutput=True)
+

+ 2 - 0
ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/package/scripts/falcon_client.py

@@ -18,6 +18,7 @@ limitations under the License.
 """
 """
 
 
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from falcon import falcon
 from falcon import falcon
 from ambari_commons import OSConst
 from ambari_commons import OSConst
 from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
 from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
@@ -50,6 +51,7 @@ class FalconClientLinux(FalconClient):
       return
       return
 
 
     Logger.info("Executing Falcon Client Rolling Upgrade pre-restart")
     Logger.info("Executing Falcon Client Rolling Upgrade pre-restart")
+    conf_select.select(params.stack_name, "falcon", params.version)
     Execute(format("hdp-select set falcon-client {version}"))
     Execute(format("hdp-select set falcon-client {version}"))
 
 
   def security_status(self, env):
   def security_status(self, env):

+ 2 - 0
ambari-server/src/main/resources/common-services/FALCON/0.5.0.2.1/package/scripts/falcon_server.py

@@ -20,6 +20,7 @@ limitations under the License.
 import falcon_server_upgrade
 import falcon_server_upgrade
 
 
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.version import *
 from resource_management.libraries.functions.version import *
 from resource_management.libraries.functions.security_commons import build_expectations, \
 from resource_management.libraries.functions.security_commons import build_expectations, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
@@ -73,6 +74,7 @@ class FalconServerLinux(FalconServer):
       return
       return
 
 
     Logger.info("Executing Falcon Server Rolling Upgrade pre-restart")
     Logger.info("Executing Falcon Server Rolling Upgrade pre-restart")
+    conf_select.select(params.stack_name, "falcon", params.version)
     Execute(format("hdp-select set falcon-server {version}"))
     Execute(format("hdp-select set falcon-server {version}"))
     falcon_server_upgrade.pre_start_restore()
     falcon_server_upgrade.pre_start_restore()
 
 

+ 4 - 1
ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/hbase_client.py

@@ -20,6 +20,7 @@ limitations under the License.
 
 
 import sys
 import sys
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from hbase import hbase
 from hbase import hbase
 from ambari_commons import OSCheck, OSConst
 from ambari_commons import OSCheck, OSConst
 from ambari_commons.os_family_impl import OsFamilyImpl
 from ambari_commons.os_family_impl import OsFamilyImpl
@@ -54,11 +55,13 @@ class HbaseClientDefault(HbaseClient):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hbase", params.version)
       Execute(format("hdp-select set hbase-client {version}"))
       Execute(format("hdp-select set hbase-client {version}"))
 
 
-      # set all of the hadoop clientss since hbase client is upgraded as part
+      # set all of the hadoop clients since hbase client is upgraded as part
       # of the final "CLIENTS" group and we need to ensure that hadoop-client
       # of the final "CLIENTS" group and we need to ensure that hadoop-client
       # is also set
       # is also set
+      conf_select.select(params.stack_name, "hadoop", params.version)
       Execute(format("hdp-select set hadoop-client {version}"))
       Execute(format("hdp-select set hadoop-client {version}"))
 
 
 
 

+ 2 - 0
ambari-server/src/main/resources/common-services/HBASE/0.96.0.2.0/package/scripts/upgrade.py

@@ -21,6 +21,7 @@ limitations under the License.
 from resource_management import *
 from resource_management import *
 from resource_management.core.resources.system import Execute
 from resource_management.core.resources.system import Execute
 from resource_management.core import shell
 from resource_management.core import shell
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.decorator import retry
 from resource_management.libraries.functions.decorator import retry
 
 
@@ -28,6 +29,7 @@ def prestart(env, hdp_component):
   import params
   import params
 
 
   if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
   if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+    conf_select.select(params.stack_name, "hbase", params.version)
     Execute("hdp-select set {0} {1}".format(hdp_component, params.version))
     Execute("hdp-select set {0} {1}".format(hdp_component, params.version))
 
 
 def post_regionserver(env):
 def post_regionserver(env):

+ 2 - 0
ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/datanode.py

@@ -19,6 +19,7 @@ limitations under the License.
 import datanode_upgrade
 import datanode_upgrade
 from hdfs_datanode import datanode
 from hdfs_datanode import datanode
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.security_commons import build_expectations, \
 from resource_management.libraries.functions.security_commons import build_expectations, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, FILE_TYPE_XML
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, FILE_TYPE_XML
@@ -71,6 +72,7 @@ class DataNodeDefault(DataNode):
     import params
     import params
     env.set_params(params)
     env.set_params(params)
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hadoop", params.version)
       Execute(format("hdp-select set hadoop-hdfs-datanode {version}"))
       Execute(format("hdp-select set hadoop-hdfs-datanode {version}"))
 
 
   def post_rolling_restart(self, env):
   def post_rolling_restart(self, env):

+ 2 - 0
ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs_client.py

@@ -18,6 +18,7 @@ limitations under the License.
 """
 """
 
 
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.security_commons import build_expectations, \
 from resource_management.libraries.functions.security_commons import build_expectations, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
   FILE_TYPE_XML
   FILE_TYPE_XML
@@ -59,6 +60,7 @@ class HdfsClientDefault(HdfsClient):
     import params
     import params
     env.set_params(params)
     env.set_params(params)
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hadoop", params.version)
       Execute(format("hdp-select set hadoop-client {version}"))
       Execute(format("hdp-select set hadoop-client {version}"))
 
 
   def security_status(self, env):
   def security_status(self, env):

+ 2 - 0
ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/journalnode.py

@@ -18,6 +18,7 @@ limitations under the License.
 """
 """
 
 
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.version import compare_versions, \
 from resource_management.libraries.functions.version import compare_versions, \
   format_hdp_stack_version
   format_hdp_stack_version
 from resource_management.libraries.functions.format import format
 from resource_management.libraries.functions.format import format
@@ -49,6 +50,7 @@ class JournalNodeDefault(JournalNode):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hadoop", params.version)
       Execute(format("hdp-select set hadoop-hdfs-journalnode {version}"))
       Execute(format("hdp-select set hadoop-hdfs-journalnode {version}"))
 
 
   def start(self, env, rolling_restart=False):
   def start(self, env, rolling_restart=False):

+ 2 - 0
ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/namenode.py

@@ -22,6 +22,7 @@ import os
 import json
 import json
 import  tempfile
 import  tempfile
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.security_commons import build_expectations, \
 from resource_management.libraries.functions.security_commons import build_expectations, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
   FILE_TYPE_XML
   FILE_TYPE_XML
@@ -109,6 +110,7 @@ class NameNodeDefault(NameNode):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hadoop", params.version)
       Execute(format("hdp-select set hadoop-hdfs-namenode {version}"))
       Execute(format("hdp-select set hadoop-hdfs-namenode {version}"))
 
 
   def post_rolling_restart(self, env):
   def post_rolling_restart(self, env):

+ 2 - 0
ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_client.py

@@ -19,6 +19,7 @@ limitations under the License.
 """
 """
 import sys
 import sys
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from hive import hive
 from hive import hive
 from ambari_commons.os_family_impl import OsFamilyImpl
 from ambari_commons.os_family_impl import OsFamilyImpl
 from ambari_commons import OSConst
 from ambari_commons import OSConst
@@ -53,6 +54,7 @@ class HiveClientDefault(HiveClient):
     import params
     import params
     env.set_params(params)
     env.set_params(params)
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hadoop", params.version)
       Execute(format("hdp-select set hadoop-client {version}"))
       Execute(format("hdp-select set hadoop-client {version}"))
 
 
 
 

+ 2 - 0
ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_metastore.py

@@ -20,6 +20,7 @@ limitations under the License.
 
 
 import sys
 import sys
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.security_commons import build_expectations, \
 from resource_management.libraries.functions.security_commons import build_expectations, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
   FILE_TYPE_XML
   FILE_TYPE_XML
@@ -76,6 +77,7 @@ class HiveMetastoreDefault(HiveMetastore):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hive", params.version)
       Execute(format("hdp-select set hive-metastore {version}"))
       Execute(format("hdp-select set hive-metastore {version}"))
 
 
   def security_status(self, env):
   def security_status(self, env):

+ 2 - 0
ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/hive_server.py

@@ -22,6 +22,7 @@ import hive_server_upgrade
 from resource_management import *
 from resource_management import *
 from hive import hive
 from hive import hive
 from hive_service import hive_service
 from hive_service import hive_service
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.dynamic_variable_interpretation import copy_tarballs_to_hdfs
 from resource_management.libraries.functions.dynamic_variable_interpretation import copy_tarballs_to_hdfs
 from resource_management.libraries.functions.security_commons import build_expectations, \
 from resource_management.libraries.functions.security_commons import build_expectations, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
@@ -99,6 +100,7 @@ class HiveServerDefault(HiveServer):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hive", params.version)
       Execute(format("hdp-select set hive-server2 {version}"))
       Execute(format("hdp-select set hive-server2 {version}"))
       copy_tarballs_to_hdfs('mapreduce', 'hive-server2', params.tez_user, params.hdfs_user, params.user_group)
       copy_tarballs_to_hdfs('mapreduce', 'hive-server2', params.tez_user, params.hdfs_user, params.user_group)
       copy_tarballs_to_hdfs('tez', 'hive-server2', params.tez_user, params.hdfs_user, params.user_group)
       copy_tarballs_to_hdfs('tez', 'hive-server2', params.tez_user, params.hdfs_user, params.user_group)

+ 3 - 0
ambari-server/src/main/resources/common-services/HIVE/0.12.0.2.0/package/scripts/webhcat_server.py

@@ -19,6 +19,7 @@ Ambari Agent
 
 
 """
 """
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.security_commons import build_expectations, \
 from resource_management.libraries.functions.security_commons import build_expectations, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
   FILE_TYPE_XML
   FILE_TYPE_XML
@@ -74,6 +75,8 @@ class WebHCatServerDefault(WebHCatServer):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      # webhcat has no conf, but uses hadoop home, so verify that regular hadoop conf is set
+      conf_select.select(params.stack_name, "hadoop", params.version)
       Execute(format("hdp-select set hive-webhcat {version}"))
       Execute(format("hdp-select set hive-webhcat {version}"))
 
 
   def security_status(self, env):
   def security_status(self, env):

+ 2 - 0
ambari-server/src/main/resources/common-services/KAFKA/0.8.1.2.2/package/scripts/upgrade.py

@@ -20,10 +20,12 @@ limitations under the License.
 """
 """
 from resource_management import *
 from resource_management import *
 from resource_management.core.resources.system import Execute
 from resource_management.core.resources.system import Execute
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 
 
 def prestart(env, hdp_component):
 def prestart(env, hdp_component):
   import params
   import params
 
 
   if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
   if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+    conf_select.select(params.stack_name, "kafka", params.version)
     Execute("hdp-select set {0} {1}".format(hdp_component, params.version))
     Execute("hdp-select set {0} {1}".format(hdp_component, params.version))

+ 3 - 0
ambari-server/src/main/resources/common-services/KNOX/0.5.0.2.2/package/scripts/knox_gateway.py

@@ -18,6 +18,8 @@ limitations under the License.
 """
 """
 
 
 from resource_management import *
 from resource_management import *
+
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.security_commons import build_expectations, \
 from resource_management.libraries.functions.security_commons import build_expectations, \
   cached_kinit_executor, validate_security_config_properties, get_params_from_filesystem, \
   cached_kinit_executor, validate_security_config_properties, get_params_from_filesystem, \
   FILE_TYPE_XML
   FILE_TYPE_XML
@@ -71,6 +73,7 @@ class KnoxGateway(Script):
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
       upgrade.backup_data()
       upgrade.backup_data()
+      conf_select.select(params.stack_name, "knox", params.version)
       Execute(format("hdp-select set knox-server {version}"))
       Execute(format("hdp-select set knox-server {version}"))
 
 
   @OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)
   @OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)

+ 2 - 0
ambari-server/src/main/resources/common-services/MAHOUT/1.0.0.2.3/package/scripts/mahout_client.py

@@ -21,6 +21,7 @@ Ambari Agent
 
 
 import sys
 import sys
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from mahout import mahout
 from mahout import mahout
 
 
 
 
@@ -33,6 +34,7 @@ class MahoutClient(Script):
     import params
     import params
     env.set_params(params)
     env.set_params(params)
 
 
+    conf_select.select(params.stack_name, "mahout", params.version)
     Execute(('hdp-select', 'set', 'mahout-client', params.version),
     Execute(('hdp-select', 'set', 'mahout-client', params.version),
             sudo = True)
             sudo = True)
 
 

+ 2 - 0
ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie_client.py

@@ -20,6 +20,7 @@ limitations under the License.
 
 
 import sys
 import sys
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 
 
 from oozie import oozie
 from oozie import oozie
 from oozie_service import oozie_service
 from oozie_service import oozie_service
@@ -55,6 +56,7 @@ class OozieClient(Script):
       return
       return
 
 
     Logger.info("Executing Oozie Client Rolling Upgrade pre-restart")
     Logger.info("Executing Oozie Client Rolling Upgrade pre-restart")
+    conf_select.select(params.stack_name, "oozie", params.version)
     Execute(format("hdp-select set oozie-client {version}"))
     Execute(format("hdp-select set oozie-client {version}"))
 
 
   # We substitute some configs (oozie.authentication.kerberos.principal) before generation (see oozie.py and params.py).
   # We substitute some configs (oozie.authentication.kerberos.principal) before generation (see oozie.py and params.py).

+ 2 - 0
ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie_server.py

@@ -25,6 +25,7 @@ from resource_management.core.resources.system import Execute
 from resource_management.libraries.functions import format
 from resource_management.libraries.functions import format
 from resource_management.libraries.script import Script
 from resource_management.libraries.script import Script
 from resource_management.libraries.functions import compare_versions
 from resource_management.libraries.functions import compare_versions
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions import format_hdp_stack_version
 from resource_management.libraries.functions import format_hdp_stack_version
 from resource_management.libraries.functions.security_commons import build_expectations
 from resource_management.libraries.functions.security_commons import build_expectations
 from resource_management.libraries.functions.security_commons import cached_kinit_executor
 from resource_management.libraries.functions.security_commons import cached_kinit_executor
@@ -159,6 +160,7 @@ class OozieServerDefault(OozieServer):
 
 
     oozie_server_upgrade.backup_configuration()
     oozie_server_upgrade.backup_configuration()
 
 
+    conf_select.select(params.stack_name, "oozie", params.version)
     Execute(format("hdp-select set oozie-server {version}"))
     Execute(format("hdp-select set oozie-server {version}"))
 
 
     oozie_server_upgrade.restore_configuration()
     oozie_server_upgrade.restore_configuration()

+ 2 - 0
ambari-server/src/main/resources/common-services/PIG/0.12.0.2.0/package/scripts/pig_client.py

@@ -22,6 +22,7 @@ Ambari Agent
 import sys
 import sys
 import os
 import os
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from pig import pig
 from pig import pig
 from ambari_commons import OSConst
 from ambari_commons import OSConst
 from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
 from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
@@ -45,6 +46,7 @@ class PigClientLinux(PigClient):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hadoop", params.version)
       Execute(format("hdp-select set hadoop-client {version}"))
       Execute(format("hdp-select set hadoop-client {version}"))
 
 
   def install(self, env):
   def install(self, env):

+ 3 - 1
ambari-server/src/main/resources/common-services/RANGER/0.4.0/package/scripts/upgrade.py

@@ -19,10 +19,12 @@ limitations under the License.
 
 
 """
 """
 from resource_management.core.resources.system import Execute
 from resource_management.core.resources.system import Execute
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.format import format
 from resource_management.libraries.functions.format import format
 
 
 def prestart(env, hdp_component):
 def prestart(env, hdp_component):
   import params
   import params
 
 
   if params.version and params.stack_is_hdp22_or_further:
   if params.version and params.stack_is_hdp22_or_further:
-    Execute("hdp-select set {0} {1}".format(hdp_component, params.version))
+    conf_select.select(params.stack_name, hdp_component, params.version)
+    Execute("hdp-select set {0} {1}".format(hdp_component, params.version))

+ 3 - 0
ambari-server/src/main/resources/common-services/SLIDER/0.60.0.2.2/package/scripts/slider_client.py

@@ -19,6 +19,7 @@ limitations under the License.
 """
 """
 
 
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from slider import slider
 from slider import slider
 from ambari_commons import OSConst
 from ambari_commons import OSConst
 from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
 from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
@@ -35,11 +36,13 @@ class SliderClient(Script):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "slider", params.version)      
       Execute(format("hdp-select set slider-client {version}"))
       Execute(format("hdp-select set slider-client {version}"))
 
 
       # also set all of the hadoop clients since slider client is upgraded as
       # also set all of the hadoop clients since slider client is upgraded as
       # part of the final "CLIENTS" group and we need to ensure that
       # part of the final "CLIENTS" group and we need to ensure that
       # hadoop-client is also set
       # hadoop-client is also set
+      conf_select.select(params.stack_name, "hadoop", params.version)      
       Execute(format("hdp-select set hadoop-client {version}"))
       Execute(format("hdp-select set hadoop-client {version}"))
 
 
   @OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)
   @OsFamilyFuncImpl(os_family=OsFamilyImpl.DEFAULT)

+ 2 - 0
ambari-server/src/main/resources/common-services/SPARK/1.2.0.2.2/package/scripts/job_history_server.py

@@ -20,6 +20,7 @@ limitations under the License.
 
 
 import sys
 import sys
 import os
 import os
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.dynamic_variable_interpretation import copy_tarballs_to_hdfs
 from resource_management.libraries.functions.dynamic_variable_interpretation import copy_tarballs_to_hdfs
 from resource_management.libraries.functions.format import format
 from resource_management.libraries.functions.format import format
@@ -74,6 +75,7 @@ class JobHistoryServer(Script):
 
 
     env.set_params(params)
     env.set_params(params)
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "spark", params.version)
       Execute(format("hdp-select set spark-historyserver {version}"))
       Execute(format("hdp-select set spark-historyserver {version}"))
       copy_tarballs_to_hdfs('tez', 'spark-historyserver', params.spark_user, params.hdfs_user, params.user_group)
       copy_tarballs_to_hdfs('tez', 'spark-historyserver', params.spark_user, params.hdfs_user, params.user_group)
 
 

+ 2 - 0
ambari-server/src/main/resources/common-services/SPARK/1.2.0.2.2/package/scripts/spark_client.py

@@ -20,6 +20,7 @@ limitations under the License.
 
 
 import sys
 import sys
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.core.exceptions import ComponentIsNotRunning
 from resource_management.core.exceptions import ComponentIsNotRunning
 from resource_management.core.logger import Logger
 from resource_management.core.logger import Logger
@@ -49,6 +50,7 @@ class SparkClient(Script):
 
 
     env.set_params(params)
     env.set_params(params)
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "spark", params.version)
       Execute(format("hdp-select set spark-client {version}"))
       Execute(format("hdp-select set spark-client {version}"))
 
 
 if __name__ == "__main__":
 if __name__ == "__main__":

+ 3 - 0
ambari-server/src/main/resources/common-services/SQOOP/1.4.4.2.0/package/scripts/sqoop_client.py

@@ -21,6 +21,8 @@ limitations under the License.
 from resource_management.core.exceptions import ClientComponentHasNoStatus
 from resource_management.core.exceptions import ClientComponentHasNoStatus
 from resource_management.core.resources.system import Execute
 from resource_management.core.resources.system import Execute
 from resource_management.libraries.script.script import Script
 from resource_management.libraries.script.script import Script
+from resource_management.libraries.functions import conf_select
+from resource_management.libraries.functions.format import format
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from sqoop import sqoop
 from sqoop import sqoop
 from ambari_commons.os_family_impl import OsFamilyImpl
 from ambari_commons.os_family_impl import OsFamilyImpl
@@ -49,6 +51,7 @@ class SqoopClientDefault(SqoopClient):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "sqoop", params.version)
       Execute(format("hdp-select set sqoop-client {version}"))
       Execute(format("hdp-select set sqoop-client {version}"))
 
 
 @OsFamilyImpl(os_family=OSConst.WINSRV_FAMILY)
 @OsFamilyImpl(os_family=OSConst.WINSRV_FAMILY)

+ 2 - 1
ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/drpc_server.py

@@ -21,6 +21,7 @@ limitations under the License.
 import sys
 import sys
 from resource_management.libraries.functions import check_process_status
 from resource_management.libraries.functions import check_process_status
 from resource_management.libraries.script import Script
 from resource_management.libraries.script import Script
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions import format
 from resource_management.libraries.functions import format
 from resource_management.core.resources.system import Execute
 from resource_management.core.resources.system import Execute
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
@@ -31,7 +32,6 @@ from resource_management.libraries.functions.security_commons import build_expec
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
   FILE_TYPE_JAAS_CONF
   FILE_TYPE_JAAS_CONF
 
 
-
 class DrpcServer(Script):
 class DrpcServer(Script):
 
 
   def get_stack_to_component(self):
   def get_stack_to_component(self):
@@ -52,6 +52,7 @@ class DrpcServer(Script):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "storm", params.version)
       Execute(format("hdp-select set storm-client {version}"))
       Execute(format("hdp-select set storm-client {version}"))
 
 
   def start(self, env, rolling_restart=False):
   def start(self, env, rolling_restart=False):

+ 2 - 0
ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/nimbus.py

@@ -22,6 +22,7 @@ import sys
 from resource_management.libraries.functions import check_process_status
 from resource_management.libraries.functions import check_process_status
 from resource_management.libraries.script import Script
 from resource_management.libraries.script import Script
 from resource_management.libraries.functions import format
 from resource_management.libraries.functions import format
+from resource_management.libraries.functions import conf_select
 from resource_management.core.resources.system import Execute
 from resource_management.core.resources.system import Execute
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from storm import storm
 from storm import storm
@@ -54,6 +55,7 @@ class NimbusDefault(Nimbus):
     import params
     import params
     env.set_params(params)
     env.set_params(params)
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "storm", params.version)
       Execute(format("hdp-select set storm-nimbus {version}"))
       Execute(format("hdp-select set storm-nimbus {version}"))
 
 
   def start(self, env, rolling_restart=False):
   def start(self, env, rolling_restart=False):

+ 2 - 1
ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/nimbus_prod.py

@@ -22,11 +22,11 @@ import sys
 from resource_management.libraries.script import Script
 from resource_management.libraries.script import Script
 from storm import storm
 from storm import storm
 from supervisord_service import supervisord_service, supervisord_check_status
 from supervisord_service import supervisord_service, supervisord_check_status
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions import format
 from resource_management.libraries.functions import format
 from resource_management.core.resources.system import Execute
 from resource_management.core.resources.system import Execute
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 
 
-
 class Nimbus(Script):
 class Nimbus(Script):
 
 
   def get_stack_to_component(self):
   def get_stack_to_component(self):
@@ -47,6 +47,7 @@ class Nimbus(Script):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "storm", params.version)
       Execute(format("hdp-select set storm-nimbus {version}"))
       Execute(format("hdp-select set storm-nimbus {version}"))
 
 
   def start(self, env, rolling_restart=False):
   def start(self, env, rolling_restart=False):

+ 2 - 0
ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/rest_api.py

@@ -21,6 +21,7 @@ limitations under the License.
 import sys
 import sys
 from resource_management.libraries.functions import check_process_status
 from resource_management.libraries.functions import check_process_status
 from resource_management.libraries.script import Script
 from resource_management.libraries.script import Script
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions import format
 from resource_management.libraries.functions import format
 from resource_management.core.resources.system import Execute
 from resource_management.core.resources.system import Execute
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
@@ -50,6 +51,7 @@ class StormRestApi(Script):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "storm", params.version)
       Execute(format("hdp-select set storm-client {version}"))
       Execute(format("hdp-select set storm-client {version}"))
 
 
   def start(self, env, rolling_restart=False):
   def start(self, env, rolling_restart=False):

+ 2 - 0
ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/supervisor.py

@@ -21,6 +21,7 @@ limitations under the License.
 import sys
 import sys
 from resource_management.libraries.functions import check_process_status
 from resource_management.libraries.functions import check_process_status
 from resource_management.libraries.script import Script
 from resource_management.libraries.script import Script
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions import format
 from resource_management.libraries.functions import format
 from resource_management.core.resources.system import Execute
 from resource_management.core.resources.system import Execute
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
@@ -72,6 +73,7 @@ class SupervisorDefault(Supervisor):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "storm", params.version)
       Execute(format("hdp-select set storm-supervisor {version}"))
       Execute(format("hdp-select set storm-supervisor {version}"))
 
 
   def start(self, env, rolling_restart=False):
   def start(self, env, rolling_restart=False):

+ 2 - 0
ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/supervisor_prod.py

@@ -23,6 +23,7 @@ from storm import storm
 from service import service
 from service import service
 from supervisord_service import supervisord_service, supervisord_check_status
 from supervisord_service import supervisord_service, supervisord_check_status
 from resource_management.libraries.script import Script
 from resource_management.libraries.script import Script
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions import format
 from resource_management.libraries.functions import format
 from resource_management.core.resources.system import Execute
 from resource_management.core.resources.system import Execute
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
@@ -47,6 +48,7 @@ class Supervisor(Script):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "storm", params.version)
       Execute(format("hdp-select set storm-supervisor {version}"))
       Execute(format("hdp-select set storm-supervisor {version}"))
 
 
   def start(self, env, rolling_restart=False):
   def start(self, env, rolling_restart=False):

+ 2 - 0
ambari-server/src/main/resources/common-services/STORM/0.9.1.2.1/package/scripts/ui_server.py

@@ -24,6 +24,7 @@ from service import service
 from service_check import ServiceCheck
 from service_check import ServiceCheck
 from resource_management.libraries.functions import check_process_status
 from resource_management.libraries.functions import check_process_status
 from resource_management.libraries.script import Script
 from resource_management.libraries.script import Script
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions import format
 from resource_management.libraries.functions import format
 from resource_management.core.resources.system import Execute
 from resource_management.core.resources.system import Execute
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
@@ -75,6 +76,7 @@ class UiServerDefault(UiServer):
     import params
     import params
     env.set_params(params)
     env.set_params(params)
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "storm", params.version)
       Execute(format("hdp-select set storm-client {version}"))
       Execute(format("hdp-select set storm-client {version}"))
 
 
   def start(self, env, rolling_restart=False):
   def start(self, env, rolling_restart=False):

+ 2 - 0
ambari-server/src/main/resources/common-services/TEZ/0.4.0.2.1/package/scripts/tez_client.py

@@ -21,6 +21,7 @@ Ambari Agent
 
 
 import sys
 import sys
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from tez import tez
 from tez import tez
 from ambari_commons import OSConst
 from ambari_commons import OSConst
 from ambari_commons.os_family_impl import OsFamilyImpl
 from ambari_commons.os_family_impl import OsFamilyImpl
@@ -45,6 +46,7 @@ class TezClientLinux(TezClient):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hadoop", params.version)
       Execute(format("hdp-select set hadoop-client {version}"))
       Execute(format("hdp-select set hadoop-client {version}"))
 
 
   def install(self, env):
   def install(self, env):

+ 2 - 0
ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/application_timeline_server.py

@@ -20,6 +20,7 @@ Ambari Agent
 """
 """
 
 
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.security_commons import build_expectations, \
 from resource_management.libraries.functions.security_commons import build_expectations, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties,\
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties,\
@@ -69,6 +70,7 @@ class ApplicationTimelineServerDefault(ApplicationTimelineServer):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hadoop", params.version)
       Execute(format("hdp-select set hadoop-yarn-timelineserver {version}"))
       Execute(format("hdp-select set hadoop-yarn-timelineserver {version}"))
 
 
   def status(self, env):
   def status(self, env):

+ 2 - 0
ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/historyserver.py

@@ -20,6 +20,7 @@ Ambari Agent
 """
 """
 
 
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.dynamic_variable_interpretation import copy_tarballs_to_hdfs
 from resource_management.libraries.functions.dynamic_variable_interpretation import copy_tarballs_to_hdfs
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.format import format
 from resource_management.libraries.functions.format import format
@@ -70,6 +71,7 @@ class HistoryServerDefault(HistoryServer):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hadoop", params.version)
       Execute(format("hdp-select set hadoop-mapreduce-historyserver {version}"))
       Execute(format("hdp-select set hadoop-mapreduce-historyserver {version}"))
       copy_tarballs_to_hdfs('mapreduce', 'hadoop-mapreduce-historyserver', params.mapred_user, params.hdfs_user, params.user_group)
       copy_tarballs_to_hdfs('mapreduce', 'hadoop-mapreduce-historyserver', params.mapred_user, params.hdfs_user, params.user_group)
 
 

+ 2 - 0
ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/mapreduce2_client.py

@@ -21,6 +21,7 @@ Ambari Agent
 
 
 import sys
 import sys
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from yarn import yarn
 from yarn import yarn
 from ambari_commons import OSConst
 from ambari_commons import OSConst
 from ambari_commons.os_family_impl import OsFamilyImpl
 from ambari_commons.os_family_impl import OsFamilyImpl
@@ -55,6 +56,7 @@ class MapReduce2ClientDefault(MapReduce2Client):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hadoop", params.version)
       Execute(format("hdp-select set hadoop-client {version}"))
       Execute(format("hdp-select set hadoop-client {version}"))
 
 
 
 

+ 2 - 0
ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/nodemanager.py

@@ -22,6 +22,7 @@ Ambari Agent
 import nodemanager_upgrade
 import nodemanager_upgrade
 
 
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.format import format
 from resource_management.libraries.functions.format import format
 from resource_management.libraries.functions.security_commons import build_expectations, \
 from resource_management.libraries.functions.security_commons import build_expectations, \
@@ -71,6 +72,7 @@ class NodemanagerDefault(Nodemanager):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hadoop", params.version)
       Execute(format("hdp-select set hadoop-yarn-nodemanager {version}"))
       Execute(format("hdp-select set hadoop-yarn-nodemanager {version}"))
 
 
   def post_rolling_restart(self, env):
   def post_rolling_restart(self, env):

+ 2 - 0
ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/resourcemanager.py

@@ -20,6 +20,7 @@ Ambari Agent
 """
 """
 
 
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.dynamic_variable_interpretation import copy_tarballs_to_hdfs
 from resource_management.libraries.functions.dynamic_variable_interpretation import copy_tarballs_to_hdfs
 from resource_management.libraries.functions.security_commons import build_expectations, \
 from resource_management.libraries.functions.security_commons import build_expectations, \
@@ -93,6 +94,7 @@ class ResourcemanagerDefault(Resourcemanager):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hadoop", params.version)
       Execute(format("hdp-select set hadoop-yarn-resourcemanager {version}"))
       Execute(format("hdp-select set hadoop-yarn-resourcemanager {version}"))
 
 
   def start(self, env, rolling_restart=False):
   def start(self, env, rolling_restart=False):

+ 2 - 0
ambari-server/src/main/resources/common-services/YARN/2.1.0.2.0/package/scripts/yarn_client.py

@@ -21,6 +21,7 @@ Ambari Agent
 
 
 import sys
 import sys
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from yarn import yarn
 from yarn import yarn
 from ambari_commons import OSConst
 from ambari_commons import OSConst
 from ambari_commons.os_family_impl import OsFamilyImpl
 from ambari_commons.os_family_impl import OsFamilyImpl
@@ -55,6 +56,7 @@ class YarnClientDefault(YarnClient):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "hadoop", params.version)
       Execute(format("hdp-select set hadoop-client {version}"))
       Execute(format("hdp-select set hadoop-client {version}"))
 
 
 
 

+ 3 - 1
ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/zookeeper.py

@@ -19,9 +19,10 @@ Ambari Agent
 
 
 """
 """
 import os
 import os
+import sys
 
 
 from resource_management import *
 from resource_management import *
-import sys
+from resource_management.libraries.functions import conf_select
 from ambari_commons import OSConst
 from ambari_commons import OSConst
 from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
 from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl
 
 
@@ -73,6 +74,7 @@ def zookeeper(type = None, rolling_restart = False):
     )
     )
     # This path may be missing after Ambari upgrade. We need to create it.
     # This path may be missing after Ambari upgrade. We need to create it.
     if (not rolling_restart) and (not os.path.exists("/usr/hdp/current/zookeeper-server")) and params.current_version:
     if (not rolling_restart) and (not os.path.exists("/usr/hdp/current/zookeeper-server")) and params.current_version:
+      conf_select(params.stack_name, "zookeeper", params.current_version)
       Execute(format("hdp-select set zookeeper-server {current_version}"))
       Execute(format("hdp-select set zookeeper-server {current_version}"))
 
 
   if (params.log4j_props != None):
   if (params.log4j_props != None):

+ 2 - 0
ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/zookeeper_client.py

@@ -21,6 +21,7 @@ Ambari Agent
 
 
 import sys
 import sys
 from resource_management import *
 from resource_management import *
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.format import format
 from resource_management.libraries.functions.format import format
 from ambari_commons import OSConst
 from ambari_commons import OSConst
@@ -64,6 +65,7 @@ class ZookeeperClientLinux(ZookeeperClient):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "zookeeper", params.version)
       Execute(format("hdp-select set zookeeper-client {version}"))
       Execute(format("hdp-select set zookeeper-client {version}"))
 
 
 @OsFamilyImpl(os_family=OSConst.WINSRV_FAMILY)
 @OsFamilyImpl(os_family=OSConst.WINSRV_FAMILY)

+ 2 - 0
ambari-server/src/main/resources/common-services/ZOOKEEPER/3.4.5.2.0/package/scripts/zookeeper_server.py

@@ -23,6 +23,7 @@ import sys
 
 
 from resource_management.libraries.script.script import Script
 from resource_management.libraries.script.script import Script
 from resource_management.libraries.functions import get_unique_id_and_date
 from resource_management.libraries.functions import get_unique_id_and_date
+from resource_management.libraries.functions import conf_select
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.version import compare_versions, format_hdp_stack_version
 from resource_management.libraries.functions.security_commons import build_expectations, \
 from resource_management.libraries.functions.security_commons import build_expectations, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
   cached_kinit_executor, get_params_from_filesystem, validate_security_config_properties, \
@@ -74,6 +75,7 @@ class ZookeeperServerLinux(ZookeeperServer):
     env.set_params(params)
     env.set_params(params)
 
 
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
     if params.version and compare_versions(format_hdp_stack_version(params.version), '2.2.0.0') >= 0:
+      conf_select.select(params.stack_name, "zookeeper", params.version)
       Execute(format("hdp-select set zookeeper-server {version}"))
       Execute(format("hdp-select set zookeeper-server {version}"))
 
 
   def post_rolling_restart(self, env):
   def post_rolling_restart(self, env):

+ 48 - 3
ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_client.py

@@ -17,6 +17,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
+import json
+
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 
 
@@ -206,15 +208,58 @@ class TestHBaseClient(RMFTestCase):
     self.assertNoMoreResources()
     self.assertNoMoreResources()
 
 
 
 
-  def test_upgrade(self):
+  @patch("resource_management.core.shell.call")
+  def test_upgrade(self, call_mock):
+    call_mock.side_effects = []
+
+    mocks_dict = {}
     self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_client.py",
     self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_client.py",
                    classname = "HbaseClient",
                    classname = "HbaseClient",
                    command = "restart",
                    command = "restart",
                    config_file="client-upgrade.json",
                    config_file="client-upgrade.json",
                    hdp_stack_version = self.STACK_VERSION,
                    hdp_stack_version = self.STACK_VERSION,
-                   target = RMFTestCase.TARGET_COMMON_SERVICES)
+                   target = RMFTestCase.TARGET_COMMON_SERVICES,
+                   mocks_dict = mocks_dict)
 
 
     self.assertResourceCalled("Execute", "hdp-select set hbase-client 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set hbase-client 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set hadoop-client 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set hadoop-client 2.2.1.0-2067")
+    self.assertEquals(1, mocks_dict['call'].call_count)
+
+
+  @patch("resource_management.core.shell.call")
+  def test_upgrade_23(self, call_mock):
+    call_mock.side_effects = [(0, None), (0, None)]
+
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/client-upgrade.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_client.py",
+                       classname = "HbaseClient",
+                       command = "restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None), (0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute', 'hdp-select set hbase-client %s' % version)
+    self.assertResourceCalled('Execute', 'hdp-select set hadoop-client %s' % version)
+
+    self.assertEquals(5, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hbase --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hbase --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[2][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[3][0][0])
 
 
-    # for now, it's enough that hdp-select is confirmed

+ 41 - 3
ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py

@@ -677,18 +677,56 @@ class TestHBaseMaster(RMFTestCase):
   
   
     self.assertNoMoreResources()
     self.assertNoMoreResources()
 
 
-  def test_pre_rolling_restart(self):
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart(self, call_mock):
+    call_mock.side_effects = [(0, None), (0, None)]
+
     config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
     config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
     with open(config_file, "r") as f:
     with open(config_file, "r") as f:
       json_content = json.load(f)
       json_content = json.load(f)
     version = '2.2.1.0-3242'
     version = '2.2.1.0-3242'
     json_content['commandParams']['version'] = version
     json_content['commandParams']['version'] = version
+    
+    mocks_dict = {}
     self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_master.py",
     self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_master.py",
                        classname = "HbaseMaster",
                        classname = "HbaseMaster",
                        command = "pre_rolling_restart",
                        command = "pre_rolling_restart",
                        config_dict = json_content,
                        config_dict = json_content,
                        hdp_stack_version = self.STACK_VERSION,
                        hdp_stack_version = self.STACK_VERSION,
-                       target = RMFTestCase.TARGET_COMMON_SERVICES)
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       mocks_dict = mocks_dict)
     self.assertResourceCalled('Execute',
     self.assertResourceCalled('Execute',
                               'hdp-select set hbase-master %s' % version,)
                               'hdp-select set hbase-master %s' % version,)
-    self.assertNoMoreResources()
+    self.assertFalse(call_mock.called)
+    self.assertNoMoreResources()
+
+  @patch("resource_management.core.shell.call")
+  def test_upgrade_23(self, call_mock):
+    call_mock.side_effects = [(0, None), (0, None)]
+
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_master.py",
+                       classname = "HbaseMaster",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None), (0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute', 'hdp-select set hbase-master %s' % version)
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hbase --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hbase --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])
+

+ 31 - 0
ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_regionserver.py

@@ -627,3 +627,34 @@ class TestHbaseRegionServer(RMFTestCase):
                        mocks_dict = mocks_dict)
                        mocks_dict = mocks_dict)
     self.assertTrue(mocks_dict['call'].called)
     self.assertTrue(mocks_dict['call'].called)
     self.assertNoMoreResources()
     self.assertNoMoreResources()
+
+  @patch("resource_management.core.shell.call")
+  def test_upgrade_23(self, call_mock):
+    call_mock.side_effects = [(0, None), (0, None)]
+
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hbase_regionserver.py",
+                       classname = "HbaseRegionServer",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None), (0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute', 'hdp-select set hbase-regionserver %s' % version)
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hbase --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hbase --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])
+

+ 30 - 0
ambari-server/src/test/python/stacks/2.0.6/HDFS/test_datanode.py

@@ -458,6 +458,36 @@ class TestDatanode(RMFTestCase):
     self.assertNoMoreResources()
     self.assertNoMoreResources()
 
 
 
 
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/datanode.py",
+                       classname = "DataNode",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+    self.assertResourceCalled('Execute', 'hdp-select set hadoop-hdfs-datanode %s' % version,)
+
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])
+
+
   @patch('time.sleep')
   @patch('time.sleep')
   def test_post_rolling_restart(self, time_mock):
   def test_post_rolling_restart(self, time_mock):
     shell_call_output = """
     shell_call_output = """

+ 30 - 1
ambari-server/src/test/python/stacks/2.0.6/HDFS/test_hdfs_client.py

@@ -181,6 +181,35 @@ class Test(RMFTestCase):
     put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
     put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
 
 
 
 
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hdfs_client.py",
+                       classname = "HdfsClient",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute', 'hdp-select set hadoop-client %s' % version,)
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])
+
   def test_pre_rolling_restart(self):
   def test_pre_rolling_restart(self):
     config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
     config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
     with open(config_file, "r") as f:
     with open(config_file, "r") as f:
@@ -194,4 +223,4 @@ class Test(RMFTestCase):
                        hdp_stack_version = self.STACK_VERSION,
                        hdp_stack_version = self.STACK_VERSION,
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
     self.assertResourceCalled('Execute', 'hdp-select set hadoop-client %s' % version,)
     self.assertResourceCalled('Execute', 'hdp-select set hadoop-client %s' % version,)
-    self.assertNoMoreResources()
+    self.assertNoMoreResources()

+ 30 - 3
ambari-server/src/test/python/stacks/2.0.6/HDFS/test_journalnode.py

@@ -452,6 +452,33 @@ class TestJournalnode(RMFTestCase):
                        config_dict = json_content,
                        config_dict = json_content,
                        hdp_stack_version = self.STACK_VERSION,
                        hdp_stack_version = self.STACK_VERSION,
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
-    self.assertResourceCalled('Execute',
-                              'hdp-select set hadoop-hdfs-journalnode %s' % version,)
-    self.assertNoMoreResources()
+    self.assertResourceCalled('Execute', 'hdp-select set hadoop-hdfs-journalnode %s' % version,)
+    self.assertNoMoreResources()
+
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/journalnode.py",
+                       classname = "JournalNode",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute', 'hdp-select set hadoop-hdfs-journalnode %s' % version,)
+    self.assertNoMoreResources()
+
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 28 - 0
ambari-server/src/test/python/stacks/2.0.6/HDFS/test_namenode.py

@@ -1079,6 +1079,33 @@ class TestNamenode(RMFTestCase):
                               'hdp-select set hadoop-hdfs-namenode %s' % version)
                               'hdp-select set hadoop-hdfs-namenode %s' % version)
     self.assertNoMoreResources()
     self.assertNoMoreResources()
 
 
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/namenode.py",
+                       classname = "NameNode",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+    self.assertResourceCalled('Execute', 'hdp-select set hadoop-hdfs-namenode %s' % version)
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])
 
 
   def test_post_rolling_restart(self):
   def test_post_rolling_restart(self):
     config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
     config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
@@ -1118,6 +1145,7 @@ class TestNamenode(RMFTestCase):
                               user = 'hdfs',
                               user = 'hdfs',
                               )
                               )
     self.assertNoMoreResources()
     self.assertNoMoreResources()
+  
 
 
 
 
   @patch.object(shell, "call")
   @patch.object(shell, "call")

+ 30 - 0
ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_client.py

@@ -188,3 +188,33 @@ class TestHiveClient(RMFTestCase):
     self.assertResourceCalled('Execute',
     self.assertResourceCalled('Execute',
                               'hdp-select set hadoop-client %s' % version,)
                               'hdp-select set hadoop-client %s' % version,)
     self.assertNoMoreResources()
     self.assertNoMoreResources()
+
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hive_client.py",
+                       classname = "HiveClient",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute',
+                              'hdp-select set hadoop-client %s' % version,)
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 30 - 0
ambari-server/src/test/python/stacks/2.0.6/HIVE/test_hive_server.py

@@ -784,3 +784,33 @@ class TestHiveServer(RMFTestCase):
     self.assertResourceCalled('Execute',
     self.assertResourceCalled('Execute',
                               'hdp-select set hive-server2 %s' % version,)
                               'hdp-select set hive-server2 %s' % version,)
     self.assertNoMoreResources()
     self.assertNoMoreResources()
+
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hive_server.py",
+                       classname = "HiveServer",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute',
+                              'hdp-select set hive-server2 %s' % version,)
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hive --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hive --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 31 - 1
ambari-server/src/test/python/stacks/2.0.6/HIVE/test_webhcat_server.py

@@ -466,4 +466,34 @@ class TestWebHCatServer(RMFTestCase):
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
     self.assertResourceCalled('Execute',
     self.assertResourceCalled('Execute',
                               'hdp-select set hive-webhcat %s' % version,)
                               'hdp-select set hive-webhcat %s' % version,)
-    self.assertNoMoreResources()
+    self.assertNoMoreResources()
+
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/webhcat_server.py",
+                       classname = "WebHCatServer",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute',
+                              'hdp-select set hive-webhcat %s' % version,)
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 32 - 1
ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_client.py

@@ -209,4 +209,35 @@ class TestOozieClient(RMFTestCase):
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
     self.assertResourceCalled('Execute',
     self.assertResourceCalled('Execute',
                               'hdp-select set oozie-client %s' % version)
                               'hdp-select set oozie-client %s' % version)
-    self.assertNoMoreResources()
+    self.assertNoMoreResources()
+
+  
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/oozie_client.py",
+                       classname = "OozieClient",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute',
+                              'hdp-select set oozie-client %s' % version)
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package oozie --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package oozie --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 69 - 0
ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py

@@ -18,6 +18,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
 
 
+import json
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 from resource_management.core import shell
 from resource_management.core import shell
@@ -836,6 +837,74 @@ class TestOozieServer(RMFTestCase):
 
 
     self.assertNoMoreResources()
     self.assertNoMoreResources()
 
 
+  @patch("tarfile.open")
+  @patch("os.path.isdir")
+  @patch("os.path.exists")
+  @patch("os.path.isfile")
+  @patch("os.remove")
+  @patch("os.chmod")
+  @patch("shutil.rmtree", new = MagicMock())
+  @patch("glob.iglob")
+  @patch("shutil.copy2", new = MagicMock())
+  def test_upgrade_23(self, glob_mock, chmod_mock, remove_mock,
+      isfile_mock, exists_mock, isdir_mock, tarfile_open_mock):
+
+    isdir_mock.return_value = True
+    exists_mock.side_effect = [False,False,True]
+    isfile_mock.return_value = True
+    glob_mock.return_value = ["/usr/hdp/2.2.1.0-2187/hadoop/lib/hadoop-lzo-0.6.0.2.2.1.0-2187.jar"]
+
+    prepare_war_stdout = """INFO: Adding extension: libext/mysql-connector-java.jar
+    New Oozie WAR file with added 'JARs' at /var/lib/oozie/oozie-server/webapps/oozie.war"""
+
+
+    config_file = self.get_src_folder()+"/test/python/stacks/2.2/configs/oozie-upgrade.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/oozie_server.py",
+     classname = "OozieServer", command = "pre_rolling_restart", config_dict = json_content,
+     hdp_stack_version = self.UPGRADE_STACK_VERSION,
+     target = RMFTestCase.TARGET_COMMON_SERVICES,
+     call_mocks = [(0, None), (0, None), (0, prepare_war_stdout)],
+     mocks_dict = mocks_dict
+    )
+
+    # 2 calls to tarfile.open (1 directories, read + write)
+    self.assertTrue(tarfile_open_mock.called)
+    self.assertEqual(tarfile_open_mock.call_count,2)
+
+    self.assertTrue(chmod_mock.called)
+    self.assertEqual(chmod_mock.call_count,1)
+    chmod_mock.assert_called_once_with('/usr/hdp/current/oozie-server/libext-customer', 511)
+
+    self.assertTrue(isfile_mock.called)
+    self.assertEqual(isfile_mock.call_count,3)
+    isfile_mock.assert_called_with('/usr/share/HDP-oozie/ext-2.2.zip')
+
+    self.assertTrue(glob_mock.called)
+    self.assertEqual(glob_mock.call_count,1)
+    glob_mock.assert_called_with('/usr/hdp/2.3.0.0-1234/hadoop/lib/hadoop-lzo*.jar')
+
+    self.assertResourceCalled('Execute', 'hdp-select set oozie-server 2.3.0.0-1234')
+    self.assertResourceCalled('Execute', 'hdfs dfs -chown oozie:hadoop /user/oozie/share', user='oozie')
+    self.assertResourceCalled('Execute', 'hdfs dfs -chmod -R 755 /user/oozie/share', user='oozie')
+    self.assertResourceCalled('Execute', '/usr/hdp/current/oozie-server/bin/ooziedb.sh upgrade -run', user='oozie')
+    self.assertResourceCalled('Execute', '/usr/hdp/current/oozie-server/bin/oozie-setup.sh sharelib create -fs hdfs://c6401.ambari.apache.org:8020', user='oozie')
+
+    self.assertNoMoreResources()
+
+    self.assertEquals(3, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package oozie --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package oozie --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])
+
 
 
   @patch("tarfile.open")
   @patch("tarfile.open")
   @patch("os.path.isdir")
   @patch("os.path.isdir")

+ 30 - 1
ambari-server/src/test/python/stacks/2.0.6/PIG/test_pig_client.py

@@ -147,4 +147,33 @@ class TestPigClient(RMFTestCase):
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
     self.assertResourceCalled('Execute',
     self.assertResourceCalled('Execute',
                               'hdp-select set hadoop-client %s' % version)
                               'hdp-select set hadoop-client %s' % version)
-    self.assertNoMoreResources()
+    self.assertNoMoreResources()
+
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/pig_client.py",
+                       classname = "PigClient",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute',
+                              'hdp-select set hadoop-client %s' % version)
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 26 - 0
ambari-server/src/test/python/stacks/2.0.6/SQOOP/test_sqoop.py

@@ -112,3 +112,29 @@ class TestSqoop(RMFTestCase):
     self.assertNoMoreResources()
     self.assertNoMoreResources()
 
 
 
 
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/sqoop_client.py",
+                       classname = "SqoopClient",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled("Execute", "hdp-select set sqoop-client %s" % version)
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package sqoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package sqoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 29 - 0
ambari-server/src/test/python/stacks/2.0.6/YARN/test_historyserver.py

@@ -17,6 +17,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
+import json
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 import os
 import os
@@ -675,3 +676,31 @@ class TestHistoryServer(RMFTestCase):
                        target = RMFTestCase.TARGET_COMMON_SERVICES
                        target = RMFTestCase.TARGET_COMMON_SERVICES
     )
     )
     put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
     put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
+
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/historyserver.py",
+                       classname = "HistoryServer",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute', 'hdp-select set hadoop-mapreduce-historyserver %s' % version)
+    self.assertNoMoreResources()
+
+    self.assertEquals(3, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 30 - 1
ambari-server/src/test/python/stacks/2.0.6/YARN/test_mapreduce2_client.py

@@ -17,6 +17,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
+import json
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 import os
 import os
@@ -362,6 +363,34 @@ class TestMapReduce2Client(RMFTestCase):
                    target = RMFTestCase.TARGET_COMMON_SERVICES
                    target = RMFTestCase.TARGET_COMMON_SERVICES
     )
     )
 
 
+    # for now, it's enough that hdp-select is confirmed
     self.assertResourceCalled("Execute", "hdp-select set hadoop-client 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set hadoop-client 2.2.1.0-2067")
 
 
-    # for now, it's enough that hdp-select is confirmed
+
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/client-upgrade.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/mapreduce2_client.py",
+                       classname = "MapReduce2Client",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute', 'hdp-select set hadoop-client {0}'.format(version))
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 30 - 1
ambari-server/src/test/python/stacks/2.0.6/YARN/test_nodemanager.py

@@ -17,11 +17,12 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
+import json
+import os
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 from resource_management.core.exceptions import Fail
 from resource_management.core.exceptions import Fail
 from resource_management.core import shell
 from resource_management.core import shell
-import os
 
 
 origin_exists = os.path.exists
 origin_exists = os.path.exists
 @patch("platform.linux_distribution", new = MagicMock(return_value="Linux"))
 @patch("platform.linux_distribution", new = MagicMock(return_value="Linux"))
@@ -804,3 +805,31 @@ class TestNodeManager(RMFTestCase):
                        target = RMFTestCase.TARGET_COMMON_SERVICES
                        target = RMFTestCase.TARGET_COMMON_SERVICES
     )
     )
     put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
     put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
+
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/nodemanager.py",
+                       classname = "Nodemanager",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute', 'hdp-select set hadoop-yarn-nodemanager {0}'.format(version))
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 30 - 1
ambari-server/src/test/python/stacks/2.0.6/YARN/test_resourcemanager.py

@@ -17,9 +17,10 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
+import json
+import os
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
-import os
 
 
 origin_exists = os.path.exists
 origin_exists = os.path.exists
 @patch("platform.linux_distribution", new = MagicMock(return_value="Linux"))
 @patch("platform.linux_distribution", new = MagicMock(return_value="Linux"))
@@ -595,3 +596,31 @@ class TestResourceManager(RMFTestCase):
                        target = RMFTestCase.TARGET_COMMON_SERVICES
                        target = RMFTestCase.TARGET_COMMON_SERVICES
     )
     )
     put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
     put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
+
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/resourcemanager.py",
+                       classname = "Resourcemanager",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute', 'hdp-select set hadoop-yarn-resourcemanager {0}'.format(version))
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 30 - 1
ambari-server/src/test/python/stacks/2.0.6/YARN/test_yarn_client.py

@@ -17,10 +17,11 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
+import json
+import os
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 from resource_management.libraries.script.script import Script
 from resource_management.libraries.script.script import Script
-import os
 
 
 origin_exists = os.path.exists
 origin_exists = os.path.exists
 @patch("platform.linux_distribution", new = MagicMock(return_value="Linux"))
 @patch("platform.linux_distribution", new = MagicMock(return_value="Linux"))
@@ -526,3 +527,31 @@ class TestYarnClient(RMFTestCase):
     self.assertResourceCalled("Execute", "hdp-select set hadoop-client 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set hadoop-client 2.2.1.0-2067")
 
 
     # for now, it's enough that hdp-select is confirmed
     # for now, it's enough that hdp-select is confirmed
+
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/yarn_client.py",
+                       classname = "YarnClient",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute', 'hdp-select set hadoop-client {0}'.format(version))
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 33 - 0
ambari-server/src/test/python/stacks/2.0.6/ZOOKEEPER/test_zookeeper_client.py

@@ -169,3 +169,36 @@ class TestZookeeperClient(RMFTestCase):
     self.assertResourceCalled('Execute',
     self.assertResourceCalled('Execute',
                               'hdp-select set zookeeper-client %s' % version)
                               'hdp-select set zookeeper-client %s' % version)
     self.assertNoMoreResources()
     self.assertNoMoreResources()
+
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock):
+    call_mock.side_effects = [(0, None), (0, None)]
+
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-3242'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/zookeeper_client.py",
+                       classname = "ZookeeperClient",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute',
+                              'hdp-select set zookeeper-client %s' % version)
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package zookeeper --stack-version 2.3.0.0-3242 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package zookeeper --stack-version 2.3.0.0-3242 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])
+
+    self.assertNoMoreResources()

+ 34 - 1
ambari-server/src/test/python/stacks/2.0.6/ZOOKEEPER/test_zookeeper_server.py

@@ -358,6 +358,39 @@ class TestZookeeperServer(RMFTestCase):
                               'hdp-select set zookeeper-server %s' % version)
                               'hdp-select set zookeeper-server %s' % version)
     self.assertNoMoreResources()
     self.assertNoMoreResources()
 
 
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock):
+    call_mock.side_effects = [(0, None), (0, None)]
+
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-3242'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/zookeeper_server.py",
+                       classname = "ZookeeperServer",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute',
+                              'hdp-select set zookeeper-server %s' % version)
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package zookeeper --stack-version 2.3.0.0-3242 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package zookeeper --stack-version 2.3.0.0-3242 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])
+
+    self.assertNoMoreResources()
+
   @patch.object(resource_management.libraries.functions, "get_unique_id_and_date")
   @patch.object(resource_management.libraries.functions, "get_unique_id_and_date")
   def test_post_rolling_restart(self, get_unique_id_and_date_mock):
   def test_post_rolling_restart(self, get_unique_id_and_date_mock):
     unique_value = "unique1"
     unique_value = "unique1"
@@ -383,4 +416,4 @@ class TestZookeeperServer(RMFTestCase):
                        ],
                        ],
                        mocks_dict = mocks_dict)
                        mocks_dict = mocks_dict)
     self.assertEqual(mocks_dict['call'].call_count, 4)
     self.assertEqual(mocks_dict['call'].call_count, 4)
-    self.assertNoMoreResources()
+    self.assertNoMoreResources()

+ 31 - 1
ambari-server/src/test/python/stacks/2.1/FALCON/test_falcon_client.py

@@ -118,4 +118,34 @@ class TestFalconClient(RMFTestCase):
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
     self.assertResourceCalled('Execute',
     self.assertResourceCalled('Execute',
                               'hdp-select set falcon-client %s' % version,)
                               'hdp-select set falcon-client %s' % version,)
-    self.assertNoMoreResources()
+    self.assertNoMoreResources()
+
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/falcon_client.py",
+                       classname = "FalconClient",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute',
+                              'hdp-select set falcon-client %s' % version,)
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package falcon --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package falcon --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 34 - 1
ambari-server/src/test/python/stacks/2.1/FALCON/test_falcon_server.py

@@ -320,4 +320,37 @@ class TestFalconServer(RMFTestCase):
                               'hdp-select set falcon-server %s' % version,)
                               'hdp-select set falcon-server %s' % version,)
     self.assertTrue(tarfile_open_mock.called)
     self.assertTrue(tarfile_open_mock.called)
     self.assertTrue(rmtree_mock.called)
     self.assertTrue(rmtree_mock.called)
-    self.printResources()
+    self.printResources()
+
+  @patch('os.path.isfile', new=MagicMock(return_value=True))
+  @patch.object(tarfile, 'open')
+  @patch.object(shutil, 'rmtree')
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, tarfile_open_mock, rmtree_mock, call_mock):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/falcon_server.py",
+                       classname = "FalconServer",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute',
+                              'hdp-select set falcon-server %s' % version,)
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package falcon --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package falcon --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 31 - 2
ambari-server/src/test/python/stacks/2.1/HIVE/test_hive_metastore.py

@@ -478,7 +478,6 @@ class TestHiveMetastore(RMFTestCase):
     )
     )
     put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
     put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
 
 
-
   def test_pre_rolling_restart(self):
   def test_pre_rolling_restart(self):
     config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
     config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
     with open(config_file, "r") as f:
     with open(config_file, "r") as f:
@@ -493,4 +492,34 @@ class TestHiveMetastore(RMFTestCase):
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
     self.assertResourceCalled('Execute',
     self.assertResourceCalled('Execute',
                               'hdp-select set hive-metastore %s' % version,)
                               'hdp-select set hive-metastore %s' % version,)
-    self.assertNoMoreResources()
+    self.assertNoMoreResources()
+
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/hive_metastore.py",
+                       classname = "HiveMetastore",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute',
+                              'hdp-select set hive-metastore %s' % version,)
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hive --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hive --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 29 - 1
ambari-server/src/test/python/stacks/2.1/STORM/test_storm_drpc_server.py

@@ -18,9 +18,10 @@ See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
 
 
+import json
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
-import  resource_management.core.source
+import resource_management.core.source
 from test_storm_base import TestStormBase
 from test_storm_base import TestStormBase
 
 
 class TestStormDrpcServer(TestStormBase):
 class TestStormDrpcServer(TestStormBase):
@@ -151,6 +152,33 @@ class TestStormDrpcServer(TestStormBase):
 
 
     self.assertResourceCalled("Execute", "hdp-select set storm-client 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set storm-client 2.2.1.0-2067")
 
 
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.1/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/drpc_server.py",
+                     classname = "DrpcServer",
+                     command = "pre_rolling_restart",
+                     config_dict = json_content,
+                     hdp_stack_version = self.STACK_VERSION,
+                     target = RMFTestCase.TARGET_COMMON_SERVICES,
+                     call_mocks = [(0, None), (0, None)],
+                     mocks_dict = mocks_dict)
+
+    self.assertResourceCalled("Execute", "hdp-select set storm-client 2.3.0.0-1234")
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package storm --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package storm --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])
+
 
 
   @patch("resource_management.libraries.functions.security_commons.build_expectations")
   @patch("resource_management.libraries.functions.security_commons.build_expectations")
   @patch("resource_management.libraries.functions.security_commons.get_params_from_filesystem")
   @patch("resource_management.libraries.functions.security_commons.get_params_from_filesystem")

+ 27 - 0
ambari-server/src/test/python/stacks/2.1/STORM/test_storm_nimbus.py

@@ -18,6 +18,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
 
 
+import json
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 import resource_management.core.source
 import resource_management.core.source
@@ -150,6 +151,32 @@ class TestStormNimbus(TestStormBase):
 
 
     self.assertResourceCalled("Execute", "hdp-select set storm-nimbus 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set storm-nimbus 2.2.1.0-2067")
 
 
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.1/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/nimbus.py",
+                     classname = "Nimbus",
+                     command = "pre_rolling_restart",
+                     config_dict = json_content,
+                     hdp_stack_version = self.STACK_VERSION,
+                     target = RMFTestCase.TARGET_COMMON_SERVICES,
+                     call_mocks = [(0, None), (0, None)],
+                     mocks_dict = mocks_dict)
+
+    self.assertResourceCalled("Execute", "hdp-select set storm-nimbus 2.3.0.0-1234")
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package storm --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package storm --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])
     
     
   @patch("resource_management.libraries.functions.security_commons.build_expectations")
   @patch("resource_management.libraries.functions.security_commons.build_expectations")
   @patch("resource_management.libraries.functions.security_commons.get_params_from_filesystem")
   @patch("resource_management.libraries.functions.security_commons.get_params_from_filesystem")

+ 28 - 0
ambari-server/src/test/python/stacks/2.1/STORM/test_storm_nimbus_prod.py

@@ -18,6 +18,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
 
 
+import json
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 import resource_management.core.source
 import resource_management.core.source
@@ -114,3 +115,30 @@ class TestStormNimbus(TestStormBase):
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
 
 
     self.assertResourceCalled("Execute", "hdp-select set storm-nimbus 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set storm-nimbus 2.2.1.0-2067")
+
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.1/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/nimbus_prod.py",
+                     classname = "Nimbus",
+                     command = "pre_rolling_restart",
+                     config_dict = json_content,
+                     hdp_stack_version = self.STACK_VERSION,
+                     target = RMFTestCase.TARGET_COMMON_SERVICES,
+                     call_mocks = [(0, None), (0, None)],
+                     mocks_dict = mocks_dict)
+
+    self.assertResourceCalled("Execute", "hdp-select set storm-nimbus 2.3.0.0-1234")
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package storm --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package storm --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 27 - 0
ambari-server/src/test/python/stacks/2.1/STORM/test_storm_rest_api_service.py

@@ -18,6 +18,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
 
 
+import json
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 import  resource_management.core.source
 import  resource_management.core.source
@@ -150,3 +151,29 @@ class TestStormRestApi(TestStormBase):
 
 
     self.assertResourceCalled("Execute", "hdp-select set storm-client 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set storm-client 2.2.1.0-2067")
 
 
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.1/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/rest_api.py",
+                     classname = "StormRestApi",
+                     command = "pre_rolling_restart",
+                     config_dict = json_content,
+                     hdp_stack_version = self.STACK_VERSION,
+                     target = RMFTestCase.TARGET_COMMON_SERVICES,
+                     call_mocks = [(0, None), (0, None)],
+                     mocks_dict = mocks_dict)
+
+    self.assertResourceCalled("Execute", "hdp-select set storm-client 2.3.0.0-1234")
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package storm --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package storm --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 28 - 0
ambari-server/src/test/python/stacks/2.1/STORM/test_storm_supervisor.py

@@ -18,6 +18,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
 
 
+import json
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 import  resource_management.core.source
 import  resource_management.core.source
@@ -194,3 +195,30 @@ class TestStormSupervisor(TestStormBase):
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
 
 
     self.assertResourceCalled("Execute", "hdp-select set storm-supervisor 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set storm-supervisor 2.2.1.0-2067")
+
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.1/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/supervisor.py",
+                     classname = "Supervisor",
+                     command = "pre_rolling_restart",
+                     config_dict = json_content,
+                     hdp_stack_version = self.STACK_VERSION,
+                     target = RMFTestCase.TARGET_COMMON_SERVICES,
+                     call_mocks = [(0, None), (0, None)],
+                     mocks_dict = mocks_dict)
+
+    self.assertResourceCalled("Execute", "hdp-select set storm-supervisor 2.3.0.0-1234")
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package storm --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package storm --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 28 - 0
ambari-server/src/test/python/stacks/2.1/STORM/test_storm_supervisor_prod.py

@@ -18,6 +18,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
 
 
+import json
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 import resource_management.core.source
 import resource_management.core.source
@@ -163,3 +164,30 @@ class TestStormSupervisor(TestStormBase):
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
 
 
     self.assertResourceCalled("Execute", "hdp-select set storm-supervisor 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set storm-supervisor 2.2.1.0-2067")
+
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.1/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/supervisor_prod.py",
+                     classname = "Supervisor",
+                     command = "pre_rolling_restart",
+                     config_dict = json_content,
+                     hdp_stack_version = self.STACK_VERSION,
+                     target = RMFTestCase.TARGET_COMMON_SERVICES,
+                     call_mocks = [(0, None), (0, None)],
+                     mocks_dict = mocks_dict)
+
+    self.assertResourceCalled("Execute", "hdp-select set storm-supervisor 2.3.0.0-1234")
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package storm --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package storm --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 29 - 0
ambari-server/src/test/python/stacks/2.1/STORM/test_storm_ui_server.py

@@ -18,6 +18,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
 
 
+import json
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 import resource_management.core.source
 import resource_management.core.source
@@ -148,6 +149,33 @@ class TestStormUiServer(TestStormBase):
 
 
     self.assertResourceCalled("Execute", "hdp-select set storm-client 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set storm-client 2.2.1.0-2067")
 
 
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.1/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/ui_server.py",
+                     classname = "UiServer",
+                     command = "pre_rolling_restart",
+                     config_dict = json_content,
+                     hdp_stack_version = self.STACK_VERSION,
+                     target = RMFTestCase.TARGET_COMMON_SERVICES,
+                     call_mocks = [(0, None), (0, None)],
+                     mocks_dict = mocks_dict)
+
+    self.assertResourceCalled("Execute", "hdp-select set storm-client 2.3.0.0-1234")
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package storm --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package storm --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])
+
 
 
   @patch("resource_management.libraries.functions.security_commons.build_expectations")
   @patch("resource_management.libraries.functions.security_commons.build_expectations")
   @patch("resource_management.libraries.functions.security_commons.validate_security_config_properties")
   @patch("resource_management.libraries.functions.security_commons.validate_security_config_properties")
@@ -228,3 +256,4 @@ class TestStormUiServer(TestStormBase):
                        target = RMFTestCase.TARGET_COMMON_SERVICES
                        target = RMFTestCase.TARGET_COMMON_SERVICES
     )
     )
     put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
     put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
+

+ 44 - 0
ambari-server/src/test/python/stacks/2.1/TEZ/test_tez_client.py

@@ -17,6 +17,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
+
+import json
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 
 
@@ -73,3 +75,45 @@ class TestTezClient(RMFTestCase):
     self.assertResourceCalled("Execute", "hdp-select set hadoop-client 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set hadoop-client 2.2.1.0-2067")
 
 
     # for now, it's enough that hdp-select is confirmed
     # for now, it's enough that hdp-select is confirmed
+
+  @patch("resource_management.libraries.functions.get_hdp_version")
+  def test_upgrade_23(self, get_hdp_version_mock):
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/tez_client.py",
+                       classname = "TezClient",
+                       command = "restart",
+                       config_file="client-upgrade.json",
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES)
+
+    get_hdp_version_mock.return_value = "2.2.1.0-2067"
+    self.assertResourceCalled("Execute", "hdp-select set hadoop-client 2.2.1.0-2067")
+
+    # for now, it's enough that hdp-select is confirmed
+
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.1/configs/client-upgrade.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/tez_client.py",
+                       classname = "TezClient",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute', 'hdp-select set hadoop-client %s' % version)
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 31 - 2
ambari-server/src/test/python/stacks/2.1/YARN/test_apptimelineserver.py

@@ -17,9 +17,10 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
+import json
+import os
 from mock.mock import MagicMock, call, patch
 from mock.mock import MagicMock, call, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
-import os
 import  resource_management.libraries.functions
 import  resource_management.libraries.functions
 
 
 origin_exists = os.path.exists
 origin_exists = os.path.exists
@@ -363,4 +364,32 @@ class TestAppTimelineServer(RMFTestCase):
                        hdp_stack_version = self.STACK_VERSION,
                        hdp_stack_version = self.STACK_VERSION,
                        target = RMFTestCase.TARGET_COMMON_SERVICES
                        target = RMFTestCase.TARGET_COMMON_SERVICES
     )
     )
-    put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
+    put_structured_out_mock.assert_called_with({"securityState": "UNSECURED"})
+
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.0.6/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/application_timeline_server.py",
+                       classname = "ApplicationTimelineServer",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute', 'hdp-select set hadoop-yarn-timelineserver {0}'.format(version))
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 31 - 1
ambari-server/src/test/python/stacks/2.2/KAFKA/test_kafka_broker.py

@@ -111,4 +111,34 @@ class TestKafkaBroker(RMFTestCase):
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
     self.assertResourceCalled('Execute',
     self.assertResourceCalled('Execute',
                               'hdp-select set kafka-broker %s' % version,)
                               'hdp-select set kafka-broker %s' % version,)
-    self.assertNoMoreResources()
+    self.assertNoMoreResources()
+
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.2/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/kafka_broker.py",
+                       classname = "KafkaBroker",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute',
+                              'hdp-select set kafka-broker %s' % version,)
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package kafka --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package kafka --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 33 - 0
ambari-server/src/test/python/stacks/2.2/KNOX/test_knox_gateway.py

@@ -231,6 +231,39 @@ class TestKnoxGateway(RMFTestCase):
 
 
     self.assertResourceCalled("Execute", "hdp-select set knox-server %s" % version)
     self.assertResourceCalled("Execute", "hdp-select set knox-server %s" % version)
 
 
+  @patch("tarfile.open")
+  @patch("os.path.isdir")
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock, isdir_mock, tarfile_open_mock):
+    isdir_mock.return_value = True
+    config_file = self.get_src_folder()+"/test/python/stacks/2.2/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/knox_gateway.py",
+                       classname = "KnoxGateway",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertTrue(tarfile_open_mock.called)
+
+    self.assertResourceCalled("Execute", "hdp-select set knox-server %s" % version)
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package knox --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package knox --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])
+
   @patch("os.path.islink")
   @patch("os.path.islink")
   @patch("os.path.realpath")
   @patch("os.path.realpath")
   @patch("os.unlink")
   @patch("os.unlink")

+ 28 - 0
ambari-server/src/test/python/stacks/2.2/RANGER/test_ranger_admin.py

@@ -17,6 +17,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
+import json
 from mock.mock import MagicMock, patch
 from mock.mock import MagicMock, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 
 
@@ -159,3 +160,30 @@ class TestRangerAdmin(RMFTestCase):
         mode = 0744,
         mode = 0744,
         properties = self.getConfig()['configurations']['ranger-site']
         properties = self.getConfig()['configurations']['ranger-site']
     )
     )
+
+
+  def test_pre_rolling_upgrade_23(self, ):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.2/configs/ranger-admin-upgrade.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    json_content['commandParams']['version'] = '2.3.0.0-1234'
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/ranger_usersync.py",
+                       classname = "RangerAdmin",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled("Execute", "hdp-select set ranger-admin 2.3.0.0-1234")
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package ranger-admin --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package ranger-admin --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 31 - 0
ambari-server/src/test/python/stacks/2.2/RANGER/test_ranger_usersync.py

@@ -17,6 +17,8 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
+
+import json
 from mock.mock import MagicMock, patch
 from mock.mock import MagicMock, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 
 
@@ -115,6 +117,35 @@ class TestRangerUsersync(RMFTestCase):
     self.assertResourceCalled("Execute", ("/usr/bin/ranger-usersync-stop",), sudo=True)
     self.assertResourceCalled("Execute", ("/usr/bin/ranger-usersync-stop",), sudo=True)
     self.assertResourceCalled("Execute", "hdp-select set ranger-usersync 2.2.2.0-2399")
     self.assertResourceCalled("Execute", "hdp-select set ranger-usersync 2.2.2.0-2399")
 
 
+  @patch("setup_ranger.setup_usersync")
+  def test_upgrade_23(self, setup_usersync_mock):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.2/configs/ranger-usersync-upgrade.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    json_content['commandParams']['version'] = '2.3.0.0-1234'
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/ranger_usersync.py",
+                       classname = "RangerUsersync",
+                       command = "restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertTrue(setup_usersync_mock.called)
+    self.assertResourceCalled("Execute", ("/usr/bin/ranger-usersync-stop",), sudo=True)
+    self.assertResourceCalled("Execute", "hdp-select set ranger-usersync 2.3.0.0-1234")
+
+    self.assertEquals(3, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package ranger-usersync --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package ranger-usersync --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])
+
   def assert_configure_default(self):
   def assert_configure_default(self):
     self.assertResourceCalled('PropertiesFile', '/usr/hdp/current/ranger-usersync/install.properties',
     self.assertResourceCalled('PropertiesFile', '/usr/hdp/current/ranger-usersync/install.properties',
         properties = self.getConfig()['configurations']['usersync-properties'],
         properties = self.getConfig()['configurations']['usersync-properties'],

+ 37 - 1
ambari-server/src/test/python/stacks/2.2/SLIDER/test_slider_client.py

@@ -17,6 +17,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
+import json
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 
 
 
 
@@ -116,4 +117,39 @@ class TestSliderClient(RMFTestCase):
 
 
     self.assertResourceCalled("Execute", "hdp-select set slider-client 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set slider-client 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set hadoop-client 2.2.1.0-2067")
     self.assertResourceCalled("Execute", "hdp-select set hadoop-client 2.2.1.0-2067")
-    self.assertNoMoreResources()
+    self.assertNoMoreResources()
+
+
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.2/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    json_content['commandParams']['version'] = '2.3.0.0-1234'
+    
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/slider_client.py",
+                       classname = "SliderClient",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None), (0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled("Execute", "hdp-select set slider-client 2.3.0.0-1234")
+    self.assertResourceCalled("Execute", "hdp-select set hadoop-client 2.3.0.0-1234")
+    self.assertNoMoreResources()
+
+    self.assertEquals(4, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package slider --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package slider --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])
+    self.assertEquals(
+      "conf-select create-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[2][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package hadoop --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[3][0][0])

+ 29 - 0
ambari-server/src/test/python/stacks/2.2/SPARK/test_job_history_server.py

@@ -17,6 +17,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
+import json
 from mock.mock import MagicMock, patch
 from mock.mock import MagicMock, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 
 
@@ -209,3 +210,31 @@ class TestJobHistoryServer(RMFTestCase):
         owner = 'spark',
         owner = 'spark',
         group = 'spark',
         group = 'spark',
     )
     )
+
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.2/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/job_history_server.py",
+                       classname = "JobHistoryServer",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute', 'hdp-select set spark-historyserver {0}'.format(version))
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package spark --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package spark --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 29 - 0
ambari-server/src/test/python/stacks/2.2/SPARK/test_spark_client.py

@@ -17,6 +17,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
+import json
 from mock.mock import MagicMock, patch
 from mock.mock import MagicMock, patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 
 
@@ -118,3 +119,31 @@ class TestSparkClient(RMFTestCase):
         owner = 'spark',
         owner = 'spark',
         group = 'spark',
         group = 'spark',
     )
     )
+
+  def test_pre_rolling_restart_23(self):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.2/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/spark_client.py",
+                       classname = "SparkClient",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute', 'hdp-select set spark-client {0}'.format(version))
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package spark --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package spark --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])

+ 32 - 1
ambari-server/src/test/python/stacks/2.3/MAHOUT/test_mahout_client.py

@@ -18,6 +18,7 @@ See the License for the specific language governing permissions and
 limitations under the License.
 limitations under the License.
 '''
 '''
 
 
+from mock.mock import patch
 from stacks.utils.RMFTestCase import *
 from stacks.utils.RMFTestCase import *
 import json
 import json
 
 
@@ -61,4 +62,34 @@ class TestMahoutClient(RMFTestCase):
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
                        target = RMFTestCase.TARGET_COMMON_SERVICES)
     self.assertResourceCalled('Execute',
     self.assertResourceCalled('Execute',
                               ('hdp-select', 'set', 'mahout-client', version), sudo = True)
                               ('hdp-select', 'set', 'mahout-client', version), sudo = True)
-    self.assertNoMoreResources()
+    self.assertNoMoreResources()
+
+  @patch("resource_management.core.shell.call")
+  def test_pre_rolling_restart_23(self, call_mock):
+    config_file = self.get_src_folder()+"/test/python/stacks/2.2/configs/default.json"
+    with open(config_file, "r") as f:
+      json_content = json.load(f)
+    version = '2.3.0.0-1234'
+    json_content['commandParams']['version'] = version
+
+    mocks_dict = {}
+    self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/mahout_client.py",
+                       classname = "MahoutClient",
+                       command = "pre_rolling_restart",
+                       config_dict = json_content,
+                       hdp_stack_version = self.STACK_VERSION,
+                       target = RMFTestCase.TARGET_COMMON_SERVICES,
+                       call_mocks = [(0, None), (0, None)],
+                       mocks_dict = mocks_dict)
+
+    self.assertResourceCalled('Execute',
+                              ('hdp-select', 'set', 'mahout-client', version), sudo = True)
+    self.assertNoMoreResources()
+
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(
+      "conf-select create-conf-dir --package mahout --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[0][0][0])
+    self.assertEquals(
+      "conf-select set-conf-dir --package mahout --stack-version 2.3.0.0-1234 --conf-version 0",
+       mocks_dict['call'].call_args_list[1][0][0])