[ 
https://issues.apache.org/jira/browse/SOLR-16203?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17539297#comment-17539297
 ] 

Tomoko Uchida commented on SOLR-16203:
--------------------------------------

I was not knowledgeable on Solr class loader when I made the change in 
SOLR-13593 but applied the new lookup feature in Lucene to Solr following the 
suggestions there.
As a simplistic and conservative option, does it make sense to forbid the 
combination of ClassicIndexSchemaFactory and the SPI lookups (if it's possible 
to detect which SchemaFactory is used in the FieldTypePluginLoader)? It'd be a 
shame to withdraw a feature once released though, I think look-up by the short 
class name is still valid and not a deprecated feature.

> Using SPI lookups of analysis components results in factories that don't get 
> ResourceLoaderAware.inform called on them (When using 
> ClassicIndexSchemaFactory)
> -------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: SOLR-16203
>                 URL: https://issues.apache.org/jira/browse/SOLR-16203
>             Project: Solr
>          Issue Type: Bug
>      Security Level: Public(Default Security Level. Issues are Public) 
>    Affects Versions: 9.0
>            Reporter: Chris M. Hostetter
>            Priority: Major
>         Attachments: SOLR-16203_test.patch
>
>
> Ok ... this is a weird one ...
> SOLR-13593 modified {{FieldTypePluginLoader}} to add the ability for analysis 
> Factories to be resolved by SPI name (ex: {{{}name="stop"{}}}, instead of by 
> "short class name" (ex: {{{}class="solr.StopFilterFactory"{}}}.
> The code that deals with this just calls (for example) 
> {{TokenFilterFactory.forName(name, params);}} and uses the resulting factory 
> "as is" – But these means that nothing calls the {{inform(ResourceLoader)}} 
> on any factories that implement {{ResourceLoaderAware}} (such as 
> {{StopFilterFactory}} or {{{}SynonymGraphFilterFactory{}}})
> In the "short class name" code path (the only option prior to 9.0), the 
> {{SolrResourceLoader}} is used to initialize the Factory, and 
> {{SolrResourceLoader..newInstance(...)}} takes responsibility of calling 
> {{factory.inform(this)}} on everything it instantiates that implements 
> {{ResourceLoaderAware}} (as well as some other checks: like 
> {{{}SolrCoreAware{}}})
> This discrepancy means that when using the {{name="foo"}} syntax, many 
> factories won't be fully initialized – or fail on invalid input – during 
> schema initialization. In the case of things like {{StopFilterFactory}} or 
> {{SynonymGraphFilterFactory}}) the problem will manifest as some type of 
> runtime error when the factory's {{create(...)}} method is called as part of 
> creating a new index or query Analyzer.
> ----
> _*...BUT...*_
> ----
> This problem only seems to manifest itself when using 
> {{ClassicIndexSchemaFactory}} -- which is why it's not readily apparent when 
> using the default configset, or something like {{bin/solr -e techproducts}} 
> (but is trivial to reproduce in testcases (since almost every "test" 
> solrconfig uses {{ClassicIndexSchemaFactory}})
> I have no idea _why_ using {{ManagedIndexSchemaFactory}} doesn't manifest the 
> same problem -- it should be using the same {{FieldTypePluginLoader}} under 
> the covers -- but clearly something specific to {{ManagedIndexSchema}} is 
> taking responsibility for calling {{ResourceLoaderAware.inform(...)}}



--
This message was sent by Atlassian Jira
(v8.20.7#820007)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org
For additional commands, e-mail: issues-h...@solr.apache.org

Reply via email to