Repository: ambari Updated Branches: refs/heads/trunk 4ed15d018 -> b79fd597c
AMBARI-11558. Ooozie start takes too long (aonishuk) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b79fd597 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b79fd597 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b79fd597 Branch: refs/heads/trunk Commit: b79fd597cd54f8029b21d247b2647695aa95a7b9 Parents: 4ed15d0 Author: Andrew Onishuk <aonis...@hortonworks.com> Authored: Sat May 30 19:23:58 2015 +0300 Committer: Andrew Onishuk <aonis...@hortonworks.com> Committed: Sat May 30 19:23:58 2015 +0300 ---------------------------------------------------------------------- .../python/resource_management/core/logger.py | 2 +- .../libraries/providers/hdfs_resource.py | 37 +++-- .../OOZIE/4.0.0.2.0/package/scripts/oozie.py | 39 +++-- .../4.0.0.2.0/package/scripts/oozie_service.py | 43 +++-- .../4.0.0.2.0/package/scripts/params_linux.py | 4 + .../stacks/2.0.6/OOZIE/test_oozie_server.py | 161 ++++++++++++++----- .../src/test/python/stacks/utils/RMFTestCase.py | 2 +- 7 files changed, 205 insertions(+), 83 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/b79fd597/ambari-common/src/main/python/resource_management/core/logger.py ---------------------------------------------------------------------- diff --git a/ambari-common/src/main/python/resource_management/core/logger.py b/ambari-common/src/main/python/resource_management/core/logger.py index c060753..1d6ace2 100644 --- a/ambari-common/src/main/python/resource_management/core/logger.py +++ b/ambari-common/src/main/python/resource_management/core/logger.py @@ -25,7 +25,7 @@ import sys import logging from resource_management.libraries.script.config_dictionary import UnknownConfiguration -MESSAGE_MAX_LEN = 256 +MESSAGE_MAX_LEN = 512 DICTIONARY_MAX_LEN = 5 class Logger: http://git-wip-us.apache.org/repos/asf/ambari/blob/b79fd597/ambari-common/src/main/python/resource_management/libraries/providers/hdfs_resource.py ---------------------------------------------------------------------- diff --git a/ambari-common/src/main/python/resource_management/libraries/providers/hdfs_resource.py b/ambari-common/src/main/python/resource_management/libraries/providers/hdfs_resource.py index 25f0cd5..ac9a0e2 100644 --- a/ambari-common/src/main/python/resource_management/libraries/providers/hdfs_resource.py +++ b/ambari-common/src/main/python/resource_management/libraries/providers/hdfs_resource.py @@ -119,11 +119,23 @@ class HdfsResourceJar: env.config['hdfs_files'] = [] class WebHDFSUtil: - def __init__(self, address, run_user, logoutput, security_enabled): - self.address = address + def __init__(self, hdfs_site, run_user, security_enabled, logoutput=None): + https_nn_address = namenode_ha_utils.get_property_for_active_namenode(hdfs_site, 'dfs.namenode.https-address') + http_nn_address = namenode_ha_utils.get_property_for_active_namenode(hdfs_site, 'dfs.namenode.http-address') + is_https_enabled = hdfs_site['dfs.https.enabled'] if not is_empty(hdfs_site['dfs.https.enabled']) else False + + address = https_nn_address if is_https_enabled else http_nn_address + protocol = "https" if is_https_enabled else "http" + + self.address = format("{protocol}://{address}") self.run_user = run_user - self.logoutput = logoutput self.security_enabled = security_enabled + self.logoutput = logoutput + + @staticmethod + def is_webhdfs_available(is_webhdfs_enabled, default_fs): + # only hdfs seems to support webHDFS + return (is_webhdfs_enabled and default_fs.startswith("hdfs")) def parse_path(self, path): """ @@ -144,7 +156,7 @@ class WebHDFSUtil: return re.sub("[/]+", "/", path) - valid_status_codes = ["200", "201", "500"] + valid_status_codes = ["200", "201", ""] def run_command(self, target, operation, method='POST', assertable_result=True, file_to_put=None, ignore_status_codes=[], **kwargs): """ assertable_result - some POST requests return '{"boolean":false}' or '{"boolean":true}' @@ -176,7 +188,7 @@ class WebHDFSUtil: except ValueError: result_dict = out - if status_code not in WebHDFSUtil.valid_status_codes+ignore_status_codes or assertable_result and not result_dict['boolean']: + if status_code not in WebHDFSUtil.valid_status_codes+ignore_status_codes or assertable_result and result_dict and not result_dict['boolean']: formatted_output = json.dumps(result_dict, indent=2) if isinstance(result_dict, dict) else result_dict err_msg = "Execution of '%s' returned status_code=%s. %s" % (shell.string_cmd_from_args_list(cmd), status_code, formatted_output) raise Fail(err_msg) @@ -215,12 +227,9 @@ class HdfsResourceWebHDFS: if main_resource.resource.security_enabled: main_resource.kinit() - - address = main_resource.https_nn_address if main_resource.is_https_enabled else main_resource.http_nn_address - protocol = "https" if main_resource.is_https_enabled else "http" - - self.util = WebHDFSUtil(format("{protocol}://{address}"), main_resource.resource.user, - main_resource.resource.logoutput, main_resource.resource.security_enabled) + + self.util = WebHDFSUtil(main_resource.resource.hdfs_site, main_resource.resource.user, + main_resource.resource.security_enabled, main_resource.resource.logoutput) self.mode = oct(main_resource.resource.mode)[1:] if main_resource.resource.mode else main_resource.resource.mode self.mode_set = False self.main_resource = main_resource @@ -364,9 +373,6 @@ class HdfsResourceProvider(Provider): self.assert_parameter_is_set('hdfs_site') self.webhdfs_enabled = self.resource.hdfs_site['dfs.webhdfs.enabled'] - self.is_https_enabled = self.resource.hdfs_site['dfs.https.enabled'] if not is_empty(self.resource.hdfs_site['dfs.https.enabled']) else False - self.https_nn_address = namenode_ha_utils.get_property_for_active_namenode(self.resource.hdfs_site, 'dfs.namenode.https-address') - self.http_nn_address = namenode_ha_utils.get_property_for_active_namenode(self.resource.hdfs_site, 'dfs.namenode.http-address') def action_delayed(self, action_name): self.assert_parameter_is_set('type') @@ -383,8 +389,7 @@ class HdfsResourceProvider(Provider): self.get_hdfs_resource_executor().action_execute(self) def get_hdfs_resource_executor(self): - # only hdfs seems to support webHDFS - if self.webhdfs_enabled and self.resource.default_fs.startswith("hdfs"): + if WebHDFSUtil.is_webhdfs_available(self.webhdfs_enabled, self.resource.default_fs): return HdfsResourceWebHDFS() else: return HdfsResourceJar() http://git-wip-us.apache.org/repos/asf/ambari/blob/b79fd597/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py index c773fca..83b5715 100644 --- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py +++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py @@ -17,6 +17,7 @@ See the License for the specific language governing permissions and limitations under the License. """ +import hashlib import os from resource_management.core.resources.service import ServiceConfig @@ -196,17 +197,27 @@ def oozie_server_specific(): ) no_op_test = format("ls {pid_file} >/dev/null 2>&1 && ps -p `cat {pid_file}` >/dev/null 2>&1") - if not params.host_sys_prepped: - configure_cmds = [] - configure_cmds.append(('tar','-xvf',format('{oozie_home}/oozie-sharelib.tar.gz'),'-C',params.oozie_home)) - configure_cmds.append(('cp', params.ext_js_path, params.oozie_libext_dir)) - configure_cmds.append(('chown', format('{oozie_user}:{user_group}'), format('{oozie_libext_dir}/{ext_js_file}'))) - configure_cmds.append(('chown', '-RL', format('{oozie_user}:{user_group}'), params.oozie_webapps_conf_dir)) + + hashcode_file = format("{oozie_home}/.hashcode") + hashcode = hashlib.md5(format('{oozie_home}/oozie-sharelib.tar.gz')).hexdigest() + skip_recreate_sharelib = format("test -f {hashcode_file} && test -d {oozie_home}/share && [[ `cat {hashcode_file}` == '{hashcode}' ]]") - Execute( configure_cmds, - not_if = no_op_test, - sudo = True, - ) + untar_sharelib = ('tar','-xvf',format('{oozie_home}/oozie-sharelib.tar.gz'),'-C',params.oozie_home) + + Execute( untar_sharelib, # time-expensive + not_if = format("{no_op_test} || {skip_recreate_sharelib}"), + sudo = True, + ) + + configure_cmds = [] + configure_cmds.append(('cp', params.ext_js_path, params.oozie_libext_dir)) + configure_cmds.append(('chown', format('{oozie_user}:{user_group}'), format('{oozie_libext_dir}/{ext_js_file}'))) + configure_cmds.append(('chown', '-RL', format('{oozie_user}:{user_group}'), params.oozie_webapps_conf_dir)) + + Execute( configure_cmds, + not_if = no_op_test, + sudo = True, + ) if params.jdbc_driver_name=="com.mysql.jdbc.Driver" or \ params.jdbc_driver_name == "com.microsoft.sqlserver.jdbc.SQLServerDriver" or \ @@ -240,9 +251,13 @@ def oozie_server_specific(): not_if = no_op_test, ) - Execute(format("cd {oozie_tmp_dir} && {oozie_setup_sh} prepare-war {oozie_secure}"), + Execute(format("cd {oozie_tmp_dir} && {oozie_setup_sh} prepare-war {oozie_secure}"), # time-expensive user = params.oozie_user, - not_if = no_op_test + not_if = format("{no_op_test} || {skip_recreate_sharelib}") + ) + File(hashcode_file, + content = hashcode, + mode = 0644, ) if params.hdp_stack_version != "" and compare_versions(params.hdp_stack_version, '2.2') >= 0: http://git-wip-us.apache.org/repos/asf/ambari/blob/b79fd597/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie_service.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie_service.py b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie_service.py index ef721ba..6afd250 100644 --- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie_service.py +++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie_service.py @@ -19,6 +19,7 @@ limitations under the License. """ import os from resource_management import * +from resource_management.libraries.providers.hdfs_resource import WebHDFSUtil from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl from ambari_commons import OSConst @@ -69,9 +70,6 @@ def oozie_service(action = 'start', rolling_restart=False): db_connection_check_command = None if not rolling_restart: - cmd1 = format("cd {oozie_tmp_dir} && {oozie_home}/bin/ooziedb.sh create -sqlfile oozie.sql -run") - cmd2 = format("{kinit_if_needed} {put_shared_lib_to_hdfs_cmd} ; hadoop --config {hadoop_conf_dir} dfs -chmod -R 755 {oozie_hdfs_user_dir}/share") - if not os.path.isfile(params.target) and params.jdbc_driver_name == "org.postgresql.Driver": print format("ERROR: jdbc file {target} is unavailable. Please, follow next steps:\n" \ "1) Download postgresql-9.0-801.jdbc4.jar.\n2) Create needed directory: mkdir -p {oozie_home}/libserver/\n" \ @@ -83,13 +81,38 @@ def oozie_service(action = 'start', rolling_restart=False): if db_connection_check_command: Execute( db_connection_check_command, tries=5, try_sleep=10) - Execute( cmd1, user = params.oozie_user, not_if = no_op_test, - ignore_failures = True ) - - not_if_command = as_user(format("{kinit_if_needed} hadoop --config {hadoop_conf_dir} dfs -ls /user/oozie/share | awk 'BEGIN {{count=0;}} /share/ {{count++}} END {{if (count > 0) {{exit 0}} else {{exit 1}}}}'"), - params.oozie_user) - Execute( cmd2, user = params.oozie_user, not_if = not_if_command, - path = params.execute_path ) + Execute( format("cd {oozie_tmp_dir} && {oozie_home}/bin/ooziedb.sh create -sqlfile oozie.sql -run"), + user = params.oozie_user, not_if = no_op_test, + ignore_failures = True + ) + + if params.security_enabled: + Execute(kinit_if_needed, + user = params.oozie_user, + ) + + if WebHDFSUtil.is_webhdfs_available(params.is_webhdfs_enabled, params.default_fs): + # check with webhdfs is much faster than executing hadoop fs -ls. + util = WebHDFSUtil(params.hdfs_site, params.oozie_user, params.security_enabled) + list_status = util.run_command(params.hdfs_share_dir, 'GETFILESTATUS', method='GET', ignore_status_codes=['404'], assertable_result=False) + hdfs_share_dir_exists = ('FileStatus' in list_status) + else: + # have to do time expensive hadoop fs -ls check. + hdfs_share_dir_exists = shell.call(format("{kinit_if_needed} hadoop --config {hadoop_conf_dir} dfs -ls {hdfs_share_dir} | awk 'BEGIN {{count=0;}} /share/ {{count++}} END {{if (count > 0) {{exit 0}} else {{exit 1}}}}'"), + user=params.oozie_user)[0] + + if not hdfs_share_dir_exists: + Execute( params.put_shared_lib_to_hdfs_cmd, + user = params.oozie_user, + path = params.execute_path + ) + params.HdfsResource(format("{oozie_hdfs_user_dir}/share"), + type="directory", + action="create_on_execute", + mode=0755, + recursive_chmod=True, + ) + params.HdfsResource(None, action="execute") # start oozie Execute( start_cmd, environment=environment, user = params.oozie_user, http://git-wip-us.apache.org/repos/asf/ambari/blob/b79fd597/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py index 6963410..942b171 100644 --- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py +++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py @@ -142,6 +142,7 @@ if 'oozie.https.port' in config['configurations']['oozie-site'] or 'oozie.https. else: oozie_secure = '' +hdfs_site = config['configurations']['hdfs-site'] fs_root = config['configurations']['core-site']['fs.defaultFS'] if Script.is_hdp_stack_greater_or_equal("2.0") and Script.is_hdp_stack_less_than("2.2"): @@ -177,6 +178,7 @@ else: target = format("{oozie_libext_dir}/{jdbc_driver_jar}") +hdfs_share_dir = "/user/oozie/share" ambari_server_hostname = config['clusterHostInfo']['ambari_server_host'][0] falcon_host = default("/clusterHostInfo/falcon_server_hosts", []) has_falcon_host = not len(falcon_host) == 0 @@ -210,6 +212,8 @@ HdfsResource = functools.partial( default_fs = default_fs ) +is_webhdfs_enabled = config['configurations']['hdfs-site']['dfs.webhdfs.enabled'] + # The logic for LZO also exists in HDFS' params.py io_compression_codecs = default("/configurations/core-site/io.compression.codecs", None) lzo_enabled = io_compression_codecs is not None and "com.hadoop.compression.lzo" in io_compression_codecs.lower() http://git-wip-us.apache.org/repos/asf/ambari/blob/b79fd597/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py b/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py index 284f392..a75b7d0 100644 --- a/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py +++ b/ambari-server/src/test/python/stacks/2.0.6/OOZIE/test_oozie_server.py @@ -24,8 +24,15 @@ from stacks.utils.RMFTestCase import * from resource_management.core import shell from resource_management.core.exceptions import Fail from resource_management.libraries import functions +from resource_management.libraries.providers.hdfs_resource import WebHDFSUtil +import hashlib + +md5_mock = MagicMock() +md5_mock.hexdigest.return_value = "abc123hash" @patch("platform.linux_distribution", new = MagicMock(return_value="Linux")) +@patch.object(hashlib, "md5", new=MagicMock(return_value=md5_mock)) +@patch.object(WebHDFSUtil, "run_command", new=MagicMock(return_value={})) class TestOozieServer(RMFTestCase): COMMON_SERVICES_PACKAGE_DIR = "OOZIE/4.0.0.2.0/package" STACK_VERSION = "2.0.6" @@ -190,45 +197,49 @@ class TestOozieServer(RMFTestCase): recursive = True, ) self.assertResourceCalled('Execute', ('tar', '-xvf', '/usr/lib/oozie/oozie-sharelib.tar.gz', '-C', '/usr/lib/oozie'), - not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', - sudo = True, - ) + not_if = "ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1 || test -f /usr/lib/oozie/.hashcode && test -d /usr/lib/oozie/share && [[ `cat /usr/lib/oozie/.hashcode` == 'abc123hash' ]]", + sudo = True, + ) self.assertResourceCalled('Execute', ('cp', '/usr/share/HDP-oozie/ext-2.2.zip', '/usr/lib/oozie/libext'), - not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', - sudo = True, - ) + not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', + sudo = True, + ) self.assertResourceCalled('Execute', ('chown', u'oozie:hadoop', '/usr/lib/oozie/libext/ext-2.2.zip'), - not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', - sudo = True, - ) + not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', + sudo = True, + ) self.assertResourceCalled('Execute', ('chown', '-RL', u'oozie:hadoop', '/var/lib/oozie/oozie-server/conf'), - not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', - sudo = True, - ) + not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', + sudo = True, + ) self.assertResourceCalled('File', '/tmp/mysql-connector-java.jar', - content = DownloadSource('http://c6401.ambari.apache.org:8080/resources//mysql-jdbc-driver.jar'), - ) + content = DownloadSource('http://c6401.ambari.apache.org:8080/resources//mysql-jdbc-driver.jar'), + ) self.assertResourceCalled('Execute', ('cp', - '--remove-destination', - '/tmp/mysql-connector-java.jar', - '/usr/lib/oozie/libext/mysql-connector-java.jar'), - path = ['/bin', '/usr/bin/'], - sudo = True, - ) + '--remove-destination', + '/tmp/mysql-connector-java.jar', + '/usr/lib/oozie/libext/mysql-connector-java.jar'), + path = ['/bin', '/usr/bin/'], + sudo = True, + ) self.assertResourceCalled('File', '/usr/lib/oozie/libext/mysql-connector-java.jar', - owner = 'oozie', - group = 'hadoop', - ) + owner = 'oozie', + group = 'hadoop', + ) self.assertResourceCalled('Execute', 'ambari-sudo.sh cp /usr/lib/falcon/oozie/ext/falcon-oozie-el-extension-*.jar /usr/lib/oozie/libext', - not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', - ) + not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', + ) self.assertResourceCalled('Execute', 'ambari-sudo.sh chown oozie:hadoop /usr/lib/oozie/libext/falcon-oozie-el-extension-*.jar', - not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', - ) + not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', + ) self.assertResourceCalled('Execute', 'cd /var/tmp/oozie && /usr/lib/oozie/bin/oozie-setup.sh prepare-war ', - not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', - user = 'oozie', - ) + not_if = "ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1 || test -f /usr/lib/oozie/.hashcode && test -d /usr/lib/oozie/share && [[ `cat /usr/lib/oozie/.hashcode` == 'abc123hash' ]]", + user = 'oozie', + ) + self.assertResourceCalled('File', '/usr/lib/oozie/.hashcode', + content = 'abc123hash', + mode = 0644, + ) self.assertResourceCalled('Execute', ('chown', '-R', u'oozie:hadoop', '/var/lib/oozie/oozie-server'), sudo = True, ) @@ -249,11 +260,37 @@ class TestOozieServer(RMFTestCase): ignore_failures = True, user = 'oozie', ) - self.assertResourceCalled('Execute', ' hadoop --config /etc/hadoop/conf dfs -put /usr/lib/oozie/share /user/oozie ; hadoop --config /etc/hadoop/conf dfs -chmod -R 755 /user/oozie/share', - not_if = shell.as_user(" hadoop --config /etc/hadoop/conf dfs -ls /user/oozie/share | awk 'BEGIN {count=0;} /share/ {count++} END {if (count > 0) {exit 0} else {exit 1}}'", "oozie"), - user = u'oozie', + self.assertResourceCalled('Execute', 'hadoop --config /etc/hadoop/conf dfs -put /usr/lib/oozie/share /user/oozie', path = ['/usr/bin:/usr/bin'], - ) + user = 'oozie', + ) + self.assertResourceCalled('HdfsResource', '/user/oozie/share', + security_enabled = False, + hadoop_bin_dir = '/usr/bin', + keytab = UnknownConfigurationMock(), + default_fs = 'hdfs://c6401.ambari.apache.org:8020', + user = 'hdfs', + hdfs_site = self.getConfig()['configurations']['hdfs-site'], + kinit_path_local = '/usr/bin/kinit', + principal_name = UnknownConfigurationMock(), + recursive_chmod = True, + action = ['create_on_execute'], + hadoop_conf_dir = '/etc/hadoop/conf', + type = 'directory', + mode = 0755, + ) + self.assertResourceCalled('HdfsResource', None, + security_enabled = False, + hadoop_bin_dir = '/usr/bin', + keytab = UnknownConfigurationMock(), + default_fs = 'hdfs://c6401.ambari.apache.org:8020', + hdfs_site = self.getConfig()['configurations']['hdfs-site'], + kinit_path_local = '/usr/bin/kinit', + principal_name = UnknownConfigurationMock(), + user = 'hdfs', + action = ['execute'], + hadoop_conf_dir = '/etc/hadoop/conf', + ) self.assertResourceCalled('Execute', 'cd /var/tmp/oozie && /usr/lib/oozie/bin/oozie-start.sh', environment = {'OOZIE_CONFIG': '/etc/oozie/conf'}, not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', @@ -308,11 +345,41 @@ class TestOozieServer(RMFTestCase): ignore_failures = True, user = 'oozie', ) - self.assertResourceCalled('Execute', '/usr/bin/kinit -kt /etc/security/keytabs/oozie.service.keytab oozie/c6402.ambari.apache....@example.com; hadoop --config /etc/hadoop/conf dfs -put /usr/lib/oozie/share /user/oozie ; hadoop --config /etc/hadoop/conf dfs -chmod -R 755 /user/oozie/share', - not_if = shell.as_user("/usr/bin/kinit -kt /etc/security/keytabs/oozie.service.keytab oozie/c6402.ambari.apache....@example.com; hadoop --config /etc/hadoop/conf dfs -ls /user/oozie/share | awk 'BEGIN {count=0;} /share/ {count++} END {if (count > 0) {exit 0} else {exit 1}}'", "oozie"), - user = 'oozie', - path = ['/usr/bin:/usr/bin'], - ) + + self.assertResourceCalled('Execute', '/usr/bin/kinit -kt /etc/security/keytabs/oozie.service.keytab oozie/c6402.ambari.apache....@example.com;', + user = 'oozie', + ) + self.assertResourceCalled('Execute', 'hadoop --config /etc/hadoop/conf dfs -put /usr/lib/oozie/share /user/oozie', + path = ['/usr/bin:/usr/bin'], + user = 'oozie', + ) + self.assertResourceCalled('HdfsResource', '/user/oozie/share', + security_enabled = True, + hadoop_bin_dir = '/usr/bin', + keytab = '/etc/security/keytabs/hdfs.headless.keytab', + default_fs = 'hdfs://c6401.ambari.apache.org:8020', + user = 'hdfs', + hdfs_site = self.getConfig()['configurations']['hdfs-site'], + kinit_path_local = '/usr/bin/kinit', + principal_name = 'hdfs', + recursive_chmod = True, + action = ['create_on_execute'], + hadoop_conf_dir = '/etc/hadoop/conf', + type = 'directory', + mode = 0755, + ) + self.assertResourceCalled('HdfsResource', None, + security_enabled = True, + hadoop_bin_dir = '/usr/bin', + keytab = '/etc/security/keytabs/hdfs.headless.keytab', + default_fs = 'hdfs://c6401.ambari.apache.org:8020', + hdfs_site = self.getConfig()['configurations']['hdfs-site'], + kinit_path_local = '/usr/bin/kinit', + principal_name = 'hdfs', + user = 'hdfs', + action = ['execute'], + hadoop_conf_dir = '/etc/hadoop/conf', + ) self.assertResourceCalled('Execute', 'cd /var/tmp/oozie && /usr/lib/oozie/bin/oozie-start.sh', environment = {'OOZIE_CONFIG': '/etc/oozie/conf'}, not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', @@ -475,7 +542,7 @@ class TestOozieServer(RMFTestCase): recursive = True, ) self.assertResourceCalled('Execute', ('tar', '-xvf', '/usr/lib/oozie/oozie-sharelib.tar.gz', '-C', '/usr/lib/oozie'), - not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', + not_if = "ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1 || test -f /usr/lib/oozie/.hashcode && test -d /usr/lib/oozie/share && [[ `cat /usr/lib/oozie/.hashcode` == 'abc123hash' ]]", sudo = True, ) self.assertResourceCalled('Execute', ('cp', '/usr/share/HDP-oozie/ext-2.2.zip', '/usr/lib/oozie/libext'), @@ -497,9 +564,13 @@ class TestOozieServer(RMFTestCase): not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', ) self.assertResourceCalled('Execute', 'cd /var/tmp/oozie && /usr/lib/oozie/bin/oozie-setup.sh prepare-war ', - not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', + not_if = "ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1 || test -f /usr/lib/oozie/.hashcode && test -d /usr/lib/oozie/share && [[ `cat /usr/lib/oozie/.hashcode` == 'abc123hash' ]]", user = 'oozie', ) + self.assertResourceCalled('File', '/usr/lib/oozie/.hashcode', + content = 'abc123hash', + mode = 0644, + ) self.assertResourceCalled('Execute', ('chown', '-R', u'oozie:hadoop', '/var/lib/oozie/oozie-server'), sudo = True, ) @@ -643,7 +714,7 @@ class TestOozieServer(RMFTestCase): recursive = True, ) self.assertResourceCalled('Execute', ('tar', '-xvf', '/usr/lib/oozie/oozie-sharelib.tar.gz', '-C', '/usr/lib/oozie'), - not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', + not_if = "ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1 || test -f /usr/lib/oozie/.hashcode && test -d /usr/lib/oozie/share && [[ `cat /usr/lib/oozie/.hashcode` == 'abc123hash' ]]", sudo = True, ) self.assertResourceCalled('Execute', ('cp', '/usr/share/HDP-oozie/ext-2.2.zip', '/usr/lib/oozie/libext'), @@ -665,9 +736,13 @@ class TestOozieServer(RMFTestCase): not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', ) self.assertResourceCalled('Execute', 'cd /var/tmp/oozie && /usr/lib/oozie/bin/oozie-setup.sh prepare-war -secure', - not_if = 'ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1', + not_if = "ls /var/run/oozie/oozie.pid >/dev/null 2>&1 && ps -p `cat /var/run/oozie/oozie.pid` >/dev/null 2>&1 || test -f /usr/lib/oozie/.hashcode && test -d /usr/lib/oozie/share && [[ `cat /usr/lib/oozie/.hashcode` == 'abc123hash' ]]", user = 'oozie', ) + self.assertResourceCalled('File', '/usr/lib/oozie/.hashcode', + content = 'abc123hash', + mode = 0644, + ) self.assertResourceCalled('Execute', ('chown', '-R', u'oozie:hadoop', '/var/lib/oozie/oozie-server'), sudo = True, ) http://git-wip-us.apache.org/repos/asf/ambari/blob/b79fd597/ambari-server/src/test/python/stacks/utils/RMFTestCase.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/stacks/utils/RMFTestCase.py b/ambari-server/src/test/python/stacks/utils/RMFTestCase.py index 2f608c4..a186527 100644 --- a/ambari-server/src/test/python/stacks/utils/RMFTestCase.py +++ b/ambari-server/src/test/python/stacks/utils/RMFTestCase.py @@ -174,7 +174,7 @@ class RMFTestCase(TestCase): def _ppformat(self, val): if isinstance(val, dict) and len(val) > MAX_SHOWN_DICT_LEN: - return "self.getConfig()['configurations']['hdfs-site']" + return "self.getConfig()['configurations']['?']" val = pprint.pformat(val)