You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2013/04/03 01:44:46 UTC
svn commit: r1463794 - in /lucene/dev/trunk/solr: CHANGES.txt
core/src/java/org/apache/solr/core/CoreContainer.java
core/src/test/org/apache/solr/core/TestCoreContainer.java
Author: uschindler
Date: Tue Apr 2 23:44:45 2013
New Revision: 1463794
URL: http://svn.apache.org/r1463794
Log:
SOLR-4652: Fix broken behavior with shared libraries in resource loader for solr.xml plugins.
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1463794&r1=1463793&r2=1463794&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Tue Apr 2 23:44:45 2013
@@ -147,6 +147,9 @@ Bug Fixes
* SOLR-3758: Fixed SpellCheckComponent to work consistently with distributed grouping
(James Dyer)
+* SOLR-4652: Fix broken behavior with shared libraries in resource loader for
+ solr.xml plugins. (Ryan Ernst, Robert Muir, Uwe Schindler)
+
Optimizations
----------------------
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java?rev=1463794&r1=1463793&r2=1463794&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java Tue Apr 2 23:44:45 2013
@@ -116,7 +116,6 @@ public class CoreContainer
protected CollectionsHandler collectionsHandler = null;
protected File configFile = null;
protected String libDir = null;
- protected ClassLoader libLoader = null;
protected SolrResourceLoader loader = null;
protected Properties containerProperties;
protected Map<String ,IndexSchema> indexSchemaCache;
@@ -394,6 +393,15 @@ public class CoreContainer
// now.
cfg.substituteProperties();
+ // add the sharedLib to the shared resource loader before initializing cfg based plugins
+ libDir = cfg.get(ConfigSolr.ConfLevel.SOLR, "sharedLib", null);
+ if (libDir != null) {
+ File f = FileUtils.resolvePath(new File(dir), libDir);
+ log.info("loading shared library: " + f.getAbsolutePath());
+ loader.addToClassLoader(libDir);
+ loader.reloadLuceneSPI();
+ }
+
shardHandlerFactory = cfg.initShardHandler();
coreMaps.allocateLazyCores(cfg, loader);
@@ -448,7 +456,6 @@ public class CoreContainer
defaultCoreName = dcoreName;
}
persistent = cfg.getBool(ConfigSolr.ConfLevel.SOLR, "persistent", false);
- libDir = cfg.get(ConfigSolr.ConfLevel.SOLR, "sharedLib", null);
zkHost = cfg.get(ConfigSolr.ConfLevel.SOLR, "zkHost", null);
coreLoadThreads = cfg.getInt(ConfigSolr.ConfLevel.SOLR, "coreLoadThreads", CORE_LOAD_THREADS);
@@ -485,12 +492,6 @@ public class CoreContainer
"SolrCloud requires a value of at least 2 in solr.xml for coreLoadThreads");
}
- if (libDir != null) {
- File f = FileUtils.resolvePath(new File(dir), libDir);
- log.info("loading shared library: " + f.getAbsolutePath());
- libLoader = SolrResourceLoader.createClassLoader(f, null);
- }
-
if (adminPath != null) {
if (adminHandler == null) {
coreAdminHandler = new CoreAdminHandler(this);
@@ -876,7 +877,7 @@ public class CoreContainer
throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,
"Could not find config name for collection:" + collection);
}
- solrLoader = new ZkSolrResourceLoader(instanceDir, zkConfigName, libLoader,
+ solrLoader = new ZkSolrResourceLoader(instanceDir, zkConfigName, loader.getClassLoader(),
ConfigSolrXml.getCoreProperties(instanceDir, dcore), zkController);
config = getSolrConfigFromZk(zkConfigName, dcore.getConfigName(), solrLoader);
schema = IndexSchemaFactory.buildIndexSchema(dcore.getSchemaName(), config);
@@ -900,7 +901,7 @@ public class CoreContainer
SolrResourceLoader solrLoader = null;
SolrConfig config = null;
- solrLoader = new SolrResourceLoader(instanceDir, libLoader, ConfigSolrXml.getCoreProperties(instanceDir, dcore));
+ solrLoader = new SolrResourceLoader(instanceDir, loader.getClassLoader(), ConfigSolrXml.getCoreProperties(instanceDir, dcore));
try {
config = new SolrConfig(solrLoader, dcore.getConfigName(), null);
} catch (Exception e) {
@@ -1057,7 +1058,7 @@ public class CoreContainer
cd.getName(), instanceDir.getAbsolutePath());
SolrResourceLoader solrLoader;
if(zkController == null) {
- solrLoader = new SolrResourceLoader(instanceDir.getAbsolutePath(), libLoader, ConfigSolrXml.getCoreProperties(instanceDir.getAbsolutePath(), cd));
+ solrLoader = new SolrResourceLoader(instanceDir.getAbsolutePath(), loader.getClassLoader(), ConfigSolrXml.getCoreProperties(instanceDir.getAbsolutePath(), cd));
} else {
try {
String collection = cd.getCloudDescriptor().getCollectionName();
@@ -1069,7 +1070,7 @@ public class CoreContainer
throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,
"Could not find config name for collection:" + collection);
}
- solrLoader = new ZkSolrResourceLoader(instanceDir.getAbsolutePath(), zkConfigName, libLoader,
+ solrLoader = new ZkSolrResourceLoader(instanceDir.getAbsolutePath(), zkConfigName, loader.getClassLoader(),
ConfigSolrXml.getCoreProperties(instanceDir.getAbsolutePath(), cd), zkController);
} catch (KeeperException e) {
log.error("", e);
@@ -1187,8 +1188,6 @@ public class CoreContainer
* @return a CoreAdminHandler
*/
protected CoreAdminHandler createMultiCoreHandler(final String adminHandlerClass) {
- // :TODO: why create a new SolrResourceLoader? why not use this.loader ???
- SolrResourceLoader loader = new SolrResourceLoader(solrHome, libLoader, null);
return loader.newAdminHandlerInstance(CoreContainer.this, adminHandlerClass);
}
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java?rev=1463794&r1=1463793&r2=1463794&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java Tue Apr 2 23:44:45 2013
@@ -309,6 +309,26 @@ public class TestCoreContainer extends S
}
}
+
+ @Test
+ public void testClassLoaderHierarchy() throws Exception {
+ final CoreContainer cc = init("_classLoaderHierarchy");
+ try {
+ cc.setPersistent(false);
+ ClassLoader sharedLoader = cc.loader.getClassLoader();
+ ClassLoader contextLoader = Thread.currentThread().getContextClassLoader();
+ assertSame(contextLoader, sharedLoader.getParent());
+
+ CoreDescriptor descriptor1 = new CoreDescriptor(cc, "core1", "./collection1");
+ SolrCore core1 = cc.create(descriptor1);
+ ClassLoader coreLoader = core1.getResourceLoader().getClassLoader();
+ assertSame(sharedLoader, coreLoader.getParent());
+
+ core1.close();
+ } finally {
+ cc.shutdown();
+ }
+ }
private static final String EMPTY_SOLR_XML ="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n" +
"<solr persistent=\"false\">\n" +