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

rmani pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ranger.git


The following commit(s) were added to refs/heads/master by this push:
     new 3cd11e7  RANGER-2376:Ranger Plugin ClassLoader Doesn't Restore Thread 
ClassLoader
3cd11e7 is described below

commit 3cd11e75adc5e5ad11aab907f458fd62ec561826
Author: rmani <[email protected]>
AuthorDate: Wed Mar 27 15:41:53 2019 -0700

    RANGER-2376:Ranger Plugin ClassLoader Doesn't Restore Thread ClassLoader
    
    Change-Id: I2e8375bf5ccd0107e12ffeb35c868e43eb93165d
    
    Signed-off-by: rmani <[email protected]>
---
 .../classloader/RangerPluginClassLoader.java       | 27 ++++++++++++++++------
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git 
a/ranger-plugin-classloader/src/main/java/org/apache/ranger/plugin/classloader/RangerPluginClassLoader.java
 
b/ranger-plugin-classloader/src/main/java/org/apache/ranger/plugin/classloader/RangerPluginClassLoader.java
index 41f53c0..d4c3aed 100644
--- 
a/ranger-plugin-classloader/src/main/java/org/apache/ranger/plugin/classloader/RangerPluginClassLoader.java
+++ 
b/ranger-plugin-classloader/src/main/java/org/apache/ranger/plugin/classloader/RangerPluginClassLoader.java
@@ -32,10 +32,12 @@ import org.slf4j.LoggerFactory;
 
 public class RangerPluginClassLoader extends URLClassLoader {
        private static final Logger LOG = 
LoggerFactory.getLogger(RangerPluginClassLoader.class);
-       
-       private static volatile RangerPluginClassLoader me                   = 
null;
+
+    ThreadLocal<ClassLoader> preActivateClassLoader = new ThreadLocal<>();
+
+       private static volatile RangerPluginClassLoader me               = null;
        private static  MyClassLoader                           
componentClassLoader = null;
-               
+
        public RangerPluginClassLoader(String pluginType, Class<?> pluginClass 
) throws Exception {
                
super(RangerPluginClassLoaderUtil.getInstance().getPluginFilesForServiceTypeAndPluginclass(pluginType,
 pluginClass), null);
                componentClassLoader = AccessController.doPrivileged(
@@ -231,6 +233,8 @@ public class RangerPluginClassLoader extends URLClassLoader 
{
 
         //componentClassLoader.set(new 
MyClassLoader(Thread.currentThread().getContextClassLoader()));
 
+        
preActivateClassLoader.set(Thread.currentThread().getContextClassLoader());
+
         Thread.currentThread().setContextClassLoader(this);
 
         if(LOG.isDebugEnabled()) {
@@ -244,12 +248,21 @@ public class RangerPluginClassLoader extends 
URLClassLoader {
           LOG.debug("==> RangerPluginClassLoader.deactivate()");
        }
 
-       MyClassLoader savedClassLoader = getComponentClassLoader();
+       ClassLoader classLoader = preActivateClassLoader.get();
+
+       if (classLoader != null) {
+           preActivateClassLoader.remove();
+       } else {
+           MyClassLoader savedClassLoader = getComponentClassLoader();
+           if (savedClassLoader != null && savedClassLoader.getParent() != 
null) {
+               classLoader = savedClassLoader.getParent();
+           }
+       }
 
-       if(savedClassLoader != null && savedClassLoader.getParent() != null) {
-          
Thread.currentThread().setContextClassLoader(savedClassLoader.getParent());
+       if (classLoader != null) {
+           Thread.currentThread().setContextClassLoader(classLoader);
        } else {
-          LOG.warn("RangerPluginClassLoader.deactivate() was not 
successful.Couldn't not get the saved componentClassLoader...");
+           LOG.warn("RangerPluginClassLoader.deactivate() was not successful. 
Couldn't not get the saved classLoader...");
        }
 
        if(LOG.isDebugEnabled()) {

Reply via email to