You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@solr.apache.org by "Tomoko Uchida (Jira)" <ji...@apache.org> on 2022/05/19 05:38:00 UTC

[jira] [Comment Edited] (SOLR-16203) Using SPI lookups of analysis components results in factories that don't get ResourceLoaderAware.inform called on them (When using ClassicIndexSchemaFactory)

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

Tomoko Uchida edited comment on SOLR-16203 at 5/19/22 5:37 AM:
---------------------------------------------------------------

I was not knowledgeable on Solr class/resource 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. (Solr 9.0 is still new, I guess the impact of the withdrawal is not big if we make a patch release soon.)


was (Author: tomoko uchida):
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-unsubscribe@solr.apache.org
For additional commands, e-mail: issues-help@solr.apache.org