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

Hoss Man commented on SOLR-1449:
--------------------------------

bq. add a new method to SolrConfig ... public List<String> getPaths() .. in the 
SolrResourceLoader we may just need an extra method addPath(String path)

I feel like we keep going around in circles on this, i don't know how to 
express myself any better...

1) there should never be a public addPath(String) method on SOlrResourceLoader 
... the ClassLoader should be initialized completely before the 
SolrResourceLoader is used, or really wacky inconsistent classloader behavior 
can result.

2) ideally SolrResourceLoader should require that all URLs for the ClassLoader 
be specified in it's constructor, so we can keep the ClassLoader final -- but 
given the existing COnstructors for SOlrCOnfig that's impossible (sometimes the 
SolrConfig constructs the SolrResourceLoader, other times the caller constructs 
the SolrResourceLoader, and then passes it as an argument to the SolrConfig 
constructor) so in this patch i focused on keeping the changes as minimal as 
possible, and not altering the public API.

3) Because of these multiple ways the SolrResourceLoader can be initialized, 
the SolrCOnfig constructor is in the best position to ensure that the 
ClassLoader URLs are added as early as possible.  

4) We could add a "getPaths() method to SolrConfig -- but for 
back-compatibility we would still need to set those paths on the 
SolrResourceLoader in the SolrConfig constructor for embedded SOlr users people 
who might be initializing things in a different order then we do in 
CoreContainer.

5) someday, in order to achieve all of the various SolrConfig 
simplification/reuse goals that have been discussed, we are going to need to 
make non-back-compat changes to eliminate all references to SolrResourceLoader 
from SolrConfig -- including eliminating all of the current public constructors 
from SolrConfig (because they construct a SolrResourceLoader) and then, since 
everyone will have to change how the instantiate SolrCOnfig objects anyway, it 
will be easy to change the semantics of initializing a 
SOlrConfig+SolrCore+SolrResourceLoader so that they make more sense...

{code}
   SolrCofig config = new SolrConfig(...)
   SolrResourceLoader loader = new SolrResourceLoader(cofig.getLibPaths(), ...)
   ...
   SolrCore = new SolrCore(config, loader, ...)
{code}

...and when we reach that point it will be *trivial* to refactor the code added 
by this patch so that it works that way, because at this point it is all nicely 
self contained in package protected methods.

...

All of this reasoning is why i keep saying: it's a waste of time to worry about 
how this code will impact reusable SolrCOnfig options in the _future_  since 
it's all non-public and can be refactored at any time.

If someone wants to take my patch and refactor it _now_ then be my guest ... 
but unless you plan on massively increasing the scope to completely sever the 
direct connection between SolrCOnfig and SOlrResourceLoader i can't imagine how 
adding SolrCOnfig.getPaths() and making someone besides SOlrConfig responsible 
for passing those paths to SolrResourceLoader wlll result in a patch that would 
be any cleaner or easier to maintain moving forward. ... but i'll be happy to 
get proven wrong.



> solrconfig.xml syntax to add classpath elements from outside of instanceDir
> ---------------------------------------------------------------------------
>
>                 Key: SOLR-1449
>                 URL: https://issues.apache.org/jira/browse/SOLR-1449
>             Project: Solr
>          Issue Type: Improvement
>            Reporter: Hoss Man
>            Assignee: Hoss Man
>             Fix For: 1.4
>
>         Attachments: SOLR-1449.patch, SOLR-1449.patch, SOLR-1449.patch, 
> SOLR-1449.patch, SOLR-1449.patch, SOLR-1449.patch, SOLR-1449.patch, 
> SOLR-1449.patch, SOLR-1449.patch
>
>
> the idea has been discussed numerous times that it would be nice if there was 
> a way to configure a core to load plugins from specific jars (or "classes" 
> style directories) by path  w/o needing to copy them to the "./lib" dir in 
> the instanceDir.
> The current workaround is "symlinks" but that doesn't really help the 
> situation of the Solr Release artifacts, where we wind up making numerous 
> copies of jars to support multiple example directories (you can't have 
> reliable symlinks in zip files)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to