You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ranger.apache.org by rm...@apache.org on 2019/03/27 22:44:56 UTC

[ranger] branch master updated: RANGER-2376:Ranger Plugin ClassLoader Doesn't Restore Thread ClassLoader

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 <rm...@hortonworks.com>
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 <rm...@hortonworks.com>
---
 .../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()) {