diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java index 015c521..7b1efde 100644 --- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java +++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java @@ -17,11 +17,41 @@ package org.apache.solr.core; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.solr.cloud.CloudDescriptor; +import org.apache.solr.cloud.CurrentCoreDescriptorProvider; +import org.apache.solr.cloud.SolrZkServer; +import org.apache.solr.cloud.ZkController; +import org.apache.solr.cloud.ZkSolrResourceLoader; +import org.apache.solr.common.SolrException; +import org.apache.solr.common.SolrException.ErrorCode; +import org.apache.solr.common.cloud.ZkStateReader; +import org.apache.solr.common.cloud.ZooKeeperException; +import org.apache.solr.common.util.ExecutorUtil; +import org.apache.solr.handler.admin.CollectionsHandler; +import org.apache.solr.handler.admin.CoreAdminHandler; +import org.apache.solr.handler.component.HttpShardHandlerFactory; +import org.apache.solr.handler.component.ShardHandlerFactory; +import org.apache.solr.logging.ListenerConfig; +import org.apache.solr.logging.LogWatcher; +import org.apache.solr.logging.jul.JulWatcher; +import org.apache.solr.logging.log4j.Log4jWatcher; +import org.apache.solr.schema.IndexSchema; +import org.apache.solr.update.SolrCoreState; +import org.apache.solr.util.DefaultSolrThreadFactory; +import org.apache.solr.util.FileUtils; +import org.apache.solr.util.PropertiesUtil; +import org.apache.zookeeper.KeeperException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.slf4j.impl.StaticLoggerBinder; + import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; -import java.io.IOException; import java.io.FileNotFoundException; +import java.io.IOException; import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -49,37 +79,6 @@ import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; -import org.apache.solr.cloud.CloudDescriptor; -import org.apache.solr.cloud.CurrentCoreDescriptorProvider; -import org.apache.solr.cloud.SolrZkServer; -import org.apache.solr.cloud.ZkController; -import org.apache.solr.cloud.ZkSolrResourceLoader; -import org.apache.solr.common.SolrException; -import org.apache.solr.common.SolrException.ErrorCode; -import org.apache.solr.common.cloud.ZkStateReader; -import org.apache.solr.common.cloud.ZooKeeperException; -import org.apache.solr.common.util.ExecutorUtil; - -import org.apache.solr.handler.admin.CollectionsHandler; -import org.apache.solr.handler.admin.CoreAdminHandler; -import org.apache.solr.handler.component.HttpShardHandlerFactory; -import org.apache.solr.handler.component.ShardHandlerFactory; -import org.apache.solr.logging.ListenerConfig; -import org.apache.solr.logging.LogWatcher; -import org.apache.solr.logging.jul.JulWatcher; -import org.apache.solr.logging.log4j.Log4jWatcher; -import org.apache.solr.schema.IndexSchema; -import org.apache.solr.update.SolrCoreState; -import org.apache.solr.util.DefaultSolrThreadFactory; -import org.apache.solr.util.FileUtils; -import org.apache.solr.util.PropertiesUtil; -import org.apache.zookeeper.KeeperException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.slf4j.impl.StaticLoggerBinder; - /** * @@ -113,7 +112,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 indexSchemaCache; @@ -388,6 +386,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); @@ -442,7 +449,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); @@ -475,12 +481,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); @@ -866,7 +866,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, SolrProperties.getCoreProperties(instanceDir, dcore), zkController); + solrLoader = new ZkSolrResourceLoader(instanceDir, zkConfigName, loader.getClassLoader(), SolrProperties.getCoreProperties(instanceDir, dcore), zkController); config = getSolrConfigFromZk(zkConfigName, dcore.getConfigName(), solrLoader); schema = getSchemaFromZk(zkConfigName, dcore.getSchemaName(), config); return new SolrCore(dcore.getName(), null, config, schema, dcore); @@ -889,7 +889,7 @@ public class CoreContainer SolrResourceLoader solrLoader = null; SolrConfig config = null; - solrLoader = new SolrResourceLoader(instanceDir, libLoader, SolrProperties.getCoreProperties(instanceDir, dcore)); + solrLoader = new SolrResourceLoader(instanceDir, loader.getClassLoader(), SolrProperties.getCoreProperties(instanceDir, dcore)); try { config = new SolrConfig(solrLoader, dcore.getConfigName(), null); } catch (Exception e) { @@ -1046,7 +1046,7 @@ public class CoreContainer cd.getName(), instanceDir.getAbsolutePath()); SolrResourceLoader solrLoader; if(zkController == null) { - solrLoader = new SolrResourceLoader(instanceDir.getAbsolutePath(), libLoader, SolrProperties.getCoreProperties(instanceDir.getAbsolutePath(), cd)); + solrLoader = new SolrResourceLoader(instanceDir.getAbsolutePath(), loader.getClassLoader(), SolrProperties.getCoreProperties(instanceDir.getAbsolutePath(), cd)); } else { try { String collection = cd.getCloudDescriptor().getCollectionName(); @@ -1058,7 +1058,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(), SolrProperties.getCoreProperties(instanceDir.getAbsolutePath(), cd), zkController); } catch (KeeperException e) { log.error("", e); @@ -1177,7 +1177,6 @@ public class CoreContainer */ 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); }