[ 
https://issues.apache.org/jira/browse/KAFKA-18211?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Snehashis Pal updated KAFKA-18211:
----------------------------------
    Description: 
Connect used to use reflections scanner for scanning and identifying connect 
plugins in its plugin.path. This would load said plugins in isolation via the 
use of a child first PluginClassloader, which is designed to load class from 
its set of URIs before delegating to parent, if not found. This effectively 
enforces that if a plugin and its dependencies are part of a plugin path it 
would not conflict with other plugins in the plugin path or plugins in 
classpath. 

 

GlassGraph was introduced as a replacement for the older reflections scanner in 
[KAFKA-15203 Use Classgraph since org.reflections is no longer under 
maintainence by PARADOXST · Pull Request #16604 · 
apache/kafka|https://github.com/apache/kafka/pull/16604]. It is used in place 
of reflections scanner for finding plugins during plugin scanning. The issue 
here is that it is missing any plugins present in isolated plugin paths if its 
already present in classpath.  We can repro this by adding the json converter 
under an isolated plugin path and starting connect with debug logs. We can see 
the logs from ReflectionsScanner and find that the ClassGraph loader is always 
fetching the plugin from the classpath even though the PluginClassLoader is 
provided. This is causing 
[kafka/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/isolation/ReflectionScanner.java
 at 520681c38dbefe497181c4fd5dfc793d54233408 · 
apache/kafka|https://github.com/apache/kafka/blob/520681c38dbefe497181c4fd5dfc793d54233408/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/isolation/ReflectionScanner.java#L134]
 check to fail with the logs like. 
{code:java}
[2024-12-11 07:29:28,968] DEBUG class 
org.apache.kafka.connect.json.JsonConverter from other classloader 
jdk.internal.loader.ClassLoaders$AppClassLoader@c387f44 is visible from 
C:\Users\user\Desktop\confluent\testing\plugins3\connect-file-1.2.1-T-0.9.0-P-3.1,
 excluding to prevent isolated loading 
(org.apache.kafka.connect.runtime.isolation.ReflectionScanner:135)
[2024-12-11 07:29:28,969] DEBUG class 
org.apache.kafka.connect.json.JsonConverter from other classloader 
jdk.internal.loader.ClassLoaders$AppClassLoader@c387f44 is visible from 
C:\Users\user\Desktop\confluent\testing\plugins3\connect-file-1.2.1-T-0.9.0-P-3.1,
 excluding to prevent isolated loading 
(org.apache.kafka.connect.runtime.isolation.ReflectionScanner:135) {code}

  was:
Connect used to use reflections scanner for scanning and identifying connect 
plugins in its plugin.path. This would load said plugins in isolation via the 
use of a child first PluginClassloader, which is designed to load class from 
its set of URIs before delegating to parent, if not found. This effectively 
enforces that if a plugin and its dependencies are part of a plugin path it 
would not conflict with other plugins in the plugin path or plugins in 
classpath. 

 

GlassGraph was introduced as a replacement for the older reflections scanner in 
[KAFKA-15203 Use Classgraph since org.reflections is no longer under 
maintainence by PARADOXST · Pull Request #16604 · 
apache/kafka|https://github.com/apache/kafka/pull/16604]. It is used in place 
of reflections scanner for finding plugins during plugin scanning. The issue 
here is that it is missing any plugins present in isolated plugin paths if its 
already present in classpath. 

 


> ClassGraph scanning does not correctly find isolated connect plugins
> --------------------------------------------------------------------
>
>                 Key: KAFKA-18211
>                 URL: https://issues.apache.org/jira/browse/KAFKA-18211
>             Project: Kafka
>          Issue Type: Bug
>          Components: connect
>    Affects Versions: 4.0.0
>            Reporter: Snehashis Pal
>            Priority: Blocker
>
> Connect used to use reflections scanner for scanning and identifying connect 
> plugins in its plugin.path. This would load said plugins in isolation via the 
> use of a child first PluginClassloader, which is designed to load class from 
> its set of URIs before delegating to parent, if not found. This effectively 
> enforces that if a plugin and its dependencies are part of a plugin path it 
> would not conflict with other plugins in the plugin path or plugins in 
> classpath. 
>  
> GlassGraph was introduced as a replacement for the older reflections scanner 
> in [KAFKA-15203 Use Classgraph since org.reflections is no longer under 
> maintainence by PARADOXST · Pull Request #16604 · 
> apache/kafka|https://github.com/apache/kafka/pull/16604]. It is used in place 
> of reflections scanner for finding plugins during plugin scanning. The issue 
> here is that it is missing any plugins present in isolated plugin paths if 
> its already present in classpath.  We can repro this by adding the json 
> converter under an isolated plugin path and starting connect with debug logs. 
> We can see the logs from ReflectionsScanner and find that the ClassGraph 
> loader is always fetching the plugin from the classpath even though the 
> PluginClassLoader is provided. This is causing 
> [kafka/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/isolation/ReflectionScanner.java
>  at 520681c38dbefe497181c4fd5dfc793d54233408 · 
> apache/kafka|https://github.com/apache/kafka/blob/520681c38dbefe497181c4fd5dfc793d54233408/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/isolation/ReflectionScanner.java#L134]
>  check to fail with the logs like. 
> {code:java}
> [2024-12-11 07:29:28,968] DEBUG class 
> org.apache.kafka.connect.json.JsonConverter from other classloader 
> jdk.internal.loader.ClassLoaders$AppClassLoader@c387f44 is visible from 
> C:\Users\user\Desktop\confluent\testing\plugins3\connect-file-1.2.1-T-0.9.0-P-3.1,
>  excluding to prevent isolated loading 
> (org.apache.kafka.connect.runtime.isolation.ReflectionScanner:135)
> [2024-12-11 07:29:28,969] DEBUG class 
> org.apache.kafka.connect.json.JsonConverter from other classloader 
> jdk.internal.loader.ClassLoaders$AppClassLoader@c387f44 is visible from 
> C:\Users\user\Desktop\confluent\testing\plugins3\connect-file-1.2.1-T-0.9.0-P-3.1,
>  excluding to prevent isolated loading 
> (org.apache.kafka.connect.runtime.isolation.ReflectionScanner:135) {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to