abhishekagarwal87 commented on a change in pull request #10761:
URL: https://github.com/apache/druid/pull/10761#discussion_r558817270
##########
File path: services/src/main/java/org/apache/druid/cli/PullDependencies.java
##########
@@ -83,6 +83,9 @@
.put("commons-beanutils", "commons-beanutils")
.put("org.apache.commons", "commons-compress")
.put("org.apache.zookeeper", "zookeeper")
+ .put("com.fasterxml.jackson.core", "jackson-databind")
+ .put("com.fasterxml.jackson.core", "jackson-core")
+ .put("com.fasterxml.jackson.core", "jackson-annotations")
Review comment:
I will try to add as much context as possible -
Usually, custom classloaders in Java have parent first behavior. That is,
say there is a classloader X of which Y is a parent. Now when X is trying to
load a class, it will first ask Y to load it if the class is not loaded. When
`useExtensionClassloaderFirst` is set to false, we inverse the relationship. If
a class is not loaded, X will load this class by itself first. X will delegate
loading to Y if it can't find the class.
Now, this child first behavior can cause a situation where X loads a class
SimpleModule and its superclass Module on its own, and the same classes are
also loaded by Y too. When you cast a class `SimpleModule` loaded by X to a
class `Module` loaded by Y, you will get an exception since classloaders are
different for these classes. This is exactly what happens when the broker is
loading the extension modules.
So ideally we want to avoid a situation where you have the same classes
loaded by both classloaders. `PROVIDED_CORE` is a way within PullDependencies
to exclude certain dependencies being shipped with the extension since they are
already being provided by the core. That way, class can only be loaded by the
parent classloader.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]