Repository: ambari Updated Branches: refs/heads/branch-2.5 06e88d39d -> 6b1d05ae8
AMBARI-19459 Optimizing services startup time when ranger admin is down (mugdha) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/6b1d05ae Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/6b1d05ae Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/6b1d05ae Branch: refs/heads/branch-2.5 Commit: 6b1d05ae8e68c49a3df20a16955e6b038cc31a72 Parents: 06e88d3 Author: Mugdha Varadkar <[email protected]> Authored: Wed Jan 11 18:17:42 2017 +0530 Committer: Mugdha Varadkar <[email protected]> Committed: Fri Jan 13 10:46:16 2017 +0530 ---------------------------------------------------------------------- .../functions/setup_ranger_plugin_xml.py | 44 ++++++++++++++------ 1 file changed, 31 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/6b1d05ae/ambari-common/src/main/python/resource_management/libraries/functions/setup_ranger_plugin_xml.py ---------------------------------------------------------------------- diff --git a/ambari-common/src/main/python/resource_management/libraries/functions/setup_ranger_plugin_xml.py b/ambari-common/src/main/python/resource_management/libraries/functions/setup_ranger_plugin_xml.py index 537aaa0..ba6061a 100644 --- a/ambari-common/src/main/python/resource_management/libraries/functions/setup_ranger_plugin_xml.py +++ b/ambari-common/src/main/python/resource_management/libraries/functions/setup_ranger_plugin_xml.py @@ -21,6 +21,7 @@ __all__ = ["setup_ranger_plugin"] import os +import ambari_simplejson as json from datetime import datetime from resource_management.libraries.functions.ranger_functions import Rangeradmin from resource_management.core.resources import File, Directory, Execute @@ -74,19 +75,36 @@ def setup_ranger_plugin(component_select_name, service_name, previous_jdbc_jar, component_conf_dir = conf_dict if plugin_enabled: - if api_version is not None and api_version == 'v2': - ranger_adm_obj = RangeradminV2(url=policymgr_mgr_url, skip_if_rangeradmin_down=skip_if_rangeradmin_down) - ranger_adm_obj.create_ranger_repository(service_name, repo_name, plugin_repo_dict, + + service_name_exist = False + policycache_path = os.path.join('/etc', 'ranger', repo_name, 'policycache') + try: + for cache_service in cache_service_list: + policycache_json_file = format('{policycache_path}/{cache_service}_{repo_name}.json') + if os.path.isfile(policycache_json_file) and os.path.getsize(policycache_json_file) > 0: + with open(policycache_json_file) as json_file: + json_data = json.load(json_file) + if 'serviceName' in json_data and json_data['serviceName'] == repo_name: + service_name_exist = True + Logger.info("Skipping Ranger API calls, as policy cache file exists for {0}".format(service_name)) + break + except Exception, err: + Logger.error("Error occurred while fetching service name from policy cache file.\nError: {0}".format(err)) + + if not service_name_exist: + if api_version is not None and api_version == 'v2': + ranger_adm_obj = RangeradminV2(url=policymgr_mgr_url, skip_if_rangeradmin_down=skip_if_rangeradmin_down) + ranger_adm_obj.create_ranger_repository(service_name, repo_name, plugin_repo_dict, + ranger_env_properties['ranger_admin_username'], ranger_env_properties['ranger_admin_password'], + ranger_env_properties['admin_username'], ranger_env_properties['admin_password'], + policy_user, is_security_enabled, is_stack_supports_ranger_kerberos, component_user, + component_user_principal, component_user_keytab) + else: + ranger_adm_obj = Rangeradmin(url=policymgr_mgr_url, skip_if_rangeradmin_down=skip_if_rangeradmin_down) + ranger_adm_obj.create_ranger_repository(service_name, repo_name, plugin_repo_dict, ranger_env_properties['ranger_admin_username'], ranger_env_properties['ranger_admin_password'], ranger_env_properties['admin_username'], ranger_env_properties['admin_password'], - policy_user,is_security_enabled,is_stack_supports_ranger_kerberos,component_user,component_user_principal,component_user_keytab) - - else: - ranger_adm_obj = Rangeradmin(url=policymgr_mgr_url, skip_if_rangeradmin_down=skip_if_rangeradmin_down) - ranger_adm_obj.create_ranger_repository(service_name, repo_name, plugin_repo_dict, - ranger_env_properties['ranger_admin_username'], ranger_env_properties['ranger_admin_password'], - ranger_env_properties['admin_username'], ranger_env_properties['admin_password'], - policy_user) + policy_user) current_datetime = datetime.now() @@ -106,7 +124,7 @@ def setup_ranger_plugin(component_select_name, service_name, previous_jdbc_jar, ) for cache_service in cache_service_list: - File(os.path.join('/etc', 'ranger', repo_name, 'policycache',format('{cache_service}_{repo_name}.json')), + File(os.path.join('/etc', 'ranger', repo_name, 'policycache', format('{cache_service}_{repo_name}.json')), owner = component_user, group = component_group, mode = 0644 @@ -136,7 +154,7 @@ def setup_ranger_plugin(component_select_name, service_name, previous_jdbc_jar, owner = component_user, group = component_group, mode=0744) - else : + else: XmlConfig("ranger-policymgr-ssl.xml", conf_dir=component_conf_dir, configurations=plugin_policymgr_ssl_properties,
