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,

Reply via email to