This is an automated email from the ASF dual-hosted git repository. madhan 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 787639a01 RANGER-3636: updated plugin classloader to use classloader of shim class as parent (#548) 787639a01 is described below commit 787639a0183f7ddaacf1fbaa91d711584615cc2d Author: Madhan Neethiraj <mad...@apache.org> AuthorDate: Thu Jun 26 20:22:10 2025 +0530 RANGER-3636: updated plugin classloader to use classloader of shim class as parent (#548) --- .../classloader/RangerPluginClassLoader.java | 28 ++++++++++++---------- 1 file changed, 16 insertions(+), 12 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 18bf15f85..befd591d3 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 @@ -41,13 +41,13 @@ public class RangerPluginClassLoader extends URLClassLoader { private static final Map<String, RangerPluginClassLoader> PLUGIN_CLASS_LOADERS = new HashMap<>(); - private final MyClassLoader componentClassLoader; + private final ComponentClassLoader componentClassLoader; private final ThreadLocal<ClassLoader> preActivateClassLoader = new ThreadLocal<>(); public RangerPluginClassLoader(String pluginType, Class<?> pluginClass) throws Exception { super(RangerPluginClassLoaderUtil.getInstance().getPluginFilesForServiceTypeAndPluginclass(pluginType, pluginClass), null); - componentClassLoader = AccessController.doPrivileged((PrivilegedAction<MyClassLoader>) () -> new MyClassLoader(Thread.currentThread().getContextClassLoader())); + componentClassLoader = AccessController.doPrivileged((PrivilegedAction<ComponentClassLoader>) () -> new ComponentClassLoader(pluginClass)); } public static RangerPluginClassLoader getInstance(final String pluginType, final Class<?> pluginClass) throws Exception { @@ -104,7 +104,7 @@ public Class<?> findClass(String name) throws ClassNotFoundException { // Use the Component ClassLoader findClass to load when childClassLoader fails to find LOG.debug("RangerPluginClassLoader.findClass({}): calling componentClassLoader.findClass()", name); - MyClassLoader savedClassLoader = getComponentClassLoader(); + ComponentClassLoader savedClassLoader = getComponentClassLoader(); if (savedClassLoader != null) { ret = savedClassLoader.findClass(name); @@ -125,7 +125,7 @@ public URL findResource(String name) { if (ret == null) { LOG.debug("RangerPluginClassLoader.findResource({}): calling componentClassLoader.getResources()", name); - MyClassLoader savedClassLoader = getComponentClassLoader(); + ComponentClassLoader savedClassLoader = getComponentClassLoader(); if (savedClassLoader != null) { ret = savedClassLoader.getResource(name); @@ -165,7 +165,7 @@ public synchronized Class<?> loadClass(String name) throws ClassNotFoundExceptio // Use the Component ClassLoader loadClass to load when childClassLoader fails to find LOG.debug("RangerPluginClassLoader.loadClass({}): calling componentClassLoader.loadClass()", name); - MyClassLoader savedClassLoader = getComponentClassLoader(); + ComponentClassLoader savedClassLoader = getComponentClassLoader(); if (savedClassLoader != null) { ret = savedClassLoader.loadClass(name); @@ -198,7 +198,7 @@ public Enumeration<URL> findResourcesUsingComponentClassLoader(String name) { try { LOG.debug("RangerPluginClassLoader.findResourcesUsingComponentClassLoader({}): calling componentClassLoader.getResources()", name); - MyClassLoader savedClassLoader = getComponentClassLoader(); + ComponentClassLoader savedClassLoader = getComponentClassLoader(); if (savedClassLoader != null) { ret = savedClassLoader.getResources(name); @@ -232,7 +232,7 @@ public void deactivate() { if (classLoader != null) { preActivateClassLoader.remove(); } else { - MyClassLoader savedClassLoader = getComponentClassLoader(); + ComponentClassLoader savedClassLoader = getComponentClassLoader(); if (savedClassLoader != null && savedClassLoader.getParent() != null) { classLoader = savedClassLoader.getParent(); @@ -252,7 +252,7 @@ public ClassLoader getPrevActiveClassLoader() { ClassLoader ret = preActivateClassLoader.get(); if (ret == null) { - MyClassLoader savedClassLoader = getComponentClassLoader(); + ComponentClassLoader savedClassLoader = getComponentClassLoader(); if (savedClassLoader != null && savedClassLoader.getParent() != null) { ret = savedClassLoader.getParent(); @@ -262,20 +262,24 @@ public ClassLoader getPrevActiveClassLoader() { return ret; } - private MyClassLoader getComponentClassLoader() { + private ComponentClassLoader getComponentClassLoader() { return componentClassLoader; //return componentClassLoader.get(); } - static class MyClassLoader extends ClassLoader { - public MyClassLoader(ClassLoader realClassLoader) { - super(realClassLoader); + static class ComponentClassLoader extends ClassLoader { + public ComponentClassLoader(Class<?> pluginShimClass) { + super(getClassLoaderOfShimClassOrCurrentThread(pluginShimClass)); } @Override public Class<?> findClass(String name) throws ClassNotFoundException { //NO PMD return super.findClass(name); } + + private static ClassLoader getClassLoaderOfShimClassOrCurrentThread(Class<?> pluginShimClass) { + return pluginShimClass != null ? pluginShimClass.getClassLoader() : Thread.currentThread().getContextClassLoader(); + } } static class MergeEnumeration implements Enumeration<URL> { //NO PMD