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" +