Jack Krupansky created SOLR-4427:
------------------------------------

             Summary: Solr should complain with a readable warning if more than 
one of a plugin type occurs in solrconfig.xml and only one is used
                 Key: SOLR-4427
                 URL: https://issues.apache.org/jira/browse/SOLR-4427
             Project: Solr
          Issue Type: Bug
          Components: Schema and Analysis
    Affects Versions: 4.0
            Reporter: Jack Krupansky


While some Solr plugin types such as request handlers can have multiple entries 
in solrconfig.xml, others such as <queryConverter> and <directoryFactory> can 
syntactically have more than one, but only the first one will be used and the 
other plugins of that type will be silently ignored. This is problematic when 
someone "adds" a new plugin and is unaware of or forgets to remove or comment 
out an existing plugin of that same type earlier in solrconfig.xml. The new 
plugin has no effect and it is not obvious how to debug the problem.

Repro:

Add a second <directoryFactory> to the Solr example solrconfig.xml after the 
existing one:

{code}
  <directoryFactory name="DirectoryFactory" 
                    
class="${solr.directoryFactory:solr.NRTCachingDirectoryFactory}" /> 

  <directoryFactory name="MyDirectoryFactory" 
class="solr.NRTCachingDirectoryFactory">
    <double name="maxMergeSizeMB">7.5</double>
    <double name="maxCachedMB">37.25</double>
  </directoryFactory>
{code}

Start Solr after deleting the data directory.

See that the default values of "maxMergeSizeMB" and "maxCachedMB" are being 
used rather than the overrides specified above. In other words, the first 
directory factory plugin is being used, and the second is silently ignored.

One possible fix, would be in SolrConfig#getPluginInfo to change:

{code}
  public PluginInfo getPluginInfo(String  type){
    List<PluginInfo> result = pluginStore.get(type);
    return result == null || result.isEmpty() ? null: result.get(0);
  }
{code}

to

{code}
  public PluginInfo getPluginInfo(String  type){
    List<PluginInfo> result = pluginStore.get(type);
    if (result != null && result.size() > 1)
      log.warn("Multiple plugins of type '" + type + "' found (" + 
result.size() +
          ") - only the first will be used: name: " + result.get(0).name +
          " class: " + result.get(0).className);
    return result == null || result.isEmpty() ? null: result.get(0);
  }
{code}

Another possibility is to throw an exception.


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

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

Reply via email to