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()) {