Преглед изворни кода

AMBARI-12364. WebHCat fails to start during upgrade from HDP-2.2 to HDP-2.3 (ncole)

Nate Cole пре 10 година
родитељ
комит
630299fb3c

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

@@ -108,6 +108,11 @@ purge_tables = "false"
 if Script.is_hdp_stack_greater_or_equal("2.3"):
   purge_tables = 'true'
 
+  # this is NOT a typo.  HDP-2.3 configs for hcatalog/webhcat point to a
+  # specific directory which is NOT called 'conf'
+  hcat_conf_dir = '/usr/hdp/current/hive-webhcat/etc/hcatalog'
+  config_dir = '/usr/hdp/current/hive-webhcat/etc/webhcat'
+
 if Script.is_hdp_stack_greater_or_equal("2.2"):
   hive_specific_configs_supported = True
 

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

@@ -92,6 +92,10 @@ else:
     # ranger is only compatible with this location on HDP 2.3+, not HDP 2.2
     hive_server_conf_dir = format("/usr/hdp/current/{component_directory}/conf/conf.server")
 
+    # this is NOT a typo.  HDP-2.3 configs for hcatalog/webhcat point to a
+    # specific directory which is NOT called 'conf'
+    webhcat_conf_dir = '/usr/hdp/current/hive-webhcat/etc/webhcat'
+
   hive_config_dir = hive_client_conf_dir
   if 'role' in config and config['role'] in ["HIVE_SERVER", "HIVE_METASTORE"]:
     hive_config_dir = hive_server_conf_dir

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

@@ -77,6 +77,7 @@ class WebHCatServerDefault(WebHCatServer):
 
     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, "hive-hcatalog", params.version)
       conf_select.select(params.stack_name, "hadoop", params.version)
       hdp_select.select("hive-webhcat", params.version)
 

+ 17 - 5
ambari-server/src/test/python/stacks/2.0.6/HIVE/test_webhcat_server.py

@@ -340,11 +340,14 @@ class TestWebHCatServer(RMFTestCase):
 
   @patch("resource_management.core.shell.call")
   def test_pre_rolling_restart_23(self, call_mock):
+    import sys
+
     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
+    json_content['hostLevelParams']['stack_version'] = "2.3"
 
     mocks_dict = {}
     self.executeScript(self.COMMON_SERVICES_PACKAGE_DIR + "/scripts/webhcat_server.py",
@@ -356,16 +359,25 @@ class TestWebHCatServer(RMFTestCase):
                        call_mocks = [(0, None), (0, None)],
                        mocks_dict = mocks_dict)
 
+    self.assertTrue("params" in sys.modules)
+    self.assertTrue(sys.modules["params"].webhcat_conf_dir is not None)
+    self.assertTrue("/usr/hdp/current/hive-webhcat/etc/webhcat" == sys.modules["params"].webhcat_conf_dir)
+
     self.assertResourceCalled('Execute',
                               ('hdp-select', 'set', 'hive-webhcat', version), sudo=True,)
     self.assertNoMoreResources()
 
-    self.assertEquals(1, mocks_dict['call'].call_count)
-    self.assertEquals(1, mocks_dict['checked_call'].call_count)
+    self.assertEquals(2, mocks_dict['call'].call_count)
+    self.assertEquals(2, mocks_dict['checked_call'].call_count)
     self.assertEquals(
-      ('conf-select', 'set-conf-dir', '--package', 'hadoop', '--stack-version', '2.3.0.0-1234', '--conf-version', '0'),
+      ('conf-select', 'set-conf-dir', '--package', 'hive-hcatalog', '--stack-version', '2.3.0.0-1234', '--conf-version', '0'),
        mocks_dict['checked_call'].call_args_list[0][0][0])
-
     self.assertEquals(
-      ('conf-select', 'create-conf-dir', '--package', 'hadoop', '--stack-version', '2.3.0.0-1234', '--conf-version', '0'),
+      ('conf-select', 'create-conf-dir', '--package', 'hive-hcatalog', '--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['checked_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[1][0][0])