This is an automated email from the ASF dual-hosted git repository.

madhan pushed a commit to branch ranger-2.5
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/ranger-2.5 by this push:
     new 5ba70b7f2 RANGER-3967: fixed service creation to not fail due to 
missing implClass
5ba70b7f2 is described below

commit 5ba70b7f2709dd451f0844921e304c9b87dbb405
Author: Madhan Neethiraj <mad...@apache.org>
AuthorDate: Wed Jul 3 11:26:20 2024 -0700

    RANGER-3967: fixed service creation to not fail due to missing implClass
    
    (cherry picked from commit aaaed10ba1c63d8cca0e9efb11fa05604b115fe0)
---
 .../java/org/apache/ranger/biz/ServiceMgr.java     | 67 ++++++++++------------
 1 file changed, 30 insertions(+), 37 deletions(-)

diff --git a/security-admin/src/main/java/org/apache/ranger/biz/ServiceMgr.java 
b/security-admin/src/main/java/org/apache/ranger/biz/ServiceMgr.java
index 3892a2de2..f0905542c 100755
--- a/security-admin/src/main/java/org/apache/ranger/biz/ServiceMgr.java
+++ b/security-admin/src/main/java/org/apache/ranger/biz/ServiceMgr.java
@@ -66,18 +66,22 @@ import static 
org.apache.ranger.plugin.policyengine.RangerPolicyEngine.GROUP_PUB
 
 @Component
 public class ServiceMgr {
-
        private static final Logger LOG = 
LoggerFactory.getLogger(ServiceMgr.class);
        
-       private static final String LOOKUP_PRINCIPAL = 
"ranger.lookup.kerberos.principal";
-       private static final String LOOKUP_KEYTAB = 
"ranger.lookup.kerberos.keytab";
-    private static final String ADMIN_USER_PRINCIPAL = 
"ranger.admin.kerberos.principal";
-    private static final String ADMIN_USER_KEYTAB = 
"ranger.admin.kerberos.keytab";
-       private static final String AUTHENTICATION_TYPE = 
"hadoop.security.authentication";
-       private static final String KERBEROS_TYPE = "kerberos";
-       static final String NAME_RULES = "hadoop.security.auth_to_local";
-       static final String HOST_NAME = "ranger.service.host";
-       
+       private static final String LOOKUP_PRINCIPAL     = 
"ranger.lookup.kerberos.principal";
+       private static final String LOOKUP_KEYTAB        = 
"ranger.lookup.kerberos.keytab";
+       private static final String ADMIN_USER_PRINCIPAL = 
"ranger.admin.kerberos.principal";
+       private static final String ADMIN_USER_KEYTAB    = 
"ranger.admin.kerberos.keytab";
+       private static final String AUTHENTICATION_TYPE  = 
"hadoop.security.authentication";
+       private static final String KERBEROS_TYPE        = "kerberos";
+       private static final String NAME_RULES           = 
"hadoop.security.auth_to_local";
+       private static final String HOST_NAME            = 
"ranger.service.host";
+
+       private static final long _DefaultTimeoutValue_Lookp          = 1000; 
// 1 s
+       private static final long _DefaultTimeoutValue_ValidateConfig = 10000; 
// 10 s
+
+       private static final Map<String, Class<? extends RangerBaseService>> 
serviceTypeClassMap = new HashMap<>();
+
        @Autowired
        RangerServiceService rangerSvcService;
        
@@ -362,7 +366,7 @@ public class ServiceMgr {
                        RangerServiceDef serviceDef = svcStore == null ? null : 
svcStore.getServiceDefByName(serviceType);
 
                        if(serviceDef != null) {
-                               Class<RangerBaseService> cls = 
getClassForServiceType(serviceDef);
+                               Class<? extends RangerBaseService> cls = 
getClassForServiceType(serviceDef);
 
                                if(cls != null) {
                                        ret = cls.newInstance();
@@ -390,16 +394,13 @@ public class ServiceMgr {
                return ret;
        }
 
-       private static Map<String, Class<RangerBaseService>> 
serviceTypeClassMap = new HashMap<String, Class<RangerBaseService>>();
-       private static String RANGER_DEFAULT_SERVICE_NAME = 
"org.apache.ranger.plugin.service.RangerDefaultService";
-
        @SuppressWarnings("unchecked")
-       private Class<RangerBaseService> 
getClassForServiceType(RangerServiceDef serviceDef) throws Exception {
+       private Class<? extends RangerBaseService> 
getClassForServiceType(RangerServiceDef serviceDef) throws Exception {
                if(LOG.isDebugEnabled()) {
                        LOG.debug("==> ServiceMgr.getClassForServiceType(" + 
serviceDef + ")");
                }
 
-               Class<RangerBaseService> ret = null;
+               Class<? extends RangerBaseService> ret = null;
 
                if(serviceDef != null) {
                        String serviceType = serviceDef.getName();
@@ -416,36 +417,31 @@ public class ServiceMgr {
                                                if(LOG.isDebugEnabled()) {
                                                        
LOG.debug("ServiceMgr.getClassForServiceType(" + serviceType + "): 
service-class " + clsName + " not found in cache");
                                                }
-                                               try {
-
-                                                       Class<?> cls;
 
+                                               try {
                                                        if 
(StringUtils.isEmpty(clsName)) {
                                                                if 
(LOG.isDebugEnabled()) {
                                                                        
LOG.debug("No service-class configured for service-type:[" + serviceType + "], 
using RangerDefaultService");
                                                                }
-                                                               clsName = 
RANGER_DEFAULT_SERVICE_NAME;
 
-                                                               cls = 
Class.forName(clsName);
+                                                               ret = 
RangerDefaultService.class;
                                                        } else {
-                                                               URL[] 
pluginFiles = getPluginFilesForServiceType(serviceType);
-
-                                                               URLClassLoader 
clsLoader = new URLClassLoader(pluginFiles, 
Thread.currentThread().getContextClassLoader());
+                                                               URL[]          
pluginFiles = getPluginFilesForServiceType(serviceType);
+                                                               URLClassLoader 
clsLoader   = new URLClassLoader(pluginFiles, 
Thread.currentThread().getContextClassLoader());
+                                                               Class<?>       
cls         = Class.forName(clsName, true, clsLoader);
 
-                                                               cls = 
Class.forName(clsName, true, clsLoader);
+                                                               ret = (Class<? 
extends RangerBaseService>) cls;
                                                        }
+                                               } catch (Exception excp) {
+                                                       
LOG.warn("ServiceMgr.getClassForServiceType(" + serviceType + "): failed to 
find service-class '" + clsName + "'. Resource lookup will not be available. 
Using RangerDefaultService", excp);
 
-                                                       ret = 
(Class<RangerBaseService>) cls;
+                                                       ret = 
RangerDefaultService.class;
+                                               }
 
-                                                       
serviceTypeClassMap.put(serviceType, ret);
+                                               
serviceTypeClassMap.put(serviceType, ret);
 
-                                                       if 
(LOG.isDebugEnabled()) {
-                                                               
LOG.debug("ServiceMgr.getClassForServiceType(" + serviceType + "): 
service-class " + clsName + " added to cache");
-                                                       }
-                                               } catch (Exception excp) {
-                                                       
LOG.warn("ServiceMgr.getClassForServiceType(" + serviceType + "): failed to 
find service-class '" + clsName + "'. Resource lookup will not be available", 
excp);
-                                                       //Let's propagate the 
error
-                                                       throw new 
Exception(serviceType + " failed to find service class " + clsName + ". 
Resource lookup will not be available. Please make sure plugin jar is in the 
correct place.");
+                                               if (LOG.isDebugEnabled()) {
+                                                       
LOG.debug("ServiceMgr.getClassForServiceType(" + serviceType + "): 
service-class " + ret.getCanonicalName() + " added to cache");
                                                }
                                        } else {
                                                if(LOG.isDebugEnabled()) {
@@ -596,9 +592,6 @@ public class ServiceMgr {
                return ret;
        }
 
-       static final long _DefaultTimeoutValue_Lookp = 1000; // 1 s
-       static final long _DefaultTimeoutValue_ValidateConfig = 10000; // 10 s
-
        long getTimeoutValueForLookupInMilliSeconds(RangerBaseService svc) {
                return getTimeoutValueInMilliSeconds("resource.lookup", svc, 
_DefaultTimeoutValue_Lookp);
        }

Reply via email to