You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2015/11/20 13:42:43 UTC
svn commit: r1715344 [1/2] - in /lucene/dev/branches/branch_5x: ./ solr/
solr/contrib/
solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/
solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/
solr/contrib/...
Author: romseygeek
Date: Fri Nov 20 12:42:42 2015
New Revision: 1715344
URL: http://svn.apache.org/viewvc?rev=1715344&view=rev
Log:
SOLR-8302: SolrResourceLoader takes a Path for its instance directory
Modified:
lucene/dev/branches/branch_5x/ (props changed)
lucene/dev/branches/branch_5x/solr/ (props changed)
lucene/dev/branches/branch_5x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_5x/solr/contrib/ (props changed)
lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SimplePropertiesWriter.java
lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestZKPropertiesWriter.java
lucene/dev/branches/branch_5x/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ParseContextConfigTest.java
lucene/dev/branches/branch_5x/solr/contrib/map-reduce/src/java/org/apache/solr/hadoop/SolrRecordWriter.java
lucene/dev/branches/branch_5x/solr/contrib/morphlines-core/src/java/org/apache/solr/morphlines/solr/SolrLocator.java
lucene/dev/branches/branch_5x/solr/core/ (props changed)
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/CloudConfigSetService.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/CloudUtil.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/ZkSolrResourceLoader.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/Config.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/ConfigSetService.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreContainer.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/NodeConfig.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrConfig.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrCore.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/response/TextResponseWriter.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchemaFactory.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/analysis/TestWordDelimiterFilterFactory.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/client/solrj/embedded/TestEmbeddedSolrServerConstructors.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIDistributedZkTest.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/SolrXmlInZkTest.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionZkExpiry.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/TestZkChroot.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/ResourceLoaderTest.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestArbitraryIndexDir.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestConfig.java (contents, props changed)
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestConfigSetProperties.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestConfigSets.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestLazyCores.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestShardHandlerFactory.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestSolrXml.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/handler/admin/CoreAdminCreateDiscoverTest.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/rest/TestManagedResource.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/rest/TestManagedResourceStorage.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/rest/TestRestManager.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/schema/DateFieldTest.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/schema/OpenExchangeRatesOrgProviderTest.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/schema/PrimitiveFieldTypeTest.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/update/SolrIndexConfigTest.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/util/TestSystemIdResolver.java
lucene/dev/branches/branch_5x/solr/solrj/ (props changed)
lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java
lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/AbstractEmbeddedSolrServerTestCase.java
lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/TestEmbeddedSolrServer.java
lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/TestSolrProperties.java
lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCoreAdmin.java
lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/response/NoOpResponseParserTest.java
lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/response/QueryResponseTest.java
lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/response/TestClusteringResponse.java
lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/common/util/ContentStreamTest.java
lucene/dev/branches/branch_5x/solr/test-framework/ (props changed)
lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
lucene/dev/branches/branch_5x/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java
Modified: lucene/dev/branches/branch_5x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/CHANGES.txt?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/solr/CHANGES.txt Fri Nov 20 12:42:42 2015
@@ -399,6 +399,9 @@ Other Changes
* SOLR-8315: Removed default core checks in the dispatch filter since we don't have a default
core anymore (Varun Thacker)
+* SOLR-8302: SolrResourceLoader now takes a Path as its instance directory (Alan
+ Woodward, Shawn Heisey)
+
================== 5.3.1 ==================
Bug Fixes
Modified: lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SimplePropertiesWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SimplePropertiesWriter.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SimplePropertiesWriter.java (original)
+++ lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/SimplePropertiesWriter.java Fri Nov 20 12:42:42 2015
@@ -17,8 +17,6 @@ package org.apache.solr.handler.dataimpo
* limitations under the License.
*/
-import static org.apache.solr.handler.dataimport.DataImportHandlerException.SEVERE;
-
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
@@ -41,6 +39,8 @@ import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrResourceLoader;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+
+import static org.apache.solr.handler.dataimport.DataImportHandlerException.SEVERE;
/**
* <p>
* Writes properties using {@link Properties#store} .
@@ -116,7 +116,7 @@ public class SimplePropertiesWriter exte
} else {
SolrCore core = dataImporter.getCore();
if (core == null) {
- configDir = SolrResourceLoader.locateSolrHome();
+ configDir = SolrResourceLoader.locateSolrHome().toString();
} else {
configDir = core.getResourceLoader().getConfigDir();
}
Modified: lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestZKPropertiesWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestZKPropertiesWriter.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestZKPropertiesWriter.java (original)
+++ lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestZKPropertiesWriter.java Fri Nov 20 12:42:42 2015
@@ -62,7 +62,7 @@ public class TestZKPropertiesWriter exte
"dataimport-solrconfig.xml", "dataimport-schema.xml");
//initCore("solrconfig.xml", "schema.xml", getFile("dih/solr").getAbsolutePath());
- cc = createDefaultCoreContainer(getFile("dih/solr").getAbsolutePath());
+ cc = createDefaultCoreContainer(getFile("dih/solr").toPath());
}
@Before
Modified: lucene/dev/branches/branch_5x/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ParseContextConfigTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ParseContextConfigTest.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ParseContextConfigTest.java (original)
+++ lucene/dev/branches/branch_5x/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ParseContextConfigTest.java Fri Nov 20 12:42:42 2015
@@ -18,6 +18,8 @@ package org.apache.solr.handler.extracti
*/
import javax.xml.parsers.DocumentBuilderFactory;
+import java.nio.file.Paths;
+
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.core.SolrResourceLoader;
import org.apache.tika.parser.ParseContext;
@@ -43,7 +45,7 @@ public class ParseContextConfigTest exte
entry.appendChild(property);
entries.appendChild(entry);
- ParseContext parseContext = new ParseContextConfig(new SolrResourceLoader("."), entries).create();
+ ParseContext parseContext = new ParseContextConfig(new SolrResourceLoader(Paths.get(".")), entries).create();
PDFParserConfig pdfParserConfig = parseContext.get(PDFParserConfig.class);
Modified: lucene/dev/branches/branch_5x/solr/contrib/map-reduce/src/java/org/apache/solr/hadoop/SolrRecordWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/contrib/map-reduce/src/java/org/apache/solr/hadoop/SolrRecordWriter.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/contrib/map-reduce/src/java/org/apache/solr/hadoop/SolrRecordWriter.java (original)
+++ lucene/dev/branches/branch_5x/solr/contrib/map-reduce/src/java/org/apache/solr/hadoop/SolrRecordWriter.java Fri Nov 20 12:42:42 2015
@@ -16,6 +16,19 @@
*/
package org.apache.solr.hadoop;
+import java.io.IOException;
+import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Locale;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.filecache.DistributedCache;
import org.apache.hadoop.fs.FileSystem;
@@ -35,18 +48,6 @@ import org.apache.solr.core.SolrResource
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.TimeUnit;
-
class SolrRecordWriter<K, V> extends RecordWriter<K, V> {
private static final Logger LOG = LoggerFactory.getLogger(SolrRecordWriter.class);
@@ -139,12 +140,12 @@ class SolrRecordWriter<K, V> extends Rec
String dataDirStr = solrDataDir.toUri().toString();
- SolrResourceLoader loader = new SolrResourceLoader(solrHomeDir.toString(), null, null);
+ SolrResourceLoader loader = new SolrResourceLoader(Paths.get(solrHomeDir.toString()), null, null);
LOG.info(String
.format(Locale.ENGLISH,
"Constructed instance information solr.home %s (%s), instance dir %s, conf dir %s, writing index to solr.data.dir %s, with permdir %s",
- solrHomeDir, solrHomeDir.toUri(), loader.getInstanceDir(),
+ solrHomeDir, solrHomeDir.toUri(), loader.getInstancePath(),
loader.getConfigDir(), dataDirStr, outputShardDir));
// TODO: This is fragile and should be well documented
Modified: lucene/dev/branches/branch_5x/solr/contrib/morphlines-core/src/java/org/apache/solr/morphlines/solr/SolrLocator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/contrib/morphlines-core/src/java/org/apache/solr/morphlines/solr/SolrLocator.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/contrib/morphlines-core/src/java/org/apache/solr/morphlines/solr/SolrLocator.java (original)
+++ lucene/dev/branches/branch_5x/solr/contrib/morphlines-core/src/java/org/apache/solr/morphlines/solr/SolrLocator.java Fri Nov 20 12:42:42 2015
@@ -16,6 +16,11 @@
*/
package org.apache.solr.morphlines.solr;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Paths;
+
import com.google.common.base.Preconditions;
import com.google.common.io.Files;
import com.typesafe.config.Config;
@@ -39,10 +44,6 @@ import org.slf4j.LoggerFactory;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.File;
-import java.io.IOException;
-
/**
* Set of configuration parameters that identify the location and schema of a Solr server or
* SolrCloud; Based on this information this class can return the schema and a corresponding
@@ -149,7 +150,7 @@ public class SolrLocator {
LOG.debug("SolrLocator loading IndexSchema from dir {}", mySolrHomeDir);
try {
- SolrResourceLoader loader = new SolrResourceLoader(mySolrHomeDir);
+ SolrResourceLoader loader = new SolrResourceLoader(Paths.get(mySolrHomeDir));
SolrConfig solrConfig = new SolrConfig(loader, "solrconfig.xml", null);
InputSource is = new InputSource(loader.openSchema("schema.xml"));
is.setSystemId(SystemIdResolver.createSystemIdFromResourceName("schema.xml"));
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/CloudConfigSetService.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/CloudConfigSetService.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/CloudConfigSetService.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/CloudConfigSetService.java Fri Nov 20 12:42:42 2015
@@ -17,6 +17,8 @@
package org.apache.solr.cloud;
+import java.nio.file.Paths;
+
import org.apache.solr.core.ConfigSetService;
import org.apache.solr.core.CoreDescriptor;
import org.apache.solr.core.SolrResourceLoader;
@@ -35,7 +37,7 @@ public class CloudConfigSetService exten
// TODO: Shouldn't the collection node be created by the Collections API?
zkController.createCollectionZkNode(cd.getCloudDescriptor());
String configName = zkController.getZkStateReader().readConfigName(cd.getCollectionName());
- return new ZkSolrResourceLoader(cd.getInstanceDir(), configName, parentLoader.getClassLoader(),
+ return new ZkSolrResourceLoader(Paths.get(cd.getInstanceDir()), configName, parentLoader.getClassLoader(),
cd.getSubstitutableProperties(), zkController);
}
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/CloudUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/CloudUtil.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/CloudUtil.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/CloudUtil.java Fri Nov 20 12:42:42 2015
@@ -102,7 +102,7 @@ public class CloudUtil {
public static String unifiedResourcePath(SolrResourceLoader loader) {
return (loader instanceof ZkSolrResourceLoader) ?
((ZkSolrResourceLoader) loader).getConfigSetZkPath() + "/" :
- loader.getConfigDir();
+ loader.getConfigDir() + File.separator;
}
/**Read the list of public keys from ZK
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/ZkSolrResourceLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/ZkSolrResourceLoader.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/ZkSolrResourceLoader.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/cloud/ZkSolrResourceLoader.java Fri Nov 20 12:42:42 2015
@@ -17,6 +17,14 @@ package org.apache.solr.cloud;
* limitations under the License.
*/
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.file.Path;
+import java.util.List;
+import java.util.Properties;
+
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.cloud.ZkConfigManager;
@@ -27,13 +35,6 @@ import org.apache.solr.schema.ZkIndexSch
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.data.Stat;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-import java.util.Properties;
-
/**
* ResourceLoader that works with ZooKeeper.
*
@@ -44,8 +45,7 @@ public class ZkSolrResourceLoader extend
private ZkController zkController;
private ZkIndexSchemaReader zkIndexSchemaReader;
- public ZkSolrResourceLoader(String instanceDir, String configSet,
- ZkController zooKeeperController) {
+ public ZkSolrResourceLoader(Path instanceDir, String configSet, ZkController zooKeeperController) {
super(instanceDir);
this.zkController = zooKeeperController;
configSetZkPath = ZkConfigManager.CONFIGS_ZKNODE + "/" + configSet;
@@ -58,7 +58,7 @@ public class ZkSolrResourceLoader extend
* otherwise it will attempt to resolve resources using any jar files found in
* the "lib/" directory in the specified instance directory.
*/
- public ZkSolrResourceLoader(String instanceDir, String configSet, ClassLoader parent,
+ public ZkSolrResourceLoader(Path instanceDir, String configSet, ClassLoader parent,
Properties coreProperties, ZkController zooKeeperController) {
super(instanceDir, parent, coreProperties);
this.zkController = zooKeeperController;
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/Config.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/Config.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/Config.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/Config.java Fri Nov 20 12:42:42 2015
@@ -17,24 +17,6 @@
package org.apache.solr.core;
-import org.apache.lucene.util.Version;
-import org.apache.solr.cloud.ZkSolrResourceLoader;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.update.SolrIndexConfig;
-import org.apache.solr.util.DOMUtil;
-import org.apache.solr.util.SystemIdResolver;
-import org.apache.solr.common.util.XMLErrorLogger;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.apache.commons.io.IOUtils;
-
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -48,7 +30,6 @@ import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
-
import java.io.IOException;
import java.io.InputStream;
import java.text.ParseException;
@@ -63,6 +44,23 @@ import java.util.TreeMap;
import java.util.TreeSet;
import java.util.concurrent.atomic.AtomicBoolean;
+import org.apache.commons.io.IOUtils;
+import org.apache.lucene.util.Version;
+import org.apache.solr.cloud.ZkSolrResourceLoader;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.util.XMLErrorLogger;
+import org.apache.solr.util.DOMUtil;
+import org.apache.solr.util.SystemIdResolver;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
/**
*
*/
@@ -110,7 +108,7 @@ public class Config {
public Config(SolrResourceLoader loader, String name, InputSource is, String prefix, boolean substituteProps) throws ParserConfigurationException, IOException, SAXException
{
if( loader == null ) {
- loader = new SolrResourceLoader( null );
+ loader = new SolrResourceLoader(SolrResourceLoader.locateSolrHome());
}
this.loader = loader;
this.name = name;
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/ConfigSetService.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/ConfigSetService.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/ConfigSetService.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/ConfigSetService.java Fri Nov 20 12:42:42 2015
@@ -156,7 +156,7 @@ public abstract class ConfigSetService {
@Override
public SolrResourceLoader createCoreResourceLoader(CoreDescriptor cd) {
Path instanceDir = locateInstanceDir(cd);
- return new SolrResourceLoader(instanceDir.toString(), parentLoader.getClassLoader(), cd.getSubstitutableProperties());
+ return new SolrResourceLoader(instanceDir, parentLoader.getClassLoader(), cd.getSubstitutableProperties());
}
@Override
@@ -204,7 +204,8 @@ public abstract class ConfigSetService {
Path schemaFile = Paths.get(solrConfig.getResourceLoader().getConfigDir()).resolve(resourceNameToBeUsed);
if (Files.exists(schemaFile)) {
try {
- return schemaCache.get(cacheName(schemaFile), new Callable<IndexSchema>() {
+ String cachedName = cacheName(schemaFile);
+ return schemaCache.get(cachedName, new Callable<IndexSchema>() {
@Override
public IndexSchema call() throws Exception {
logger.info("Creating new index schema for core {}", cd.getName());
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreContainer.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreContainer.java Fri Nov 20 12:42:42 2015
@@ -17,8 +17,9 @@
package org.apache.solr.core;
-import java.io.File;
import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -61,7 +62,6 @@ import org.apache.solr.security.PKIAuthe
import org.apache.solr.security.SecurityPluginHolder;
import org.apache.solr.update.UpdateShardHandler;
import org.apache.solr.util.DefaultSolrThreadFactory;
-import org.apache.solr.util.FileUtils;
import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -178,7 +178,7 @@ public class CoreContainer {
* @see #load()
*/
public CoreContainer(SolrResourceLoader loader) {
- this(SolrXmlConfig.fromSolrHome(loader, loader.getInstanceDir()));
+ this(SolrXmlConfig.fromSolrHome(loader, loader.getInstancePath()));
}
/**
@@ -188,7 +188,7 @@ public class CoreContainer {
* @see #load()
*/
public CoreContainer(String solrHome) {
- this(new SolrResourceLoader(solrHome));
+ this(new SolrResourceLoader(Paths.get(solrHome)));
}
/**
@@ -216,7 +216,7 @@ public class CoreContainer {
public CoreContainer(NodeConfig config, Properties properties, CoresLocator locator, boolean asyncSolrCoreLoad) {
this.loader = config.getSolrResourceLoader();
- this.solrHome = loader.getInstanceDir();
+ this.solrHome = loader.getInstancePath().toString();
this.cfg = checkNotNull(config);
this.coresLocator = locator;
this.containerProperties = new Properties(properties);
@@ -340,6 +340,10 @@ public class CoreContainer {
cfg = null;
containerProperties = null;
}
+
+ public static CoreContainer createAndLoad(Path solrHome) {
+ return createAndLoad(solrHome, solrHome.resolve(SolrXmlConfig.SOLR_XML_FILE));
+ }
/**
* Create a new CoreContainer and load its cores
@@ -347,7 +351,7 @@ public class CoreContainer {
* @param configFile the file containing this container's configuration
* @return a loaded CoreContainer
*/
- public static CoreContainer createAndLoad(String solrHome, File configFile) {
+ public static CoreContainer createAndLoad(Path solrHome, Path configFile) {
SolrResourceLoader loader = new SolrResourceLoader(solrHome);
CoreContainer cc = new CoreContainer(SolrXmlConfig.fromFile(loader, configFile));
try {
@@ -375,15 +379,18 @@ public class CoreContainer {
* Load the cores defined for this CoreContainer
*/
public void load() {
- log.info("Loading cores into CoreContainer [instanceDir={}]", loader.getInstanceDir());
+ log.info("Loading cores into CoreContainer [instanceDir={}]", loader.getInstancePath());
// add the sharedLib to the shared resource loader before initializing cfg based plugins
String libDir = cfg.getSharedLibDirectory();
if (libDir != null) {
- File f = FileUtils.resolvePath(new File(solrHome), libDir);
- log.info("loading shared library: " + f.getAbsolutePath());
- loader.addToClassLoader(libDir, null, false);
- loader.reloadLuceneSPI();
+ Path libPath = loader.getInstancePath().resolve(libDir);
+ try {
+ loader.addToClassLoader(SolrResourceLoader.getURLs(libPath));
+ loader.reloadLuceneSPI();
+ } catch (IOException e) {
+ log.warn("Couldn't add files from {} to classpath: {}", libPath, e.getMessage());
+ }
}
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/NodeConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/NodeConfig.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/NodeConfig.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/NodeConfig.java Fri Nov 20 12:42:42 2015
@@ -18,7 +18,6 @@ package org.apache.solr.core;
*/
import java.nio.file.Path;
-import java.nio.file.Paths;
import java.util.Properties;
import org.apache.solr.common.SolrException;
@@ -221,17 +220,17 @@ public class NodeConfig {
public NodeConfigBuilder(String nodeName, SolrResourceLoader loader) {
this.nodeName = nodeName;
this.loader = loader;
- this.coreRootDirectory = Paths.get(loader.getInstanceDir());
- this.configSetBaseDirectory = Paths.get(loader.getInstanceDir()).resolve("configsets");
+ this.coreRootDirectory = loader.getInstancePath();
+ this.configSetBaseDirectory = loader.getInstancePath().resolve("configsets");
}
public NodeConfigBuilder setCoreRootDirectory(String coreRootDirectory) {
- this.coreRootDirectory = Paths.get(loader.getInstanceDir()).resolve(coreRootDirectory);
+ this.coreRootDirectory = loader.getInstancePath().resolve(coreRootDirectory);
return this;
}
public NodeConfigBuilder setConfigSetBaseDirectory(String configSetBaseDirectory) {
- this.configSetBaseDirectory = Paths.get(loader.resolve(configSetBaseDirectory));
+ this.configSetBaseDirectory = loader.getInstancePath().resolve(configSetBaseDirectory);
return this;
}
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrConfig.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrConfig.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrConfig.java Fri Nov 20 12:42:42 2015
@@ -22,29 +22,19 @@ import com.google.common.base.Charsets;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPathConstants;
-
-import java.io.File;
-import java.io.FileFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.UUID;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.google.common.collect.ImmutableList;
-
import org.apache.lucene.index.IndexDeletionPolicy;
import org.apache.lucene.search.BooleanQuery;
import org.apache.lucene.util.Version;
@@ -70,8 +60,6 @@ import org.apache.solr.update.UpdateLog;
import org.apache.solr.update.processor.UpdateRequestProcessorChain;
import org.apache.solr.update.processor.UpdateRequestProcessorFactory;
import org.apache.solr.util.DOMUtil;
-import org.apache.solr.util.FileUtils;
-import org.apache.solr.util.RegexFileFilter;
import org.noggit.JSONParser;
import org.noggit.ObjectBuilder;
import org.slf4j.Logger;
@@ -81,9 +69,9 @@ import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
-import static org.apache.solr.common.util.Utils.makeMap;
import static org.apache.solr.common.params.CommonParams.NAME;
import static org.apache.solr.common.params.CommonParams.PATH;
+import static org.apache.solr.common.util.Utils.makeMap;
import static org.apache.solr.core.ConfigOverlay.ZNODEVER;
import static org.apache.solr.core.SolrConfig.PluginOpts.LAZY;
import static org.apache.solr.core.SolrConfig.PluginOpts.MULTI_OK;
@@ -168,7 +156,7 @@ public class SolrConfig extends Config i
* @param name the configuration name used by the loader if the stream is null
* @param is the configuration stream
*/
- public SolrConfig(String instanceDir, String name, InputSource is)
+ public SolrConfig(Path instanceDir, String name, InputSource is)
throws ParserConfigurationException, IOException, SAXException {
this(new SolrResourceLoader(instanceDir), name, is);
}
@@ -181,7 +169,7 @@ public class SolrConfig extends Config i
if (loader instanceof ZkSolrResourceLoader) {
resource = name;
} else {
- resource = loader.getConfigDir() + name;
+ resource = Paths.get(loader.getConfigDir()).resolve(name).toString();
}
throw new SolrException(ErrorCode.SERVER_ERROR, "Error loading solr config from " + resource, e);
}
@@ -759,32 +747,38 @@ public class SolrConfig extends Config i
log.info("Adding specified lib dirs to ClassLoader");
SolrResourceLoader loader = getResourceLoader();
+ List<URL> urls = new ArrayList<>();
- try {
- for (int i = 0; i < nodes.getLength(); i++) {
- Node node = nodes.item(i);
-
- String baseDir = DOMUtil.getAttr(node, "dir");
- String path = DOMUtil.getAttr(node, PATH);
- if (null != baseDir) {
- // :TODO: add support for a simpler 'glob' mutually exclusive of regex
- String regex = DOMUtil.getAttr(node, "regex");
- FileFilter filter = (null == regex) ? null : new RegexFileFilter(regex);
- loader.addToClassLoader(baseDir, filter, false);
- } else if (null != path) {
- final File file = FileUtils.resolvePath(new File(loader.getInstanceDir()), path);
- loader.addToClassLoader(file.getParent(), new FileFilter() {
- @Override
- public boolean accept(File pathname) {
- return pathname.equals(file);
- }
- }, false);
- } else {
- throw new RuntimeException(
- "lib: missing mandatory attributes: 'dir' or 'path'");
+ for (int i = 0; i < nodes.getLength(); i++) {
+ Node node = nodes.item(i);
+ String baseDir = DOMUtil.getAttr(node, "dir");
+ String path = DOMUtil.getAttr(node, PATH);
+ if (null != baseDir) {
+ // :TODO: add support for a simpler 'glob' mutually exclusive of regex
+ Path dir = loader.getInstancePath().resolve(baseDir);
+ String regex = DOMUtil.getAttr(node, "regex");
+ try {
+ if (regex == null)
+ urls.addAll(SolrResourceLoader.getURLs(dir));
+ else
+ urls.addAll(SolrResourceLoader.getFilteredURLs(dir, regex));
+ } catch (IOException e) {
+ log.warn("Couldn't add files from {} filtered by {} to classpath: {}", dir, regex, e.getMessage());
+ }
+ } else if (null != path) {
+ final Path dir = loader.getInstancePath().resolve(path);
+ try {
+ urls.add(dir.toUri().toURL());
+ } catch (MalformedURLException e) {
+ log.warn("Couldn't add file {} to classpath: {}", dir, e.getMessage());
}
+ } else {
+ throw new RuntimeException("lib: missing mandatory attributes: 'dir' or 'path'");
}
- } finally {
+ }
+
+ if (urls.size() > 0) {
+ loader.addToClassLoader(urls);
loader.reloadLuceneSPI();
}
}
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrCore.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrCore.java Fri Nov 20 12:42:42 2015
@@ -17,9 +17,6 @@
package org.apache.solr.core;
-import static com.google.common.base.Preconditions.*;
-import static org.apache.solr.common.params.CommonParams.*;
-
import java.io.Closeable;
import java.io.File;
import java.io.FileNotFoundException;
@@ -31,22 +28,7 @@ import java.lang.reflect.Constructor;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.NoSuchFileException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.IdentityHashMap;
-import java.util.LinkedHashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.StringTokenizer;
+import java.util.*;
import java.util.concurrent.Callable;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -94,20 +76,7 @@ import org.apache.solr.handler.component
import org.apache.solr.logging.MDCLoggingContext;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.request.SolrRequestHandler;
-import org.apache.solr.response.BinaryResponseWriter;
-import org.apache.solr.response.CSVResponseWriter;
-import org.apache.solr.response.JSONResponseWriter;
-import org.apache.solr.response.PHPResponseWriter;
-import org.apache.solr.response.PHPSerializedResponseWriter;
-import org.apache.solr.response.PythonResponseWriter;
-import org.apache.solr.response.QueryResponseWriter;
-import org.apache.solr.response.RawResponseWriter;
-import org.apache.solr.response.RubyResponseWriter;
-import org.apache.solr.response.SchemaXmlResponseWriter;
-import org.apache.solr.response.SmileResponseWriter;
-import org.apache.solr.response.SolrQueryResponse;
-import org.apache.solr.response.SortingResponseWriter;
-import org.apache.solr.response.XMLResponseWriter;
+import org.apache.solr.response.*;
import org.apache.solr.response.transform.TransformerFactory;
import org.apache.solr.rest.ManagedResourceStorage;
import org.apache.solr.rest.ManagedResourceStorage.StorageIO;
@@ -147,6 +116,9 @@ import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.solr.common.params.CommonParams.PATH;
+
/**
*
*/
@@ -763,7 +735,7 @@ public final class SolrCore implements S
this.dataDir = initDataDir(dataDir, config, coreDescriptor);
this.ulogDir = initUpdateLogDir(coreDescriptor);
- log.info("[{}] Opening new SolrCore at [{}], dataDir=[{}]", logid, resourceLoader.getInstanceDir(), dataDir);
+ log.info("[{}] Opening new SolrCore at [{}], dataDir=[{}]", logid, resourceLoader.getInstancePath(), dataDir);
checkVersionFieldExistsInSchema(schema, coreDescriptor);
@@ -2465,7 +2437,7 @@ public final class SolrCore implements S
lst.add("coreName", name==null ? "(null)" : name);
lst.add("startTime", startTime);
lst.add("refCount", getOpenCount());
- lst.add("instanceDir", resourceLoader.getInstanceDir());
+ lst.add("instanceDir", resourceLoader.getInstancePath());
lst.add("indexDir", getIndexDir());
CoreDescriptor cd = getCoreDescriptor();
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java Fri Nov 20 12:42:42 2015
@@ -23,22 +23,23 @@ import javax.naming.NamingException;
import javax.naming.NoInitialContextException;
import java.io.Closeable;
import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.reflect.Constructor;
-import java.net.MalformedURLException;
-import java.net.URI;
import java.net.URL;
import java.net.URLClassLoader;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
+import java.nio.file.DirectoryStream;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.PathMatcher;
import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
@@ -70,7 +71,6 @@ import org.apache.solr.schema.ManagedInd
import org.apache.solr.schema.SimilarityFactory;
import org.apache.solr.search.QParserPlugin;
import org.apache.solr.update.processor.UpdateRequestProcessorFactory;
-import org.apache.solr.util.FileUtils;
import org.apache.solr.util.plugin.SolrCoreAware;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -91,7 +91,7 @@ public class SolrResourceLoader implemen
};
protected URLClassLoader classLoader;
- private final String instanceDir;
+ private final Path instanceDir;
private String dataDir;
private final List<SolrCoreAware> waitingForCore = Collections.synchronizedList(new ArrayList<SolrCoreAware>());
@@ -116,6 +116,40 @@ public class SolrResourceLoader implemen
}
return managedResourceRegistry;
}
+
+ public SolrResourceLoader() {
+ this(SolrResourceLoader.locateSolrHome(), null, null);
+ }
+
+ /**
+ * <p>
+ * This loader will delegate to the context classloader when possible,
+ * otherwise it will attempt to resolve resources using any jar files
+ * found in the "lib/" directory in the specified instance directory.
+ * If the instance directory is not specified (=null), SolrResourceLoader#locateInstanceDir will provide one.
+ */
+ public SolrResourceLoader(Path instanceDir, ClassLoader parent)
+ {
+ this(instanceDir, parent, null);
+ }
+
+ /** Use {@link #SolrResourceLoader(Path, ClassLoader)} */
+ @Deprecated
+ public SolrResourceLoader(String instanceDir, ClassLoader parent) {
+ this(Paths.get(instanceDir), parent);
+ }
+
+ public SolrResourceLoader(Path instanceDir) {
+ this(instanceDir, null, null);
+ }
+
+ /**
+ * Use {@link #SolrResourceLoader(Path)}
+ */
+ @Deprecated
+ public SolrResourceLoader(String instanceDir) {
+ this(Paths.get(instanceDir));
+ }
/**
* <p>
@@ -127,86 +161,78 @@ public class SolrResourceLoader implemen
* @param instanceDir - base directory for this resource loader, if null locateSolrHome() will be used.
* @see #locateSolrHome
*/
- public SolrResourceLoader( String instanceDir, ClassLoader parent, Properties coreProperties )
- {
- if( instanceDir == null ) {
- this.instanceDir = SolrResourceLoader.locateSolrHome();
- log.info("new SolrResourceLoader for deduced Solr Home: '{}'",
- this.instanceDir);
+ public SolrResourceLoader(Path instanceDir, ClassLoader parent, Properties coreProperties) {
+ if (instanceDir == null) {
+ this.instanceDir = SolrResourceLoader.locateSolrHome().toAbsolutePath().normalize();
+ log.info("new SolrResourceLoader for deduced Solr Home: '{}'", this.instanceDir);
} else{
- this.instanceDir = normalizeDir(instanceDir);
- log.info("new SolrResourceLoader for directory: '{}'",
- this.instanceDir);
+ this.instanceDir = instanceDir.toAbsolutePath().normalize();
+ log.info("new SolrResourceLoader for directory: '{}'", this.instanceDir);
}
-
- this.classLoader = createClassLoader(null, parent);
+
+ if (parent == null)
+ parent = Thread.currentThread().getContextClassLoader();
+ this.classLoader = new URLClassLoader(new URL[0], parent);
+
/*
* Skip the lib subdirectory when we are loading from the solr home.
* Otherwise load it, so core lib directories still get loaded.
* The default sharedLib will pick this up later, and if the user has
* changed sharedLib, then we don't want to load that location anyway.
*/
- if (! this.instanceDir.equals(SolrResourceLoader.locateSolrHome())) {
- addToClassLoader("./lib/", null, true);
- reloadLuceneSPI();
+ if (!this.instanceDir.equals(SolrResourceLoader.locateSolrHome())) {
+ Path libDir = this.instanceDir.resolve("lib");
+ if (Files.exists(libDir)) {
+ try {
+ addToClassLoader(getURLs(libDir));
+ } catch (IOException e) {
+ log.warn("Couldn't add files from {} to classpath: {}", libDir, e.getMessage());
+ }
+ reloadLuceneSPI();
+ }
}
this.coreProperties = coreProperties;
}
/**
- * <p>
- * This loader will delegate to the context classloader when possible,
- * otherwise it will attempt to resolve resources using any jar files
- * found in the "lib/" directory in the specified instance directory.
- * If the instance directory is not specified (=null), SolrResourceLoader#locateInstanceDir will provide one.
+ * Use {@link #SolrResourceLoader(Path, ClassLoader, Properties)}
*/
- public SolrResourceLoader( String instanceDir, ClassLoader parent )
- {
- this(instanceDir, parent, null);
+ @Deprecated
+ public SolrResourceLoader(String instanceDir, ClassLoader parent, Properties properties) {
+ this(Paths.get(instanceDir), parent, properties);
}
/**
- * Adds every file/dir found in the baseDir which passes the specified Filter
- * to the ClassLoader used by this ResourceLoader. This method <b>MUST</b>
+ * Adds URLs to the ResourceLoader's internal classloader. This method <b>MUST</b>
* only be called prior to using this ResourceLoader to get any resources, otherwise
* its behavior will be non-deterministic. You also have to {link @reloadLuceneSPI}
* before using this ResourceLoader.
- *
- * <p>This method will quietly ignore missing or non-directory <code>baseDir</code>
- * folder.
*
- * @param baseDir base directory whose children (either jars or directories of
- * classes) will be in the classpath, will be resolved relative
- * the instance dir.
- * @param filter The filter files must satisfy, if null all files will be accepted.
- * @param quiet Be quiet if baseDir does not point to a directory or if no file is
- * left after applying the filter.
- */
- void addToClassLoader(final String baseDir, final FileFilter filter, boolean quiet) {
- File base = FileUtils.resolvePath(new File(getInstanceDir()), baseDir);
- if (base != null && base.exists() && base.isDirectory()) {
- File[] files = base.listFiles(filter);
- if (files == null || files.length == 0) {
- if (!quiet) {
- log.warn("No files added to classloader from lib: "
- + baseDir + " (resolved as: " + base.getAbsolutePath() + ").");
- }
- } else {
- this.classLoader = replaceClassLoader(classLoader, base, filter);
- }
- } else {
- if (!quiet) {
- log.warn("Can't find (or read) directory to add to classloader: "
- + baseDir + " (resolved as: " + base.getAbsolutePath() + ").");
- }
+ * @param urls the URLs of files to add
+ */
+ void addToClassLoader(List<URL> urls) {
+ URLClassLoader newLoader = addURLsToClassLoader(classLoader, urls);
+ if (newLoader != classLoader) {
+ this.classLoader = newLoader;
}
}
+
+ /**
+ * Adds URLs to the ResourceLoader's internal classloader. This method <b>MUST</b>
+ * only be called prior to using this ResourceLoader to get any resources, otherwise
+ * its behavior will be non-deterministic. You also have to {link @reloadLuceneSPI}
+ * before using this ResourceLoader.
+ *
+ * @param urls the URLs of files to add
+ */
+ void addToClassLoader(URL... urls) {
+ addToClassLoader(Arrays.asList(urls));
+ }
/**
* Reloads all Lucene SPI implementations using the new classloader.
- * This method must be called after {@link #addToClassLoader(String, FileFilter, boolean)}
- * and {@link #addToClassLoader(String,FileFilter,boolean)} before using
- * this ResourceLoader.
+ * This method must be called after {@link #addToClassLoader(List)}
+ * and before using this ResourceLoader.
*/
void reloadLuceneSPI() {
// Codecs:
@@ -218,55 +244,75 @@ public class SolrResourceLoader implemen
TokenFilterFactory.reloadTokenFilters(this.classLoader);
TokenizerFactory.reloadTokenizers(this.classLoader);
}
-
- private static URLClassLoader replaceClassLoader(final URLClassLoader oldLoader,
- final File base,
- final FileFilter filter) {
- if (null != base && base.canRead() && base.isDirectory()) {
- File[] files = base.listFiles(filter);
-
- if (null == files || 0 == files.length) return oldLoader;
-
- URL[] oldElements = oldLoader.getURLs();
- URL[] elements = new URL[oldElements.length + files.length];
- System.arraycopy(oldElements, 0, elements, 0, oldElements.length);
-
- for (int j = 0; j < files.length; j++) {
- try {
- URL element = files[j].toURI().normalize().toURL();
- log.info("Adding '" + element.toString() + "' to classloader");
- elements[oldElements.length + j] = element;
- } catch (MalformedURLException e) {
- SolrException.log(log, "Can't add element to classloader: " + files[j], e);
- }
- }
- ClassLoader oldParent = oldLoader.getParent();
- IOUtils.closeWhileHandlingException(oldLoader); // best effort
- return URLClassLoader.newInstance(elements, oldParent);
+
+ private static URLClassLoader addURLsToClassLoader(final URLClassLoader oldLoader, List<URL> urls) {
+ if (urls.size() == 0) {
+ return oldLoader;
+ }
+
+ List<URL> allURLs = new ArrayList<>();
+ allURLs.addAll(Arrays.asList(oldLoader.getURLs()));
+ allURLs.addAll(urls);
+ for (URL url : urls) {
+ log.info("Adding '{}' to classloader", url.toString());
}
- // are we still here?
- return oldLoader;
+
+ ClassLoader oldParent = oldLoader.getParent();
+ IOUtils.closeWhileHandlingException(oldLoader);
+ return URLClassLoader.newInstance(allURLs.toArray(new URL[allURLs.size()]), oldParent);
}
-
+
/**
- * Convenience method for getting a new ClassLoader using all files found
- * in the specified lib directory.
+ * Utility method to get the URLs of all paths under a given directory that match a filter
+ * @param libDir the root directory
+ * @param filter the filter
+ * @return all matching URLs
+ * @throws IOException on error
*/
- static URLClassLoader createClassLoader(final File libDir, ClassLoader parent) {
- if ( null == parent ) {
- parent = Thread.currentThread().getContextClassLoader();
+ public static List<URL> getURLs(Path libDir, DirectoryStream.Filter<Path> filter) throws IOException {
+ List<URL> urls = new ArrayList<>();
+ try (DirectoryStream<Path> directory = Files.newDirectoryStream(libDir, filter)) {
+ for (Path element : directory) {
+ urls.add(element.toUri().normalize().toURL());
+ }
}
- return replaceClassLoader(URLClassLoader.newInstance(new URL[0], parent),
- libDir, null);
+ return urls;
}
-
- public SolrResourceLoader( String instanceDir )
- {
- this( instanceDir, null, null );
+
+ /**
+ * Utility method to get the URLs of all paths under a given directory
+ * @param libDir the root directory
+ * @return all subdirectories as URLs
+ * @throws IOException on error
+ */
+ public static List<URL> getURLs(Path libDir) throws IOException {
+ return getURLs(libDir, new DirectoryStream.Filter<Path>() {
+ @Override
+ public boolean accept(Path entry) throws IOException {
+ return true;
+ }
+ });
+ }
+
+ /**
+ * Utility method to get the URLs of all paths under a given directory that match a regex
+ * @param libDir the root directory
+ * @param regex the regex as a String
+ * @return all matching URLs
+ * @throws IOException on error
+ */
+ public static List<URL> getFilteredURLs(Path libDir, String regex) throws IOException {
+ final PathMatcher matcher = libDir.getFileSystem().getPathMatcher("regex:" + regex);
+ return getURLs(libDir, new DirectoryStream.Filter<Path>() {
+ @Override
+ public boolean accept(Path entry) throws IOException {
+ return matcher.matches(entry.getFileName());
+ }
+ });
}
/** Ensures a directory name always ends with a '/'. */
- public static String normalizeDir(String path) {
+ public static String normalizeDir(String path) {
return ( path != null && (!(path.endsWith("/") || path.endsWith("\\"))) )? path + File.separator : path;
}
@@ -280,7 +326,7 @@ public class SolrResourceLoader implemen
}
public String getConfigDir() {
- return instanceDir + "conf" + File.separator;
+ return instanceDir.resolve("conf").toString();
}
public String getDataDir() {
@@ -316,6 +362,16 @@ public class SolrResourceLoader implemen
public InputStream openConfig(String name) throws IOException {
return openResource(name);
}
+
+ private Path checkPathIsSafe(Path pathToCheck) throws IOException {
+ if (Boolean.getBoolean("solr.allow.unsafe.resourceloading"))
+ return pathToCheck;
+ pathToCheck = pathToCheck.normalize();
+ if (pathToCheck.startsWith(instanceDir))
+ return pathToCheck;
+ throw new IOException("File " + pathToCheck + " is outside resource loader dir " + instanceDir +
+ "; set -Dsolr.allow.unsafe.resourceloading=true to allow unsafe loading");
+ }
/** Opens any resource by its name.
* By default, this will look in multiple locations to load the resource:
@@ -327,53 +383,56 @@ public class SolrResourceLoader implemen
*/
@Override
public InputStream openResource(String resource) throws IOException {
- InputStream is=null;
- try {
- File f0 = new File(resource), f = f0;
- if (!f.isAbsolute()) {
- // try $CWD/$configDir/$resource
- f = new File(getConfigDir() + resource).getAbsoluteFile();
- }
- boolean found = f.isFile() && f.canRead();
- if (!found) { // no success with $CWD/$configDir/$resource
- f = f0.getAbsoluteFile();
- found = f.isFile() && f.canRead();
- }
- // check that we don't escape instance dir
- if (found) {
- if (!Boolean.parseBoolean(System.getProperty("solr.allow.unsafe.resourceloading", "false"))) {
- final URI instanceURI = new File(getInstanceDir()).getAbsoluteFile().toURI().normalize();
- final URI fileURI = f.toURI().normalize();
- if (instanceURI.relativize(fileURI) == fileURI) {
- // no URI relativize possible, so they don't share same base folder
- throw new IOException("For security reasons, SolrResourceLoader cannot load files from outside the instance's directory: " + f +
- "; if you want to override this safety feature and you are sure about the consequences, you can pass the system property "+
- "-Dsolr.allow.unsafe.resourceloading=true to your JVM");
- }
- }
- // relativize() returned a relative, new URI, so we are fine!
- return new FileInputStream(f);
- }
- // Delegate to the class loader (looking into $INSTANCE_DIR/lib jars).
- // We need a ClassLoader-compatible (forward-slashes) path here!
- is = classLoader.getResourceAsStream(resource.replace(File.separatorChar, '/'));
- // This is a hack just for tests (it is not done in ZKResourceLoader)!
- // -> the getConfigDir's path must not be absolute!
- if (is == null && System.getProperty("jetty.testMode") != null && !new File(getConfigDir()).isAbsolute()) {
- is = classLoader.getResourceAsStream((getConfigDir() + resource).replace(File.separatorChar, '/'));
- }
- } catch (IOException ioe) {
- throw ioe;
- } catch (Exception e) {
- throw new IOException("Error opening " + resource, e);
+
+ Path inConfigDir = getInstancePath().resolve("conf").resolve(resource);
+ if (Files.exists(inConfigDir) && Files.isReadable(inConfigDir)) {
+ return Files.newInputStream(checkPathIsSafe(inConfigDir));
}
- if (is==null) {
- throw new SolrResourceNotFoundException("Can't find resource '" + resource + "' in classpath or '" + new File(getConfigDir()).getAbsolutePath() + "'");
+
+ Path inInstanceDir = getInstancePath().resolve(resource);
+ if (Files.exists(inInstanceDir) && Files.isReadable(inInstanceDir)) {
+ return Files.newInputStream(checkPathIsSafe(inInstanceDir));
+ }
+
+ // Delegate to the class loader (looking into $INSTANCE_DIR/lib jars).
+ // We need a ClassLoader-compatible (forward-slashes) path here!
+ InputStream is = classLoader.getResourceAsStream(resource.replace(File.separatorChar, '/'));
+
+ // This is a hack just for tests (it is not done in ZKResourceLoader)!
+ // TODO can we nuke this?
+ if (is == null && System.getProperty("jetty.testMode") != null) {
+ is = classLoader.getResourceAsStream(("conf/" + resource).replace(File.separatorChar, '/'));
+ }
+
+ if (is == null) {
+ throw new SolrResourceNotFoundException("Can't find resource '" + resource + "' in classpath or '" + instanceDir + "'");
}
return is;
}
/**
+ * Report the location of a resource found by the resource loader
+ */
+ public String resourceLocation(String resource) {
+ Path inConfigDir = getInstancePath().resolve("conf").resolve(resource);
+ if (Files.exists(inConfigDir) && Files.isReadable(inConfigDir))
+ return inConfigDir.toAbsolutePath().normalize().toString();
+
+ Path inInstanceDir = getInstancePath().resolve(resource);
+ if (Files.exists(inInstanceDir) && Files.isReadable(inInstanceDir))
+ return inInstanceDir.toAbsolutePath().normalize().toString();
+
+ try (InputStream is = classLoader.getResourceAsStream(resource.replace(File.separatorChar, '/'))) {
+ if (is != null)
+ return "classpath:" + resource;
+ } catch (IOException e) {
+ // ignore
+ }
+
+ return resource;
+ }
+
+ /**
* Accesses a resource by name and returns the (non comment) lines
* containing data.
*
@@ -699,7 +758,7 @@ public class SolrResourceLoader implemen
* @return A normalized solrhome
* @see #normalizeDir(String)
*/
- public static String locateSolrHome() {
+ public static Path locateSolrHome() {
String home = null;
// Try JNDI
@@ -729,12 +788,20 @@ public class SolrResourceLoader implemen
home = project + '/';
log.info(project + " home defaulted to '" + home + "' (could not find system property or JNDI)");
}
- return normalizeDir( home );
+ return Paths.get(home);
}
+ /**
+ * @return the instance path for this resource loader
+ */
+ public Path getInstancePath() {
+ return instanceDir;
+ }
+ /** Use {@link #getInstancePath()} */
+ @Deprecated
public String getInstanceDir() {
- return instanceDir;
+ return instanceDir.toString();
}
/**
@@ -836,7 +903,4 @@ public class SolrResourceLoader implemen
}
}
- public String resolve(String pathToResolve) {
- return Paths.get(instanceDir).resolve(pathToResolve).toString();
- }
}
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java Fri Nov 20 12:42:42 2015
@@ -21,10 +21,9 @@ import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.util.HashSet;
import java.util.Map;
@@ -99,16 +98,16 @@ public class SolrXmlConfig {
return fillSolrSection(configBuilder, entries);
}
- public static NodeConfig fromFile(SolrResourceLoader loader, File configFile) {
+ public static NodeConfig fromFile(SolrResourceLoader loader, Path configFile) {
- log.info("Loading container configuration from {}", configFile.getAbsolutePath());
+ log.info("Loading container configuration from {}", configFile);
- if (!configFile.exists()) {
+ if (!Files.exists(configFile)) {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
- "solr.xml does not exist in " + configFile.getAbsolutePath() + " cannot start Solr");
+ "solr.xml does not exist in " + configFile.getParent() + " cannot start Solr");
}
- try (InputStream inputStream = new FileInputStream(configFile)) {
+ try (InputStream inputStream = Files.newInputStream(configFile)) {
return fromInputStream(loader, inputStream);
} catch (SolrException exc) {
throw exc;
@@ -136,13 +135,13 @@ public class SolrXmlConfig {
}
}
- public static NodeConfig fromSolrHome(SolrResourceLoader loader, String solrHome) {
- return fromFile(loader, new File(solrHome, SOLR_XML_FILE));
+ public static NodeConfig fromSolrHome(SolrResourceLoader loader, Path solrHome) {
+ return fromFile(loader, solrHome.resolve(SOLR_XML_FILE));
}
public static NodeConfig fromSolrHome(Path solrHome) {
- SolrResourceLoader loader = new SolrResourceLoader(solrHome.toString());
- return fromSolrHome(loader, solrHome.toString());
+ SolrResourceLoader loader = new SolrResourceLoader(solrHome);
+ return fromSolrHome(loader, solrHome);
}
private static void checkForIllegalConfig(Config config) {
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java Fri Nov 20 12:42:42 2015
@@ -19,18 +19,7 @@ package org.apache.solr.handler.admin;
import java.io.File;
import java.io.IOException;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Properties;
+import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
@@ -1191,7 +1180,7 @@ public class CoreAdminHandler extends Re
try (SolrCore core = cores.getCore(cname)) {
if (core != null) {
info.add(NAME, core.getName());
- info.add("instanceDir", normalizePath(core.getResourceLoader().getInstanceDir()));
+ info.add("instanceDir", core.getResourceLoader().getInstancePath().toString());
info.add("dataDir", normalizePath(core.getDataDir()));
info.add("config", core.getConfigResource());
info.add("schema", core.getSchemaResource());
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java Fri Nov 20 12:42:42 2015
@@ -142,7 +142,7 @@ public class SystemInfoHandler extends R
// Solr Home
SimpleOrderedMap<Object> dirs = new SimpleOrderedMap<>();
dirs.add( "cwd" , new File( System.getProperty("user.dir")).getAbsolutePath() );
- dirs.add( "instance", new File( core.getResourceLoader().getInstanceDir() ).getAbsolutePath() );
+ dirs.add("instance", core.getResourceLoader().getInstancePath().toString());
try {
dirs.add( "data", core.getDirectoryFactory().normalize(core.getDataDir()));
} catch (IOException e) {
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/response/TextResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/response/TextResponseWriter.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/response/TextResponseWriter.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/response/TextResponseWriter.java Fri Nov 20 12:42:42 2015
@@ -19,25 +19,30 @@ package org.apache.solr.response;
import java.io.IOException;
import java.io.Writer;
-import java.util.*;
+import java.nio.file.Path;
+import java.util.Arrays;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.Map;
import org.apache.lucene.document.Document;
import org.apache.lucene.index.IndexableField;
-import org.apache.solr.client.solrj.io.stream.TupleStream;
-import org.apache.solr.client.solrj.io.Tuple;
import org.apache.lucene.util.BytesRef;
+import org.apache.solr.client.solrj.io.Tuple;
+import org.apache.solr.client.solrj.io.stream.TupleStream;
import org.apache.solr.common.EnumFieldValue;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.util.Base64;
-import org.apache.solr.util.DateFormatUtil;
-import org.apache.solr.util.FastWriter;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.search.DocList;
import org.apache.solr.search.ReturnFields;
+import org.apache.solr.util.DateFormatUtil;
+import org.apache.solr.util.FastWriter;
/** Base class for text-oriented response writers.
*
@@ -163,6 +168,8 @@ public abstract class TextResponseWriter
writeNamedList(name, (NamedList)val);
} else if (val instanceof TupleStream) {
writeTupleStream((TupleStream) val);
+ } else if (val instanceof Path) {
+ writeStr(name, ((Path) val).toAbsolutePath().toString(), true);
} else if (val instanceof Iterable) {
writeArray(name,((Iterable)val).iterator());
} else if (val instanceof Object[]) {
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/IndexSchema.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/IndexSchema.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/IndexSchema.java Fri Nov 20 12:42:42 2015
@@ -17,28 +17,13 @@
package org.apache.solr.schema;
-import java.io.IOException;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import java.util.SortedMap;
-import java.util.SortedSet;
-import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.regex.Pattern;
-
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.*;
+import java.util.regex.Pattern;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.DelegatingAnalyzerWrapper;
@@ -51,7 +36,6 @@ import org.apache.lucene.index.MultiFiel
import org.apache.lucene.search.similarities.Similarity;
import org.apache.lucene.uninverting.UninvertingReader;
import org.apache.lucene.util.Version;
-import org.apache.solr.cloud.CloudUtil;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.params.SolrParams;
@@ -446,9 +430,6 @@ public class IndexSchema {
}
protected void readSchema(InputSource is) {
- String resourcePath = CloudUtil.unifiedResourcePath(loader) + resourceName;
- log.info("Reading Solr Schema from " + resourcePath);
-
try {
// pass the config resource loader to avoid building an empty one for no reason:
// in the current case though, the stream is valid so we wont load the resource by name
@@ -593,13 +574,12 @@ public class IndexSchema {
postReadInform();
} catch (SolrException e) {
- throw new SolrException(ErrorCode.getErrorCode(e.code()), e.getMessage() + ". Schema file is " +
- resourcePath, e);
+ throw new SolrException(ErrorCode.getErrorCode(e.code()),
+ "Can't load schema " + loader.resourceLocation(resourceName) + ": " + e.getMessage(), e);
} catch(Exception e) {
// unexpected exception...
throw new SolrException(ErrorCode.SERVER_ERROR,
- "Schema Parsing Failed: " + e.getMessage() + ". Schema file is " + resourcePath,
- e);
+ "Can't load schema " + loader.resourceLocation(resourceName) + ": " + e.getMessage(), e);
}
// create the field analyzers
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchemaFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchemaFactory.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchemaFactory.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchemaFactory.java Fri Nov 20 12:42:42 2015
@@ -16,6 +16,11 @@ package org.apache.solr.schema;
* limitations under the License.
*/
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
import org.apache.commons.io.IOUtils;
import org.apache.solr.cloud.ZkController;
import org.apache.solr.cloud.ZkSolrResourceLoader;
@@ -36,11 +41,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.InputSource;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-
/** Factory for ManagedIndexSchema */
public class ManagedIndexSchemaFactory extends IndexSchemaFactory implements SolrCoreAware {
private static final Logger log = LoggerFactory.getLogger(ManagedIndexSchemaFactory.class);
@@ -284,7 +284,7 @@ public class ManagedIndexSchemaFactory e
+ "nor under SolrConfig.getConfigDir() or the current directory."
+ " PLEASE REMOVE THIS FILE.");
} else {
- File upgradedSchemaFile = new File(nonManagedSchemaFile.getPath() + UPGRADED_SCHEMA_EXTENSION);
+ File upgradedSchemaFile = new File(nonManagedSchemaFile + UPGRADED_SCHEMA_EXTENSION);
if (nonManagedSchemaFile.renameTo(upgradedSchemaFile)) {
// Set the resource name to the managed schema so that the CoreAdminHandler returns a findable filename
schema.setResourceName(managedSchemaResourceName);
@@ -309,25 +309,10 @@ public class ManagedIndexSchemaFactory e
*@return the File for the named resource, or null if it can't be found
*/
private File locateConfigFile(String resource) {
- File located = null;
- File file = new File(resource);
- if (file.isAbsolute()) {
- if (file.isFile() && file.canRead()) {
- located = file;
- }
- } else {
- // try $configDir/$resource
- File fileUnderConfigDir = new File(config.getResourceLoader().getConfigDir() + resource);
- if (fileUnderConfigDir.isFile() && fileUnderConfigDir.canRead()) {
- located = fileUnderConfigDir;
- } else {
- // no success with $configDir/$resource - try $CWD/$resource
- if (file.isFile() && file.canRead()) {
- located = file;
- }
- }
- }
- return located;
+ String location = config.getResourceLoader().resourceLocation(resource);
+ if (location.equals(resource) || location.startsWith("classpath:"))
+ return null;
+ return new File(location);
}
/**
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java Fri Nov 20 12:42:42 2015
@@ -26,6 +26,8 @@ import javax.servlet.http.HttpServletReq
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -102,11 +104,10 @@ public class SolrDispatchFilter extends
extraProperties = new Properties();
String solrHome = (String) config.getServletContext().getAttribute(SOLRHOME_ATTRIBUTE);
- if (solrHome == null)
- solrHome = SolrResourceLoader.locateSolrHome();
ExecutorUtil.addThreadLocalProvider(SolrRequestInfo.getInheritableThreadLocalProvider());
- this.cores = createCoreContainer(solrHome, extraProperties);
+ this.cores = createCoreContainer(solrHome == null ? SolrResourceLoader.locateSolrHome() : Paths.get(solrHome),
+ extraProperties);
this.httpClient = cores.getUpdateShardHandler().getHttpClient();
log.info("user.dir=" + System.getProperty("user.dir"));
}
@@ -126,7 +127,7 @@ public class SolrDispatchFilter extends
* Override this to change CoreContainer initialization
* @return a CoreContainer to hold this server's cores
*/
- protected CoreContainer createCoreContainer(String solrHome, Properties extraProperties) {
+ protected CoreContainer createCoreContainer(Path solrHome, Properties extraProperties) {
NodeConfig nodeConfig = loadNodeConfig(solrHome, extraProperties);
cores = new CoreContainer(nodeConfig, extraProperties, true);
cores.load();
@@ -138,7 +139,7 @@ public class SolrDispatchFilter extends
* This may also be used by custom filters to load relevant configuration.
* @return the NodeConfig
*/
- public static NodeConfig loadNodeConfig(String solrHome, Properties nodeProperties) {
+ public static NodeConfig loadNodeConfig(Path solrHome, Properties nodeProperties) {
SolrResourceLoader loader = new SolrResourceLoader(solrHome, null, nodeProperties);
if (!StringUtils.isEmpty(System.getProperty("solr.solrxml.location"))) {
@@ -159,7 +160,7 @@ public class SolrDispatchFilter extends
}
log.info("Loading solr.xml from SolrHome (not found in ZooKeeper)");
}
- return SolrXmlConfig.fromSolrHome(loader, loader.getInstanceDir());
+ return SolrXmlConfig.fromSolrHome(loader, loader.getInstancePath());
}
public CoreContainer getCores() {
Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/analysis/TestWordDelimiterFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/analysis/TestWordDelimiterFilterFactory.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/analysis/TestWordDelimiterFilterFactory.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/analysis/TestWordDelimiterFilterFactory.java Fri Nov 20 12:42:42 2015
@@ -17,17 +17,15 @@ package org.apache.solr.analysis;
* limitations under the License.
*/
-import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
import org.apache.lucene.analysis.BaseTokenStreamTestCase;
-import org.apache.lucene.analysis.MockTokenizer;
import org.apache.lucene.analysis.TokenStream;
-import org.apache.lucene.util.Version;
-import org.apache.solr.SolrTestCaseJ4;
import org.apache.lucene.analysis.miscellaneous.WordDelimiterFilterFactory;
import org.apache.lucene.analysis.util.ResourceLoader;
+import org.apache.lucene.util.Version;
+import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.core.SolrResourceLoader;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -199,7 +197,7 @@ public class TestWordDelimiterFilterFact
@Test
public void testCustomTypes() throws Exception {
String testText = "I borrowed $5,400.00 at 25% interest-rate";
- ResourceLoader loader = new SolrResourceLoader("solr/collection1");
+ ResourceLoader loader = new SolrResourceLoader(TEST_PATH().resolve("collection1"));
Map<String,String> args = new HashMap<>();
args.put("luceneMatchVersion", Version.LATEST.toString());
args.put("generateWordParts", "1");
Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/client/solrj/embedded/TestEmbeddedSolrServerConstructors.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/client/solrj/embedded/TestEmbeddedSolrServerConstructors.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/client/solrj/embedded/TestEmbeddedSolrServerConstructors.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/client/solrj/embedded/TestEmbeddedSolrServerConstructors.java Fri Nov 20 12:42:42 2015
@@ -17,6 +17,10 @@ package org.apache.solr.client.solrj.emb
* limitations under the License.
*/
+import java.io.IOException;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.request.CoreAdminRequest;
@@ -25,10 +29,6 @@ import org.apache.solr.core.NodeConfig;
import org.apache.solr.core.SolrResourceLoader;
import org.junit.Test;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-
public class TestEmbeddedSolrServerConstructors extends SolrTestCaseJ4 {
@Test
@@ -43,7 +43,7 @@ public class TestEmbeddedSolrServerConst
public void testNodeConfigConstructor() throws Exception {
Path path = createTempDir();
- SolrResourceLoader loader = new SolrResourceLoader(path.toString());
+ SolrResourceLoader loader = new SolrResourceLoader(path);
NodeConfig config = new NodeConfig.NodeConfigBuilder("testnode", loader)
.setConfigSetBaseDirectory(Paths.get(TEST_HOME()).resolve("configsets").toString())
.build();
Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIDistributedZkTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIDistributedZkTest.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIDistributedZkTest.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIDistributedZkTest.java Fri Nov 20 12:42:42 2015
@@ -909,14 +909,12 @@ public class CollectionsAPIDistributedZk
for (SolrCore core : theCores) {
// look for core props file
- assertTrue("Could not find expected core.properties file",
- new File((String) core.getStatistics().get("instanceDir"),
- "core.properties").exists());
+ Path instancedir = (Path) core.getStatistics().get("instanceDir");
+ assertTrue("Could not find expected core.properties file", Files.exists(instancedir.resolve("core.properties")));
Path expected = Paths.get(jetty.getSolrHome()).toAbsolutePath().resolve("cores").resolve(core.getName());
- Path reported = Paths.get((String) core.getStatistics().get("instanceDir"));
- assertTrue("Expected: " + expected + "\nFrom core stats: " + reported, Files.isSameFile(expected, reported));
+ assertTrue("Expected: " + expected + "\nFrom core stats: " + instancedir, Files.isSameFile(expected, instancedir));
}
}
Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/SolrXmlInZkTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/SolrXmlInZkTest.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/SolrXmlInZkTest.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/SolrXmlInZkTest.java Fri Nov 20 12:42:42 2015
@@ -16,8 +16,12 @@ package org.apache.solr.cloud;
* the License.
*/
-import com.carrotsearch.randomizedtesting.rules.SystemPropertiesRestoreRule;
+import java.io.File;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
+import java.util.Properties;
+import com.carrotsearch.randomizedtesting.rules.SystemPropertiesRestoreRule;
import org.apache.commons.io.FileUtils;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.SolrException;
@@ -25,16 +29,11 @@ import org.apache.solr.common.cloud.Solr
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.core.NodeConfig;
import org.apache.solr.servlet.SolrDispatchFilter;
-import org.junit.After;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.RuleChain;
import org.junit.rules.TestRule;
-import java.io.File;
-import java.nio.charset.StandardCharsets;
-import java.util.Properties;
-
public class SolrXmlInZkTest extends SolrTestCaseJ4 {
@Rule
@@ -51,11 +50,11 @@ public class SolrXmlInZkTest extends Sol
private NodeConfig cfg;
private void setUpZkAndDiskXml(boolean toZk, boolean leaveOnLocal) throws Exception {
- File tmpDir = createTempDir().toFile();
- File solrHome = new File(tmpDir, "home");
- copyMinConf(new File(solrHome, "myCollect"));
+ Path tmpDir = createTempDir();
+ Path solrHome = tmpDir.resolve("home");
+ copyMinConf(new File(solrHome.toFile(), "myCollect"));
if (leaveOnLocal) {
- FileUtils.copyFile(new File(SolrTestCaseJ4.TEST_HOME(), "solr-stress-new.xml"), new File(solrHome, "solr.xml"));
+ FileUtils.copyFile(new File(SolrTestCaseJ4.TEST_HOME(), "solr-stress-new.xml"), new File(solrHome.toFile(), "solr.xml"));
}
ignoreException("No UpdateLog found - cannot sync");
@@ -63,8 +62,7 @@ public class SolrXmlInZkTest extends Sol
System.setProperty("zkClientTimeout", "8000");
- zkDir = tmpDir.getAbsolutePath() + File.separator
- + "zookeeper" + System.nanoTime() + "/server1/data";
+ zkDir = tmpDir.resolve("zookeeper" + System.nanoTime()).resolve("server1").resolve("data").toString();
zkServer = new ZkTestServer(zkDir);
zkServer.run();
System.setProperty("zkHost", zkServer.getZkAddress());
@@ -86,7 +84,7 @@ public class SolrXmlInZkTest extends Sol
props.setProperty("solr.test.sys.prop1", "propone");
props.setProperty("solr.test.sys.prop2", "proptwo");
- cfg = SolrDispatchFilter.loadNodeConfig(solrHome.getAbsolutePath(), props);
+ cfg = SolrDispatchFilter.loadNodeConfig(solrHome, props);
log.info("####SETUP_END " + getTestName());
}
Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionZkExpiry.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionZkExpiry.java?rev=1715344&r1=1715343&r2=1715344&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionZkExpiry.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/TestLeaderElectionZkExpiry.java Fri Nov 20 12:42:42 2015
@@ -17,6 +17,11 @@ package org.apache.solr.cloud;
* limitations under the License.
*/
+import java.nio.file.Path;
+import java.util.Collections;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.core.CloudConfig;
@@ -25,10 +30,6 @@ import org.apache.solr.core.CoreDescript
import org.apache.zookeeper.KeeperException;
import org.junit.Test;
-import java.util.Collections;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
public class TestLeaderElectionZkExpiry extends SolrTestCaseJ4 {
public static final String SOLRXML = "<solr></solr>";
private static final int MAX_NODES = 16;
@@ -37,7 +38,7 @@ public class TestLeaderElectionZkExpiry
@Test
public void testLeaderElectionWithZkExpiry() throws Exception {
String zkDir = createTempDir("zkData").toFile().getAbsolutePath();
- String ccDir = createTempDir("testLeaderElectionWithZkExpiry-solr").toFile().getAbsolutePath();
+ Path ccDir = createTempDir("testLeaderElectionWithZkExpiry-solr");
CoreContainer cc = createCoreContainer(ccDir, SOLRXML);
final ZkTestServer server = new ZkTestServer(zkDir);
server.setTheTickTime(1000);