Patson Luk created SOLR-17297:
---------------------------------
Summary: Classloading issue with plugin and modules
Key: SOLR-17297
URL: https://issues.apache.org/jira/browse/SOLR-17297
Project: Solr
Issue Type: Bug
Security Level: Public (Default Security Level. Issues are Public)
Components: SolrCloud
Affects Versions: 9.3
Reporter: Patson Luk
h2. Summary
Using plugin jar and enabling any modules could trigger
{{java.lang.ClassNotFoundException}}
h2. Description
1. An implementation of {{org.apache.lucene.codecs.PostingsFormat}} with the
jar within the <solr install dir>/lib
2. Enable modules in solr.xml for example <str
name="modules">opentelemetry</str>
3. Now on startup. As a part of {{NodeConfig#setupSharedLib}}, it would load
all the SPIs, it locates our jar and loads the class with a
{{FactoryURLClassLoader}} with the classpaths point at the jar of the lib,
which is correct
4. After {{NodeConfig#setupSharedLib}}, {{NodeConfig#initModules}} is invoked,
which eventually calls {{SolrResourceLoader#addURLsToClassLoader}} that closes
the previous class loader, which is the one used in 3.
5. Now a core is loaded with that codec, it runs the <init> code which
references other classes within our plugin jar, but unfortunately it would use
the Classloader that loads our class in step 3., and such loader is marked as
"closed" hence no longer load the correct resource/class. This triggers
ClassNotFoundException.
I have tried several things, the only thing that seems to work so far is
commenting out {{IOUtils.closeWhileHandlingException(oldLoader);}} in
{{SolrResourceLoader#addURLsToClassLoader}}, which is likely not the right
workaround as the {{closeWhileHandlingException}} should be there for a reason
;)
Switching {{setupSharedLib}} and {{initModules}} might work too (haven't
tested), but I don't want to try any weird changes since I don't really know
the ordering significance.
Would appreciate some helps from the Solr experts! :)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]