[
https://issues.apache.org/jira/browse/KAFKA-18119?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17902435#comment-17902435
]
Greg Harris commented on KAFKA-18119:
-------------------------------------
There's a bit of a chicken-and-egg problem here:
* Versioned#version() is a Java method, meaning that we need to finish
ClassLoader#loadClass() in order to discover the version of a plugin.
* Correctly implementing DelegatingClassLoader#loadClass() requires all
Versioned#version() calls need to be finished to know exactly which version a
the plugin to load.
We need to pick one to go first, or else we give up correctness.
> Service loading loads incorrect plugin version.
> -----------------------------------------------
>
> Key: KAFKA-18119
> URL: https://issues.apache.org/jira/browse/KAFKA-18119
> Project: Kafka
> Issue Type: Bug
> Components: connect
> Affects Versions: 3.6.0, 3.7.0, 3.6.1, 3.6.2, 3.8.0, 3.7.1, 3.9.0, 3.8.1
> Reporter: Snehashis Pal
> Priority: Major
>
> Kafka connect seems to be loading incorrect version of connect plugins (such
> as connectors) if run in SERVICE_LOAD mode. If the worker is started with
> only service loading enabled, it does not seem to be loading the latest
> version of a plugin available in its plugins path. Rather it always seems to
> be defaulting to the plugin version provided in the classpath.
> I observed this when I placed an updated json-converter in the plugins path
> and a connector instantiated, still defaulted to using the one provided in
> the connect (Kafka) distribution. It does not happen when the older
> reflections-based plugin scanner is used. This can be reproduced by following
> the same process, noted down below
> * Set {*}plugin.discovery{*}=SERVICE_LOAD
> * Install a newer version of json-converter
> ({*}org.apache.kafka.connect.json.JsonConverter{*}) than the one provided in
> the distribution. Usually, the bundled version is the same as the current
> Kafka distribution.
> * Start a connector with either *key.converter* or *value.converter* set to
> the json converter. Without this in the config the latest version is loaded.
> It might be hard to judge which version of the converter is loaded. For
> testing it might be good to build a new json converter with some log lines
> depicting the version in use. Another way would be run connect in debug mode
> and add some breakpoints in the startTask method in Worker where the
> converters are initialised.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)