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 2013/07/06 21:27:47 UTC
svn commit: r1500315 [1/2] - in /lucene/dev/branches/branch_4x/solr: ./
contrib/
contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/
core/ core/src/java/org/apache/solr/cloud/
core/src/java/org/apache/solr/core/ core/src/java/org/apa...
Author: romseygeek
Date: Sat Jul 6 19:27:46 2013
New Revision: 1500315
URL: http://svn.apache.org/r1500315
Log:
SOLR-4948, SOLR-5009: Tidy up CoreContainer construction logic
Modified:
lucene/dev/branches/branch_4x/solr/ (props changed)
lucene/dev/branches/branch_4x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_4x/solr/contrib/ (props changed)
lucene/dev/branches/branch_4x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestZKPropertiesWriter.java
lucene/dev/branches/branch_4x/solr/core/ (props changed)
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ZkCLI.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ZkController.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/Config.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ConfigSolr.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ConfigSolrXml.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ConfigSolrXmlOld.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrCores.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrXMLSerializer.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/LogWatcher.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/FieldType.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/ClusterStateUpdateTest.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/SliceStateUpdateTest.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/TestMultiCoreConfBootstrap.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/TestZkChroot.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/AbstractBadConfigTestBase.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/CoreContainerCoreInitFailuresTest.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/SolrCoreCheckLockOnStartupTest.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestLazyCores.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestShardHandlerFactory.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestSolrXml.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestSolrXmlPersistence.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/handler/admin/LoggingHandlerTest.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/handler/admin/LukeRequestHandlerTest.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/handler/component/BadComponentTest.java
lucene/dev/branches/branch_4x/solr/solrj/ (props changed)
lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/MergeIndexesExampleTestBase.java
lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/MultiCoreExampleTestBase.java
lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/AbstractEmbeddedSolrServerTestCase.java
lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/MergeIndexesEmbeddedTest.java
lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/MultiCoreEmbeddedTest.java
lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/embedded/TestSolrProperties.java
lucene/dev/branches/branch_4x/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestCoreAdmin.java
lucene/dev/branches/branch_4x/solr/test-framework/ (props changed)
lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/SolrTestCaseJ4.java
lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/BaseTestHarness.java
lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/RestTestBase.java
lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/TestHarness.java
Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Sat Jul 6 19:27:46 2013
@@ -224,6 +224,10 @@ Bug Fixes
* SOLR-5000: ManagedIndexSchema doesn't persist uniqueKey tag after calling addFields
method. (Jun Ohtani, Steve Rowe)
+* SOLR-5002: Don't create multiple SolrResourceLoaders for same Solr home, wasting
+ resources and slowing down startup. This fixes the problem where the loader was
+ not correctly closed, making tests fail on Windows. (Steve Rowe, Uwe Schindler)
+
Optimizations
----------------------
@@ -288,6 +292,9 @@ Other Changes
* SOLR-4986: Upgrade to Tika 1.4 (Markus Jelsma via janhoy)
+* SOLR-4948, SOLR-5009: Tidied up CoreContainer construction logic.
+ (Alan Woodward, Uwe Schindler, Steve Rowe)
+
================== 4.3.1 ==================
Versions of Major Components
Modified: lucene/dev/branches/branch_4x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestZKPropertiesWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestZKPropertiesWriter.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestZKPropertiesWriter.java (original)
+++ lucene/dev/branches/branch_4x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestZKPropertiesWriter.java Sat Jul 6 19:27:46 2013
@@ -60,7 +60,8 @@ public class TestZKPropertiesWriter exte
AbstractZkTestCase.buildZooKeeper(zkServer.getZkHost(), zkServer.getZkAddress(), getFile("dih/solr"),
"dataimport-solrconfig.xml", "dataimport-schema.xml");
- initCore("dataimport-solrconfig.xml", "dataimport-schema.xml", getFile("dih/solr").getAbsolutePath());
+ //initCore("solrconfig.xml", "schema.xml", getFile("dih/solr").getAbsolutePath());
+ createDefaultCoreContainer(getFile("dih/solr").getAbsolutePath());
}
@Before
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ZkCLI.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ZkCLI.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ZkCLI.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ZkCLI.java Sat Jul 6 19:27:46 2013
@@ -1,14 +1,5 @@
package org.apache.solr.cloud;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-import java.util.concurrent.TimeoutException;
-
-import javax.xml.parsers.ParserConfigurationException;
-
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.HelpFormatter;
@@ -17,13 +8,9 @@ import org.apache.commons.cli.OptionBuil
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.apache.commons.cli.PosixParser;
-import org.apache.commons.io.IOUtils;
import org.apache.solr.common.cloud.OnReconnect;
import org.apache.solr.common.cloud.SolrZkClient;
-import org.apache.solr.core.Config;
import org.apache.solr.core.ConfigSolr;
-import org.apache.solr.core.ConfigSolrXml;
-import org.apache.solr.core.ConfigSolrXmlOld;
import org.apache.solr.core.SolrResourceLoader;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
@@ -32,6 +19,12 @@ import org.apache.zookeeper.data.ACL;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+import java.util.concurrent.TimeoutException;
+
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -183,25 +176,7 @@ public class ZkCLI {
SolrResourceLoader loader = new SolrResourceLoader(solrHome);
solrHome = loader.getInstanceDir();
- File configFile = new File(solrHome, SOLR_XML);
- InputStream is = new FileInputStream(configFile);
-
- ConfigSolr cfg;
-
- try {
- Config config = new Config(loader, null, new InputSource(is), null, false);
-
- boolean oldStyle = (config.getNode("solr/cores", false) != null);
-
- if (oldStyle) {
- cfg = new ConfigSolrXmlOld(config, null);
- } else {
- cfg = new ConfigSolrXml(config, null);
- }
- } finally {
- IOUtils.closeQuietly(is);
- }
-
+ ConfigSolr cfg = ConfigSolr.fromSolrHome(loader, solrHome);
if(!ZkController.checkChrootPath(zkServerAddress, true)) {
System.out.println("A chroot was specified in zkHost but the znode doesn't exist. ");
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ZkController.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ZkController.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ZkController.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/cloud/ZkController.java Sat Jul 6 19:27:46 2013
@@ -17,28 +17,6 @@ package org.apache.solr.cloud;
* limitations under the License.
*/
-import java.io.File;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.InetAddress;
-import java.net.NetworkInterface;
-import java.net.URLEncoder;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.concurrent.Future;
-import java.util.concurrent.TimeoutException;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
import org.apache.commons.io.FileUtils;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.request.CoreAdminRequest.WaitForState;
@@ -74,6 +52,28 @@ import org.apache.zookeeper.data.Stat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.File;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.URLEncoder;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeoutException;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
/**
* Handle ZooKeeper interactions.
*
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/Config.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/Config.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/Config.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/Config.java Sat Jul 6 19:27:46 2013
@@ -68,6 +68,7 @@ public class Config {
static final XPathFactory xpathFactory = XPathFactory.newInstance();
private final Document doc;
+ private final Document origDoc; // with unsubstituted properties
private final String prefix;
private final String name;
private final SolrResourceLoader loader;
@@ -131,6 +132,7 @@ public class Config {
db.setErrorHandler(xmllog);
try {
doc = db.parse(is);
+ origDoc = copyDoc(doc);
} finally {
// some XML parsers are broken and don't close the byte stream (but they should according to spec)
IOUtils.closeQuietly(is.getByteStream());
@@ -140,19 +142,24 @@ public class Config {
}
} catch (ParserConfigurationException e) {
SolrException.log(log, "Exception during parsing file: " + name, e);
- throw e;
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
} catch (SAXException e) {
SolrException.log(log, "Exception during parsing file: " + name, e);
- throw e;
- } catch( SolrException e ){
- SolrException.log(log,"Error in "+name,e);
- throw e;
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
+ } catch (TransformerException e) {
+ SolrException.log(log, "Exception during parsing file: " + name, e);
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
}
}
public Config(SolrResourceLoader loader, String name, Document doc) {
this.prefix = null;
this.doc = doc;
+ try {
+ this.origDoc = copyDoc(doc);
+ } catch (TransformerException e) {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
+ }
this.name = name;
this.loader = loader;
}
@@ -441,4 +448,9 @@ public class Config {
return version;
}
+
+ public Config getOriginalConfig() {
+ return new Config(loader, null, origDoc);
+ }
+
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ConfigSolr.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ConfigSolr.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ConfigSolr.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ConfigSolr.java Sat Jul 6 19:27:46 2013
@@ -17,15 +17,8 @@ package org.apache.solr.core;
* limitations under the License.
*/
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpressionException;
-
+import com.google.common.base.Charsets;
+import org.apache.commons.io.IOUtils;
import org.apache.solr.common.SolrException;
import org.apache.solr.util.DOMUtil;
import org.apache.solr.util.PropertiesUtil;
@@ -33,13 +26,75 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+
+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.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
public abstract class ConfigSolr {
protected static Logger log = LoggerFactory.getLogger(ConfigSolr.class);
public final static String SOLR_XML_FILE = "solr.xml";
-
+
+ public static ConfigSolr fromFile(SolrResourceLoader loader, File configFile) {
+ log.info("Loading container configuration from {}", configFile.getAbsolutePath());
+
+ InputStream inputStream = null;
+
+ try {
+ if (!configFile.exists()) {
+ log.info("{} does not exist, using default configuration", configFile.getAbsolutePath());
+ inputStream = new ByteArrayInputStream(ConfigSolrXmlOld.DEF_SOLR_XML.getBytes(Charsets.UTF_8));
+ }
+ else {
+ inputStream = new FileInputStream(configFile);
+ }
+ return fromInputStream(loader, inputStream);
+ }
+ catch (Exception e) {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
+ "Could not load SOLR configuration", e);
+ }
+ finally {
+ IOUtils.closeQuietly(inputStream);
+ }
+ }
+
+ public static ConfigSolr fromString(SolrResourceLoader loader, String xml) {
+ return fromInputStream(loader, new ByteArrayInputStream(xml.getBytes(Charsets.UTF_8)));
+ }
+
+ public static ConfigSolr fromInputStream(SolrResourceLoader loader, InputStream is) {
+ try {
+ Config config = new Config(loader, null, new InputSource(is), null, false);
+ //config.substituteProperties();
+ return fromConfig(config);
+ }
+ catch (Exception e) {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
+ }
+ }
+
+ public static ConfigSolr fromSolrHome(SolrResourceLoader loader, String solrHome) {
+ return fromFile(loader, new File(solrHome, SOLR_XML_FILE));
+ }
+
+ public static ConfigSolr fromConfig(Config config) {
+ boolean oldStyle = (config.getNode("solr/cores", false) != null);
+ return oldStyle ? new ConfigSolrXmlOld(config)
+ : new ConfigSolrXml(config, null);
+ }
+
// Ugly for now, but we'll at least be able to centralize all of the differences between 4x and 5x.
public static enum CfgProp {
SOLR_ADMINHANDLER,
@@ -79,6 +134,11 @@ public abstract class ConfigSolr {
public ConfigSolr(Config config) {
this.config = config;
}
+
+ // for extension & testing.
+ protected ConfigSolr() {
+
+ }
public Config getConfig() {
return config;
@@ -125,7 +185,8 @@ public abstract class ConfigSolr {
Properties properties = new Properties();
for (int i = 0; i < props.getLength(); i++) {
Node prop = props.item(i);
- properties.setProperty(DOMUtil.getAttr(prop, "name"), DOMUtil.getAttr(prop, "value"));
+ properties.setProperty(DOMUtil.getAttr(prop, "name"),
+ PropertiesUtil.substituteProperty(DOMUtil.getAttr(prop, "value"), null));
}
return properties;
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ConfigSolrXml.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ConfigSolrXml.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ConfigSolrXml.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ConfigSolrXml.java Sat Jul 6 19:27:46 2013
@@ -17,6 +17,12 @@ package org.apache.solr.core;
* limitations under the License.
*/
+import org.apache.commons.io.IOUtils;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.util.PropertiesUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -27,15 +33,6 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.util.PropertiesUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.xml.sax.SAXException;
-
/**
*
@@ -46,15 +43,18 @@ public class ConfigSolrXml extends Confi
private SolrCoreDiscoverer solrCoreDiscoverer = new SolrCoreDiscoverer();
private final Map<String, CoreDescriptor> coreDescriptorMap;
- public ConfigSolrXml(Config config, CoreContainer container)
- throws ParserConfigurationException, IOException, SAXException {
+ public ConfigSolrXml(Config config, CoreContainer container) {
super(config);
- checkForIllegalConfig();
-
- fillPropMap();
-
- String coreRoot = get(CfgProp.SOLR_COREROOTDIRECTORY, (container == null ? config.getResourceLoader().getInstanceDir() : container.getSolrHome()));
- coreDescriptorMap = solrCoreDiscoverer.discover(container, new File(coreRoot));
+ try {
+ checkForIllegalConfig();
+ fillPropMap();
+ config.substituteProperties();
+ String coreRoot = get(CfgProp.SOLR_COREROOTDIRECTORY, (container == null ? config.getResourceLoader().getInstanceDir() : container.getSolrHome()));
+ coreDescriptorMap = solrCoreDiscoverer.discover(container, new File(coreRoot));
+ }
+ catch (IOException e) {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
+ }
}
private void checkForIllegalConfig() throws IOException {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ConfigSolrXmlOld.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ConfigSolrXmlOld.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ConfigSolrXmlOld.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/ConfigSolrXmlOld.java Sat Jul 6 19:27:46 2013
@@ -17,6 +17,17 @@ package org.apache.solr.core;
* limitations under the License.
*/
+import org.apache.solr.common.SolrException;
+import org.apache.solr.util.DOMUtil;
+import org.apache.solr.util.PropertiesUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@@ -28,20 +39,6 @@ import java.util.Map;
import java.util.Properties;
import java.util.Set;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpressionException;
-
-import org.apache.solr.common.SolrException;
-import org.apache.solr.util.DOMUtil;
-import org.apache.solr.util.PropertiesUtil;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
/**
*
@@ -51,17 +48,20 @@ public class ConfigSolrXmlOld extends Co
private NodeList coreNodes = null;
- public ConfigSolrXmlOld(Config config, CoreContainer container)
- throws ParserConfigurationException, IOException, SAXException {
-
+ public ConfigSolrXmlOld(Config config) {
super(config);
- checkForIllegalConfig(container);
-
- fillPropMap();
- initCoreList(container);
+ try {
+ checkForIllegalConfig();
+ fillPropMap();
+ config.substituteProperties();
+ initCoreList();
+ }
+ catch (IOException e) {
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
+ }
}
- private void checkForIllegalConfig(CoreContainer container) throws IOException {
+ private void checkForIllegalConfig() throws IOException {
// Do sanity checks - we don't want to find new style
// config
failIfFound("solr/str[@name='adminHandler']");
@@ -157,7 +157,7 @@ public class ConfigSolrXmlOld extends Co
}
- private void initCoreList(CoreContainer container) throws IOException {
+ private void initCoreList() throws IOException {
coreNodes = (NodeList) config.evaluate("solr/cores/core",
XPathConstants.NODESET);
@@ -222,7 +222,7 @@ public class ConfigSolrXmlOld extends Co
NamedNodeMap attributes = node.getAttributes();
for (int i = 0; i < attributes.getLength(); i++) {
Node attribute = attributes.item(i);
- String val = attribute.getNodeValue();
+ String val = PropertiesUtil.substituteProperty(attribute.getNodeValue(), null);
if (CoreDescriptor.CORE_DATADIR.equals(attribute.getNodeName()) ||
CoreDescriptor.CORE_INSTDIR.equals(attribute.getNodeName())) {
if (val.indexOf('$') == -1) {
@@ -260,7 +260,8 @@ public class ConfigSolrXmlOld extends Co
Node node = coreNodes.item(idx);
if (coreName.equals(DOMUtil.getAttr(node, CoreDescriptor.CORE_NAME,
null))) {
- return DOMUtil.getAttr(node, property, defaultVal);
+ String propVal = DOMUtil.getAttr(node, property, defaultVal);
+ return PropertiesUtil.substituteProperty(propVal, null);
}
}
}
@@ -289,16 +290,16 @@ public class ConfigSolrXmlOld extends Co
}
public static final String DEF_SOLR_XML = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
- + "<solr persistent=\"false\">\n"
- + " <cores adminPath=\"/admin/cores\" defaultCoreName=\""
- + CoreContainer.DEFAULT_DEFAULT_CORE_NAME
- + "\""
- + " host=\"${host:}\" hostPort=\"${hostPort:}\" hostContext=\"${hostContext:}\" zkClientTimeout=\"${zkClientTimeout:15000}\""
- + ">\n"
- + " <core name=\""
- + CoreContainer.DEFAULT_DEFAULT_CORE_NAME
- + "\" shard=\"${shard:}\" collection=\"${collection:}\" instanceDir=\"collection1\" />\n"
- + " </cores>\n" + "</solr>";
+ + "<solr persistent=\"false\">\n"
+ + " <cores adminPath=\"/admin/cores\" defaultCoreName=\""
+ + CoreContainer.DEFAULT_DEFAULT_CORE_NAME
+ + "\""
+ + " host=\"${host:}\" hostPort=\"${hostPort:}\" hostContext=\"${hostContext:}\" zkClientTimeout=\"${zkClientTimeout:15000}\""
+ + ">\n"
+ + " <core name=\""
+ + CoreContainer.DEFAULT_DEFAULT_CORE_NAME
+ + "\" shard=\"${shard:}\" collection=\"${collection:}\" instanceDir=\"collection1\" />\n"
+ + " </cores>\n" + "</solr>";
@Override
public void substituteProperties() {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/CoreContainer.java Sat Jul 6 19:27:46 2013
@@ -17,7 +17,6 @@
package org.apache.solr.core;
-import org.apache.commons.io.IOUtils;
import org.apache.solr.cloud.ZkController;
import org.apache.solr.cloud.ZkSolrResourceLoader;
import org.apache.solr.common.SolrException;
@@ -39,21 +38,10 @@ import org.apache.solr.util.plugin.Plugi
import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
import org.w3c.dom.Node;
-import org.xml.sax.InputSource;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMResult;
-import javax.xml.transform.dom.DOMSource;
import javax.xml.xpath.XPathExpressionException;
-import java.io.ByteArrayInputStream;
import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Collections;
@@ -76,6 +64,8 @@ import java.util.concurrent.LinkedBlocki
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
+import static com.google.common.base.Preconditions.checkNotNull;
+
/**
*
@@ -104,15 +94,13 @@ public class CoreContainer
protected CoreAdminHandler coreAdminHandler = null;
protected CollectionsHandler collectionsHandler = null;
- protected File configFile = null;
protected String libDir = null;
- protected SolrResourceLoader loader = null;
+
protected Properties containerProperties;
protected Map<String ,IndexSchema> indexSchemaCache;
protected String adminHandler;
protected boolean shareSchema;
protected Integer zkClientTimeout;
- protected String solrHome;
protected String defaultCoreName = null;
protected int distribUpdateConnTimeout = 0;
protected int distribUpdateSoTimeout = 0;
@@ -126,151 +114,91 @@ public class CoreContainer
private int coreLoadThreads;
private CloserThread backgroundCloser = null;
- protected volatile ConfigSolr cfg;
- private Config origCfg;
+
+ protected final ConfigSolr cfg;
+ protected final SolrResourceLoader loader;
+ protected final String solrHome;
{
log.info("New CoreContainer " + System.identityHashCode(this));
}
/**
- * Deprecated
- * @deprecated use the single arg constructor with locateSolrHome()
- * @see SolrResourceLoader#locateSolrHome
+ * Create a new CoreContainer using system properties to detect the solr home
+ * directory. The container's cores are not loaded.
+ * @see #load()
*/
- @Deprecated
public CoreContainer() {
- this(SolrResourceLoader.locateSolrHome());
+ this(new SolrResourceLoader(SolrResourceLoader.locateSolrHome()));
}
/**
- * Initalize CoreContainer directly from the constructor
+ * Create a new CoreContainer using the given SolrResourceLoader. The container's
+ * cores are not loaded.
+ * @param loader the SolrResourceLoader
+ * @see #load()
*/
- public CoreContainer(String dir, File configFile) throws FileNotFoundException {
- this(dir);
- this.load(dir, configFile);
+ public CoreContainer(SolrResourceLoader loader) {
+ this(loader, ConfigSolr.fromSolrHome(loader, loader.getInstanceDir()));
}
/**
- * Minimal CoreContainer constructor.
- * @param loader the CoreContainer resource loader
+ * Create a new CoreContainer using the given solr home directory. The container's
+ * cores are not loaded.
+ * @param solrHome a String containing the path to the solr home directory
+ * @see #load()
*/
- public CoreContainer(SolrResourceLoader loader) {
- this(loader.getInstanceDir());
- this.loader = loader;
+ public CoreContainer(String solrHome) {
+ this(new SolrResourceLoader(solrHome));
}
- public CoreContainer(String solrHome) {
- this.solrHome = solrHome;
+ /**
+ * Create a new CoreContainer using the given SolrResourceLoader and
+ * configuration. The container's cores are not loaded.
+ * @param loader the SolrResourceLoader
+ * @param config a ConfigSolr representation of this container's configuration
+ * @see #load()
+ */
+ public CoreContainer(SolrResourceLoader loader, ConfigSolr config) {
+ this.loader = checkNotNull(loader);
+ this.solrHome = loader.getInstanceDir();
+ this.cfg = checkNotNull(config);
+ }
+
+ /**
+ * Create a new CoreContainer and load its cores
+ * @param solrHome the solr home directory
+ * @param configFile the file containing this container's configuration
+ * @return a loaded CoreContainer
+ */
+ public static CoreContainer createAndLoad(String solrHome, File configFile) {
+ SolrResourceLoader loader = new SolrResourceLoader(solrHome);
+ CoreContainer cc = new CoreContainer(loader, ConfigSolr.fromFile(loader, configFile));
+ cc.load();
+ return cc;
}
public Properties getContainerProperties() {
return containerProperties;
}
- // Helper class to initialize the CoreContainer
- public static class Initializer {
-
- // core container instantiation
- public CoreContainer initialize() throws FileNotFoundException {
- CoreContainer cores = null;
- String solrHome = SolrResourceLoader.locateSolrHome();
- // ContainerConfigFilename could could be a properties file
- File fconf = new File(solrHome, "solr.xml");
-
- log.info("looking for solr config file: " + fconf.getAbsolutePath());
- cores = new CoreContainer(solrHome);
-
- // first we find zkhost, then we check for solr.xml in zk
- // 1. look for zkhost from sys prop 2. TODO: look for zkhost in {solr.home}/solr.properties
-
- // Either we have a config file or not.
-
- if (fconf.exists()) {
- cores.load(solrHome, fconf);
- } else {
- // Back compart support
- log.info("no solr.xml found. using default old-style solr.xml");
- try {
- cores.load(solrHome, new ByteArrayInputStream(ConfigSolrXmlOld.DEF_SOLR_XML.getBytes("UTF-8")), null);
- } catch (Exception e) {
- throw new SolrException(ErrorCode.SERVER_ERROR,
- "CoreContainer.Initialize failed when trying to load default solr.xml file", e);
- }
- cores.configFile = fconf;
- }
-
- return cores;
- }
- }
-
-
//-------------------------------------------------------------------
// Initialization / Cleanup
//-------------------------------------------------------------------
-
- /**
- * Load a config file listing the available solr cores.
- * @param dir the home directory of all resources.
- * @param configFile the configuration file
- */
- public void load(String dir, File configFile) throws FileNotFoundException {
- this.configFile = configFile;
- InputStream in = new FileInputStream(configFile);
- try {
- this.load(dir, in, configFile.getName());
- } finally {
- IOUtils.closeQuietly(in);
- }
- }
/**
- * Load a config file listing the available solr cores.
- *
- * @param dir the home directory of all resources.
- * @param is the configuration file InputStream. May be a properties file or an xml file
+ * Load the cores defined for this CoreContainer
*/
+ public void load() {
- // Let's keep this ugly boolean out of public circulation.
- protected void load(String dir, InputStream is, String fileName) {
- ThreadPoolExecutor coreLoadExecutor = null;
- if (null == dir) {
- // don't rely on SolrResourceLoader(), determine explicitly first
- dir = SolrResourceLoader.locateSolrHome();
- }
- log.info("Loading CoreContainer using Solr Home: '{}'", dir);
-
- this.loader = new SolrResourceLoader(dir);
- solrHome = loader.getInstanceDir();
+ log.info("Loading cores into CoreContainer [instanceDir={}]", loader.getInstanceDir());
- try {
- Config config = new Config(loader, null, new InputSource(is), null, false);
-
- // old style defines cores in solr.xml, new style disovers them by
- // directory structure
- boolean oldStyle = (config.getNode("solr/cores", false) != null);
-
- if (oldStyle) {
- // ConfigSolr handles keep orig values around for non solrcore level items,
- // but this is still how original core lvl attributes are kept around
- this.origCfg = new Config(loader, null, copyDoc(config.getDocument()));
-
- this.cfg = new ConfigSolrXmlOld(config, this);
- } else {
- this.cfg = new ConfigSolrXml(config, this);
-
- }
- } catch (Exception e) {
- throw new SolrException(ErrorCode.SERVER_ERROR, "", e);
- }
- // Since the cores var is now initialized to null, let's set it up right
- // now.
- cfg.substituteProperties();
+ ThreadPoolExecutor coreLoadExecutor = null;
// add the sharedLib to the shared resource loader before initializing cfg based plugins
libDir = cfg.get(ConfigSolr.CfgProp.SOLR_SHAREDLIB , null);
if (libDir != null) {
- File f = FileUtils.resolvePath(new File(dir), libDir);
+ File f = FileUtils.resolvePath(new File(solrHome), libDir);
log.info("loading shared library: " + f.getAbsolutePath());
loader.addToClassLoader(libDir, null, false);
loader.reloadLuceneSPI();
@@ -1077,7 +1005,7 @@ public class CoreContainer
}
public File getConfigFile() {
- return configFile;
+ return new File(solrHome, ConfigSolr.SOLR_XML_FILE);
}
/**
@@ -1091,7 +1019,7 @@ public class CoreContainer
/** Persists the cores config file in cores.xml. */
@Deprecated
public void persist() {
- persistFile(configFile);
+ persistFile(getConfigFile());
}
/**
@@ -1112,7 +1040,7 @@ public class CoreContainer
// only the old solrxml persists
if (cfg != null && !(cfg instanceof ConfigSolrXmlOld)) return;
- log.info("Persisting cores config to " + (file == null ? configFile : file));
+ log.info("Persisting cores config to " + (file == null ? getConfigFile() : file));
// <solr attrib="value">
Map<String,String> rootSolrAttribs = new HashMap<String,String>();
@@ -1187,7 +1115,7 @@ public class CoreContainer
cfg.get(ConfigSolr.CfgProp.SOLR_SHARDHANDLERFACTORY_SOCKETTIMEOUT, null));
try {
- solrCores.persistCores(origCfg, containerProperties, rootSolrAttribs,coresAttribs,
+ solrCores.persistCores(cfg.config.getOriginalConfig(), containerProperties, rootSolrAttribs,coresAttribs,
loggingAttribs, watcherAttribs, shardHandlerAttrib, shardHandlerProps, file, loader);
} catch (XPathExpressionException e) {
throw new SolrException(ErrorCode.SERVER_ERROR, null, e);
@@ -1263,14 +1191,7 @@ public class CoreContainer
return solrCores.getCoreToOrigName(core);
}
- private Document copyDoc(Document document) throws TransformerException {
- TransformerFactory tfactory = TransformerFactory.newInstance();
- Transformer tx = tfactory.newTransformer();
- DOMSource source = new DOMSource(document);
- DOMResult result = new DOMResult();
- tx.transform(source,result);
- return (Document)result.getNode();
- }
+
}
class CloserThread extends Thread {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrCores.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrCores.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrCores.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrCores.java Sat Jul 6 19:27:46 2013
@@ -17,6 +17,15 @@ package org.apache.solr.core;
* limitations under the License.
*/
+import org.apache.commons.lang.StringUtils;
+import org.apache.solr.cloud.CloudDescriptor;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.params.CoreAdminParams;
+import org.apache.solr.core.SolrXMLSerializer.SolrCoreXMLDef;
+import org.apache.solr.util.DOMUtil;
+import org.w3c.dom.Node;
+
+import javax.xml.xpath.XPathExpressionException;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
@@ -31,16 +40,6 @@ import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
-import javax.xml.xpath.XPathExpressionException;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.solr.cloud.CloudDescriptor;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.params.CoreAdminParams;
-import org.apache.solr.core.SolrXMLSerializer.SolrCoreXMLDef;
-import org.apache.solr.util.DOMUtil;
-import org.w3c.dom.Node;
-
class SolrCores {
private static SolrXMLSerializer SOLR_XML_SERIALIZER = new SolrXMLSerializer();
@@ -498,7 +497,7 @@ class SolrCores {
// Insure instdir is persisted if it's the default since it's checked at startup even if not specified on the
// create command.
if (! dcore.getCreatedProperties().containsKey(CoreDescriptor.CORE_INSTDIR)) {
- coreAttribs.put(CoreDescriptor.CORE_INSTDIR, dcore.getProperty(CoreDescriptor.CORE_INSTDIR));
+ coreAttribs.put(CoreDescriptor.CORE_INSTDIR, dcore.getRawInstanceDir());
}
} else {
@@ -519,7 +518,7 @@ class SolrCores {
}
coreAttribs.put(CoreDescriptor.CORE_NAME, coreName);
-
+ //coreAttribs.put(CoreDescriptor.CORE_INSTDIR, dcore.getRawInstanceDir());
addCoreProperty(coreAttribs, loader, node, CoreDescriptor.CORE_INSTDIR, dcore.getRawInstanceDir(), null);
addCoreProperty(coreAttribs, loader, node, CoreDescriptor.CORE_COLLECTION,
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java Sat Jul 6 19:27:46 2013
@@ -17,55 +17,57 @@
package org.apache.solr.core;
-import java.io.Closeable;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.*;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
import org.apache.lucene.analysis.util.CharFilterFactory;
import org.apache.lucene.analysis.util.ResourceLoaderAware;
import org.apache.lucene.analysis.util.TokenFilterFactory;
import org.apache.lucene.analysis.util.TokenizerFactory;
+import org.apache.lucene.analysis.util.WordlistLoader;
import org.apache.lucene.codecs.Codec;
-import org.apache.lucene.codecs.PostingsFormat;
import org.apache.lucene.codecs.DocValuesFormat;
+import org.apache.lucene.codecs.PostingsFormat;
import org.apache.lucene.util.IOUtils;
-import org.apache.lucene.analysis.util.WordlistLoader;
import org.apache.solr.common.ResourceLoader;
+import org.apache.solr.common.SolrException;
import org.apache.solr.handler.admin.CoreAdminHandler;
+import org.apache.solr.handler.component.SearchComponent;
import org.apache.solr.handler.component.ShardHandlerFactory;
+import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.response.QueryResponseWriter;
+import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.ManagedIndexSchemaFactory;
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;
-import java.nio.charset.CharacterCodingException;
-import java.nio.charset.Charset;
-import java.lang.reflect.Constructor;
-
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.NoInitialContextException;
-
-import org.apache.solr.util.FileUtils;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.handler.component.SearchComponent;
-import org.apache.solr.request.SolrRequestHandler;
-import org.apache.solr.response.QueryResponseWriter;
-import org.apache.solr.schema.FieldType;
-import org.apache.solr.update.processor.UpdateRequestProcessorFactory;
-import org.apache.solr.util.plugin.SolrCoreAware;
-import org.apache.solr.search.QParserPlugin;
+import java.io.Closeable;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Constructor;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.charset.CharacterCodingException;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* @since solr 1.3
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrXMLSerializer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrXMLSerializer.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrXMLSerializer.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrXMLSerializer.java Sat Jul 6 19:27:46 2013
@@ -17,6 +17,11 @@ package org.apache.solr.core;
* limitations under the License.
*/
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.util.XML;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
@@ -30,11 +35,6 @@ import java.util.Map;
import java.util.Properties;
import java.util.Set;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.util.XML;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
public class SolrXMLSerializer {
protected static Logger log = LoggerFactory
.getLogger(SolrXMLSerializer.class);
@@ -151,7 +151,7 @@ public class SolrXMLSerializer {
}
void persistFile(File file, SolrXMLDef solrXMLDef) {
- log.info("Persisting cores config to " + file);
+ log.info("Persisting cores config to " + file.getAbsolutePath());
File tmpFile = null;
try {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java Sat Jul 6 19:27:46 2013
@@ -17,19 +17,6 @@
package org.apache.solr.handler.admin;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.Future;
-
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.lucene.index.DirectoryReader;
@@ -57,8 +44,8 @@ import org.apache.solr.core.CloseHook;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.CoreDescriptor;
import org.apache.solr.core.DirectoryFactory;
-import org.apache.solr.core.SolrCore;
import org.apache.solr.core.DirectoryFactory.DirContext;
+import org.apache.solr.core.SolrCore;
import org.apache.solr.handler.RequestHandlerBase;
import org.apache.solr.request.LocalSolrQueryRequest;
import org.apache.solr.request.SolrQueryRequest;
@@ -75,6 +62,19 @@ import org.apache.zookeeper.KeeperExcept
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.Future;
+
/**
*
* @since solr 1.3
@@ -732,7 +732,9 @@ public class CoreAdminHandler extends Re
boolean doPersist = false;
String fileName = params.get(CoreAdminParams.FILE);
if (fileName != null) {
- File file = new File(coreContainer.getConfigFile().getParentFile(), fileName);
+ File file = new File(fileName);
+ if (!file.isAbsolute())
+ file = new File(coreContainer.getConfigFile().getParentFile(), fileName);
coreContainer.persistFile(file);
rsp.add("saved", file.getAbsolutePath());
doPersist = false;
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/LogWatcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/LogWatcher.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/LogWatcher.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/logging/LogWatcher.java Sat Jul 6 19:27:46 2013
@@ -137,7 +137,7 @@ public abstract class LogWatcher<E> {
v.size = config.getInt(ConfigSolr.CfgProp.SOLR_LOGGING_WATCHER_SIZE, 50);
v.threshold = config.get(ConfigSolr.CfgProp.SOLR_LOGGING_WATCHER_THRESHOLD, null);
if (v.size > 0) {
- log.info("Registering Log Listener");
+ log.info("Registering Log Listener [{}]", logWatcher.getName());
logWatcher.registerListener(v);
}
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/FieldType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/FieldType.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/FieldType.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/schema/FieldType.java Sat Jul 6 19:27:46 2013
@@ -17,18 +17,6 @@
package org.apache.solr.schema;
-import java.io.IOException;
-import java.io.Reader;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import static org.apache.lucene.analysis.util.AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM;
-
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
@@ -67,6 +55,18 @@ import org.apache.solr.search.Sorting;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.IOException;
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static org.apache.lucene.analysis.util.AbstractAnalysisFactory.LUCENE_MATCH_VERSION_PARAM;
+
/**
* Base class for all field types used by an index schema.
*
@@ -799,6 +799,15 @@ public abstract class FieldType extends
namedPropertyValues.add(getPropertyName(TOKENIZED), isTokenized());
// The BINARY property is always false
// namedPropertyValues.add(getPropertyName(BINARY), hasProperty(BINARY));
+ if (null != getSimilarityFactory()) {
+ namedPropertyValues.add(SIMILARITY, getSimilarityFactory().getNamedPropertyValues());
+ }
+ if (null != getPostingsFormat()) {
+ namedPropertyValues.add(POSTINGS_FORMAT, getPostingsFormat());
+ }
+ if (null != getDocValuesFormat()) {
+ namedPropertyValues.add(DOC_VALUES_FORMAT, getDocValuesFormat());
+ }
} else { // Don't show defaults
Set<String> fieldProperties = new HashSet<String>();
for (String propertyName : FieldProperties.propertyNames) {
@@ -826,15 +835,7 @@ public abstract class FieldType extends
namedPropertyValues.add(MULTI_TERM_ANALYZER, getAnalyzerProperties(((TextField) this).getMultiTermAnalyzer()));
}
}
- if (null != getSimilarityFactory()) {
- namedPropertyValues.add(SIMILARITY, getSimilarityFactory().getNamedPropertyValues());
- }
- if (null != getPostingsFormat()) {
- namedPropertyValues.add(POSTINGS_FORMAT, getPostingsFormat());
- }
- if (null != getDocValuesFormat()) {
- namedPropertyValues.add(DOC_VALUES_FORMAT, getDocValuesFormat());
- }
+
return namedPropertyValues;
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java Sat Jul 6 19:27:46 2013
@@ -17,35 +17,6 @@
package org.apache.solr.servlet;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.WeakHashMap;
-
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
import org.apache.commons.io.IOUtils;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
@@ -81,6 +52,34 @@ import org.apache.solr.util.FastWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.WeakHashMap;
+
/**
* This filter looks at the incoming URL maps them to handlers defined in solrconfig.xml
*
@@ -116,12 +115,11 @@ public class SolrDispatchFilter implemen
{
log.info("SolrDispatchFilter.init()");
- CoreContainer.Initializer init = createInitializer();
try {
// web.xml configuration
this.pathPrefix = config.getInitParameter( "path-prefix" );
- this.cores = init.initialize();
+ this.cores = createCoreContainer();
log.info("user.dir=" + System.getProperty("user.dir"));
}
catch( Throwable t ) {
@@ -132,15 +130,20 @@ public class SolrDispatchFilter implemen
log.info("SolrDispatchFilter.init() done");
}
+
+ /**
+ * Override this to change CoreContainer initialization
+ * @return a CoreContainer to hold this server's cores
+ */
+ protected CoreContainer createCoreContainer() {
+ CoreContainer cores = new CoreContainer();
+ cores.load();
+ return cores;
+ }
public CoreContainer getCores() {
return cores;
}
-
- /** Method to override to change how CoreContainer initialization is performed. */
- protected CoreContainer.Initializer createInitializer() {
- return new CoreContainer.Initializer();
- }
@Override
public void destroy() {
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/ClusterStateUpdateTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/ClusterStateUpdateTest.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/ClusterStateUpdateTest.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/ClusterStateUpdateTest.java Sat Jul 6 19:27:46 2013
@@ -17,11 +17,6 @@ package org.apache.solr.cloud;
* limitations under the License.
*/
-import java.io.File;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.cloud.ClusterState;
@@ -31,7 +26,6 @@ import org.apache.solr.common.cloud.Solr
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.core.CoreContainer;
-import org.apache.solr.core.CoreContainer.Initializer;
import org.apache.solr.core.CoreDescriptor;
import org.apache.solr.core.SolrCore;
import org.apache.zookeeper.CreateMode;
@@ -41,6 +35,11 @@ import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
@Slow
public class ClusterStateUpdateTest extends SolrTestCaseJ4 {
protected static Logger log = LoggerFactory
@@ -65,8 +64,6 @@ public class ClusterStateUpdateTest exte
private File dataDir3;
private File dataDir4;
-
- private Initializer init2;
@BeforeClass
public static void beforeClass() {
@@ -113,22 +110,21 @@ public class ClusterStateUpdateTest exte
System.setProperty("solr.solr.home", TEST_HOME());
System.setProperty("hostPort", "1661");
- CoreContainer.Initializer init1 = new CoreContainer.Initializer();
System.setProperty("solr.data.dir", ClusterStateUpdateTest.this.dataDir1.getAbsolutePath());
- container1 = init1.initialize();
+ container1 = new CoreContainer();
+ container1.load();
System.clearProperty("hostPort");
System.setProperty("hostPort", "1662");
- init2 = new CoreContainer.Initializer();
System.setProperty("solr.data.dir", ClusterStateUpdateTest.this.dataDir2.getAbsolutePath());
- container2 = init2.initialize();
+ container2 = new CoreContainer();
+ container2.load();
System.clearProperty("hostPort");
System.setProperty("hostPort", "1663");
- CoreContainer.Initializer init3 = new CoreContainer.Initializer();
-
System.setProperty("solr.data.dir", ClusterStateUpdateTest.this.dataDir3.getAbsolutePath());
- container3 = init3.initialize();
+ container3 = new CoreContainer();
+ container3.load();
System.clearProperty("hostPort");
System.clearProperty("solr.solr.home");
@@ -226,7 +222,11 @@ public class ClusterStateUpdateTest exte
.disconnect();
container2.shutdown();
- container2 = init2.initialize();
+ System.setProperty("hostPort", "1662");
+ System.setProperty("solr.data.dir", ClusterStateUpdateTest.this.dataDir2.getAbsolutePath());
+ container2 = new CoreContainer();
+ container2.load();
+ System.clearProperty("hostPort");
// pause for watch to trigger
for(int i = 0; i < 200; i++) {
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/LeaderElectionIntegrationTest.java Sat Jul 6 19:27:46 2013
@@ -17,25 +17,12 @@ package org.apache.solr.cloud;
* limitations under the License.
*/
-import java.io.File;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import javax.xml.parsers.ParserConfigurationException;
-
import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.core.CoreContainer;
-import org.apache.solr.core.CoreContainer.Initializer;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -43,6 +30,17 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xml.sax.SAXException;
+import javax.xml.parsers.ParserConfigurationException;
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
@Slow
public class LeaderElectionIntegrationTest extends SolrTestCaseJ4 {
protected static Logger log = LoggerFactory
@@ -140,7 +138,6 @@ public class LeaderElectionIntegrationTe
System.setProperty("hostPort", Integer.toString(port));
System.setProperty("shard", shard);
- Initializer init = new CoreContainer.Initializer();
System.setProperty("solr.data.dir", data.getAbsolutePath());
System.setProperty("solr.solr.home", TEST_HOME());
Set<Integer> ports = shardPorts.get(shard);
@@ -149,7 +146,8 @@ public class LeaderElectionIntegrationTe
shardPorts.put(shard, ports);
}
ports.add(port);
- CoreContainer container = init.initialize();
+ CoreContainer container = new CoreContainer();
+ container.load();
assertTrue("Container " + port + " has no cores!", container.getCores()
.size() > 0);
containerMap.put(port, container);
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/SliceStateUpdateTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/SliceStateUpdateTest.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/SliceStateUpdateTest.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/SliceStateUpdateTest.java Sat Jul 6 19:27:46 2013
@@ -28,7 +28,6 @@ import org.apache.solr.common.cloud.Solr
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.core.CoreContainer;
-import org.apache.solr.core.CoreContainer.Initializer;
import org.apache.zookeeper.CreateMode;
import org.junit.AfterClass;
import org.junit.BeforeClass;
@@ -62,8 +61,6 @@ public class SliceStateUpdateTest extend
private File dataDir3;
- private Initializer init2;
-
@BeforeClass
public static void beforeClass() {
System.setProperty("solrcloud.skip.autorecovery", "true");
@@ -117,20 +114,21 @@ public class SliceStateUpdateTest extend
System.setProperty("solr.solr.home", TEST_HOME());
System.setProperty("hostPort", "1661");
- CoreContainer.Initializer init1 = new CoreContainer.Initializer();
System.setProperty("solr.data.dir", SliceStateUpdateTest.this.dataDir1.getAbsolutePath());
- container1 = init1.initialize();
+ container1 = new CoreContainer();
System.clearProperty("hostPort");
System.setProperty("hostPort", "1662");
- init2 = new CoreContainer.Initializer();
System.setProperty("solr.data.dir", SliceStateUpdateTest.this.dataDir2.getAbsolutePath());
- container2 = init2.initialize();
+ container2 = new CoreContainer();
System.clearProperty("hostPort");
System.clearProperty("solr.solr.home");
+ container1.load();
+ container2.load();
+
log.info("####SETUP_END " + getTestName());
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/TestMultiCoreConfBootstrap.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/TestMultiCoreConfBootstrap.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/TestMultiCoreConfBootstrap.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/TestMultiCoreConfBootstrap.java Sat Jul 6 19:27:46 2013
@@ -17,8 +17,6 @@
package org.apache.solr.cloud;
-import java.io.File;
-
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.core.CoreContainer;
@@ -30,6 +28,8 @@ import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.File;
+
public class TestMultiCoreConfBootstrap extends SolrTestCaseJ4 {
protected static Logger log = LoggerFactory.getLogger(TestMultiCoreConfBootstrap.class);
protected CoreContainer cores = null;
@@ -99,7 +99,7 @@ public class TestMultiCoreConfBootstrap
@Test
public void testMultiCoreConfBootstrap() throws Exception {
System.setProperty("bootstrap_conf", "true");
- cores = new CoreContainer(home, new File(home, "solr.xml"));
+ cores = CoreContainer.createAndLoad(home, new File(home, "solr.xml"));
SolrZkClient zkclient = cores.getZkController().getZkClient();
// zkclient.printLayoutToStdOut();
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/TestZkChroot.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/TestZkChroot.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/TestZkChroot.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/TestZkChroot.java Sat Jul 6 19:27:46 2013
@@ -17,8 +17,6 @@ package org.apache.solr.cloud;
* limitations under the License.
*/
-import java.io.File;
-
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZooKeeperException;
@@ -31,6 +29,8 @@ import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.io.File;
+
public class TestZkChroot extends SolrTestCaseJ4 {
protected static Logger log = LoggerFactory.getLogger(TestZkChroot.class);
protected CoreContainer cores = null;
@@ -91,7 +91,7 @@ public class TestZkChroot extends SolrTe
SolrZkClient zkClient2 = null;
try {
- cores = new CoreContainer(home, new File(home, "solr.xml"));
+ cores = CoreContainer.createAndLoad(home, new File(home, "solr.xml"));
zkClient = cores.getZkController().getZkClient();
assertTrue(zkClient.exists("/clusterstate.json", true));
@@ -122,7 +122,7 @@ public class TestZkChroot extends SolrTe
AbstractZkTestCase.TIMEOUT);
assertFalse("Path '" + chroot + "' should not exist before the test",
zkClient.exists(chroot, true));
- cores = new CoreContainer(home, new File(home, "solr.xml"));
+ cores = CoreContainer.createAndLoad(home, new File(home, "solr.xml"));
fail("There should be a zk exception, as the initial path doesn't exist");
} catch (ZooKeeperException e) {
// expected
@@ -150,7 +150,7 @@ public class TestZkChroot extends SolrTe
AbstractZkTestCase.TIMEOUT);
assertFalse("Path '" + chroot + "' should not exist before the test",
zkClient.exists(chroot, true));
- cores = new CoreContainer(home, new File(home, "solr.xml"));
+ cores = CoreContainer.createAndLoad(home, new File(home, "solr.xml"));
assertTrue(
"solrconfig.xml should have been uploaded to zk to the correct config directory",
zkClient.exists(chroot + ZkController.CONFIGS_ZKNODE + "/"
@@ -176,7 +176,7 @@ public class TestZkChroot extends SolrTe
assertTrue(zkClient.exists(chroot, true));
assertFalse(zkClient.exists(chroot + "/clusterstate.json", true));
- cores = new CoreContainer(home, new File(home, "solr.xml"));
+ cores = CoreContainer.createAndLoad(home, new File(home, "solr.xml"));
assertTrue(zkClient.exists(chroot + "/clusterstate.json", true));
} finally {
if (cores != null) cores.shutdown();
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/cloud/ZkControllerTest.java Sat Jul 6 19:27:46 2013
@@ -17,11 +17,6 @@ package org.apache.solr.cloud;
* the License.
*/
-import java.io.File;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
import org.apache.lucene.util.LuceneTestCase.Slow;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.cloud.SolrZkClient;
@@ -34,6 +29,11 @@ import org.apache.zookeeper.CreateMode;
import org.junit.BeforeClass;
import org.junit.Test;
+import java.io.File;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
@Slow
public class ZkControllerTest extends SolrTestCaseJ4 {
@@ -240,12 +240,8 @@ public class ZkControllerTest extends So
}
private CoreContainer getCoreContainer() {
- CoreContainer cc = new CoreContainer(TEMP_DIR.getAbsolutePath()) {
- {
- initShardHandler();
- }
- };
-
+ CoreContainer cc = new CoreContainer(TEMP_DIR.getAbsolutePath());
+ cc.load();
return cc;
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/AbstractBadConfigTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/AbstractBadConfigTestBase.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/AbstractBadConfigTestBase.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/AbstractBadConfigTestBase.java Sat Jul 6 19:27:46 2013
@@ -18,9 +18,8 @@
package org.apache.solr.core;
import org.apache.solr.SolrTestCaseJ4;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrException.ErrorCode;
+import java.util.Map;
import java.util.regex.Pattern;
public abstract class AbstractBadConfigTestBase extends SolrTestCaseJ4 {
@@ -50,26 +49,37 @@ public abstract class AbstractBadConfigT
ignoreException(Pattern.quote(errString));
try {
+
if (null == solrHome) {
initCore( solrconfigFile, schemaFile );
} else {
initCore( solrconfigFile, schemaFile, solrHome );
}
- } catch (Exception e) {
- for (Throwable t = e; t != null; t = t.getCause()) {
- // short circuit out if we found what we expected
- if (t.getMessage() != null && -1 != t.getMessage().indexOf(errString)) return;
- }
- // otherwise, rethrow it, possibly completley unrelated
- throw new SolrException
- (ErrorCode.SERVER_ERROR,
- "Unexpected error, expected error matching: " + errString, e);
- } finally {
+ CoreContainer cc = h.getCoreContainer();
+ for (Map.Entry<String, Exception> entry : cc.getCoreInitFailures().entrySet()) {
+ if (matches(entry.getValue(), errString))
+ return;
+ }
+ }
+ catch (Exception e) {
+ if (matches(e, errString))
+ return;
+ throw e;
+ }
+ finally {
deleteCore();
resetExceptionIgnores();
}
fail("Did not encounter any exception from: " + solrconfigFile + " using " + schemaFile);
}
+ private static boolean matches(Exception e, String errString) {
+ for (Throwable t = e; t != null; t = t.getCause()) {
+ if (t.getMessage() != null && -1 != t.getMessage().indexOf(errString))
+ return true;
+ }
+ return false;
+ }
+
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/CoreContainerCoreInitFailuresTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/CoreContainerCoreInitFailuresTest.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/CoreContainerCoreInitFailuresTest.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/CoreContainerCoreInitFailuresTest.java Sat Jul 6 19:27:46 2013
@@ -17,23 +17,17 @@
package org.apache.solr.core;
-import java.util.Map;
-import java.util.Collection;
-import java.util.regex.Pattern;
-
-import java.io.File;
-
-import org.apache.solr.common.SolrException;
-import org.apache.solr.SolrTestCaseJ4;
-
-import org.apache.lucene.util.IOUtils;
-
import org.apache.commons.io.FileUtils;
-
+import org.apache.lucene.util.IOUtils;
+import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.common.SolrException;
+import org.junit.After;
import org.xml.sax.SAXParseException;
-import org.junit.Before;
-import org.junit.After;
+import java.io.File;
+import java.util.Collection;
+import java.util.Map;
+import java.util.regex.Pattern;
public class CoreContainerCoreInitFailuresTest extends SolrTestCaseJ4 {
@@ -44,8 +38,7 @@ public class CoreContainerCoreInitFailur
// would be nice to do this in an @Before method,
// but junit doesn't let @Before methods have test names
solrHome = new File(TEMP_DIR, this.getClass().getName() + "_" + dirSuffix);
- assertTrue("Failed to mkdirs solrhome", solrHome.mkdirs());
- cc = new CoreContainer(solrHome.getAbsolutePath());
+ assertTrue("Failed to mkdirs solrhome [" + solrHome + "]", solrHome.mkdirs());
}
@After
@@ -68,7 +61,7 @@ public class CoreContainerCoreInitFailur
Map<String,Exception> failures = null;
Collection<String> cores = null;
Exception fail = null;
-
+
init("empty_flow");
// solr.xml
@@ -77,7 +70,8 @@ public class CoreContainerCoreInitFailur
// ----
// init the CoreContainer
- cc.load(solrHome.getAbsolutePath(), solrXml);
+ cc = new CoreContainer(solrHome.getAbsolutePath());
+ cc.load();
// check that we have the cores we expect
cores = cc.getCoreNames();
@@ -154,18 +148,19 @@ public class CoreContainerCoreInitFailur
FileUtils.getFile(solrHome, "col_ok", "conf", "solrconfig.xml"));
FileUtils.copyFile(getFile("solr/collection1/conf/schema-minimal.xml"),
FileUtils.getFile(solrHome, "col_ok", "conf", "schema.xml"));
-
+
// our "bad" collection
ignoreException(Pattern.quote("DummyMergePolicy"));
FileUtils.copyFile(getFile("solr/collection1/conf/bad-mp-solrconfig.xml"),
FileUtils.getFile(solrHome, "col_bad", "conf", "solrconfig.xml"));
FileUtils.copyFile(getFile("solr/collection1/conf/schema-minimal.xml"),
FileUtils.getFile(solrHome, "col_bad", "conf", "schema.xml"));
-
-
+
+
// -----
// init the CoreContainer with the mix of ok/bad cores
- cc.load(solrHome.getAbsolutePath(), solrXml);
+ cc = new CoreContainer(solrHome.getAbsolutePath());
+ cc.load();
// check that we have the cores we expect
cores = cc.getCoreNames();
@@ -293,8 +288,8 @@ public class CoreContainerCoreInitFailur
fail("corrupt solrconfig.xml failed to trigger exception from reload");
} catch (SolrException e) {
assertTrue("We're supposed to have a wrapped SAXParserException here, but we don't",
- e.getCause() instanceof SAXParseException);
- SAXParseException se = (SAXParseException)e.getCause();
+ e.getCause().getCause() instanceof SAXParseException);
+ SAXParseException se = (SAXParseException)e.getCause().getCause();
assertTrue("reload exception doesn't refer to slrconfig.xml " + se.getSystemId(),
0 < se.getSystemId().indexOf("solrconfig.xml"));
@@ -318,9 +313,9 @@ public class CoreContainerCoreInitFailur
fail = failures.get("col_bad");
assertNotNull("null failure for test core", fail);
assertTrue("init failure isn't SAXParseException",
- fail instanceof SAXParseException);
+ fail.getCause() instanceof SAXParseException);
assertTrue("init failure doesn't mention problem: " + fail.toString(),
- 0 < ((SAXParseException)fail).getSystemId().indexOf("solrconfig.xml"));
+ 0 < ((SAXParseException)fail.getCause()).getSystemId().indexOf("solrconfig.xml"));
// ----
// fix col_bad's config (again) and RELOAD to fix failure
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/SolrCoreCheckLockOnStartupTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/SolrCoreCheckLockOnStartupTest.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/SolrCoreCheckLockOnStartupTest.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/SolrCoreCheckLockOnStartupTest.java Sat Jul 6 19:27:46 2013
@@ -29,6 +29,7 @@ import org.junit.Before;
import org.junit.Test;
import java.io.File;
+import java.util.Map;
public class SolrCoreCheckLockOnStartupTest extends SolrTestCaseJ4 {
@@ -62,13 +63,9 @@ public class SolrCoreCheckLockOnStartupT
try {
//opening a new core on the same index
initCore("solrconfig-simplelock.xml", "schema.xml");
+ if (checkForCoreInitException(LockObtainFailedException.class))
+ return;
fail("Expected " + LockObtainFailedException.class.getSimpleName());
- } catch (Throwable t) {
- assertTrue(t instanceof RuntimeException);
- assertNotNull(t.getCause());
- assertTrue(t.getCause() instanceof RuntimeException);
- assertNotNull(t.getCause().getCause());
- assertTrue(t.getCause().getCause().toString(), t.getCause().getCause() instanceof LockObtainFailedException);
} finally {
indexWriter.close();
directory.close();
@@ -79,24 +76,33 @@ public class SolrCoreCheckLockOnStartupT
@Test
public void testNativeLockErrorOnStartup() throws Exception {
- Directory directory = newFSDirectory(new File(dataDir, "index"), new NativeFSLockFactory());
+ File indexDir = new File(dataDir, "index");
+ log.info("Acquiring lock on {}", indexDir.getAbsolutePath());
+ Directory directory = newFSDirectory(indexDir, new NativeFSLockFactory());
//creates a new IndexWriter without releasing the lock yet
IndexWriter indexWriter = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_40, null));
try {
//opening a new core on the same index
initCore("solrconfig-nativelock.xml", "schema.xml");
+ CoreContainer cc = h.getCoreContainer();
+ if (checkForCoreInitException(LockObtainFailedException.class))
+ return;
fail("Expected " + LockObtainFailedException.class.getSimpleName());
- } catch(Throwable t) {
- assertTrue(t instanceof RuntimeException);
- assertNotNull(t.getCause());
- assertTrue(t.getCause() instanceof RuntimeException);
- assertNotNull(t.getCause().getCause());
- assertTrue(t.getCause().getCause() instanceof LockObtainFailedException);
} finally {
indexWriter.close();
directory.close();
deleteCore();
}
}
+
+ private boolean checkForCoreInitException(Class<? extends Exception> clazz) {
+ for (Map.Entry<String, Exception> entry : h.getCoreContainer().getCoreInitFailures().entrySet()) {
+ for (Throwable t = entry.getValue(); t != null; t = t.getCause()) {
+ if (clazz.isInstance(t))
+ return true;
+ }
+ }
+ return false;
+ }
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestCoreContainer.java Sat Jul 6 19:27:46 2013
@@ -17,6 +17,16 @@
package org.apache.solr.core;
+import org.apache.commons.io.FileUtils;
+import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util._TestUtil;
+import org.apache.solr.SolrTestCaseJ4;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.ParserConfigurationException;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
@@ -27,17 +37,7 @@ import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.apache.commons.io.FileUtils;
import org.apache.lucene.util.Constants;
-import org.apache.lucene.util.IOUtils;
-import org.apache.lucene.util._TestUtil;
-import org.apache.solr.SolrTestCaseJ4;
-import org.junit.AfterClass;
-import org.junit.BeforeClass;
-import org.junit.Test;
-import org.xml.sax.SAXException;
public class TestCoreContainer extends SolrTestCaseJ4 {
@@ -71,9 +71,10 @@ public class TestCoreContainer extends S
assertTrue("Failed to mkdirs workDir", solrHomeDirectory.mkdirs());
FileUtils.copyDirectory(new File(SolrTestCaseJ4.TEST_HOME()), solrHomeDirectory);
+ System.out.println("Using solrconfig from " + new File(SolrTestCaseJ4.TEST_HOME()).getAbsolutePath());
CoreContainer ret = new CoreContainer(solrHomeDirectory.getAbsolutePath());
- ret.load(solrHomeDirectory.getAbsolutePath(), new File(solrHomeDirectory, "solr.xml"));
+ ret.load();
return ret;
}
@@ -162,13 +163,13 @@ public class TestCoreContainer extends S
SolrCore template = null;
try {
template = cores.getCore("collection1");
- instDir = template.getCoreDescriptor().getInstanceDir();
+ instDir = template.getCoreDescriptor().getRawInstanceDir();
} finally {
if (null != template) template.close();
}
}
- final File instDirFile = new File(instDir);
+ final File instDirFile = new File(cores.getSolrHome(), instDir);
assertTrue("instDir doesn't exist: " + instDir, instDirFile.exists());
// sanity check the basic persistence of the default init
@@ -263,14 +264,8 @@ public class TestCoreContainer extends S
File solrHomeDirectory = new File(TEMP_DIR, this.getClass().getName()
+ "_noCores");
SetUpHome(solrHomeDirectory, EMPTY_SOLR_XML);
- CoreContainer.Initializer init = new CoreContainer.Initializer();
- CoreContainer cores = null;
- try {
- cores = init.initialize();
- }
- catch(Exception e) {
- fail("CoreContainer not created" + e.getMessage());
- }
+ CoreContainer cores = new CoreContainer(solrHomeDirectory.getAbsolutePath());
+ cores.load();
try {
//assert zero cores
assertEquals("There should not be cores", 0, cores.getCores().size());
@@ -364,24 +359,21 @@ public class TestCoreContainer extends S
FileUtils.writeStringToFile(new File(tmpRoot, "explicit-lib-solr.xml"), "<solr sharedLib=\"lib\"><cores/></solr>", "UTF-8");
FileUtils.writeStringToFile(new File(tmpRoot, "custom-lib-solr.xml"), "<solr sharedLib=\"customLib\"><cores/></solr>", "UTF-8");
- final CoreContainer cc1 = new CoreContainer(tmpRoot.getAbsolutePath());
- cc1.load(tmpRoot.getAbsolutePath(), new File(tmpRoot, "default-lib-solr.xml"));
+ final CoreContainer cc1 = CoreContainer.createAndLoad(tmpRoot.getAbsolutePath(), new File(tmpRoot, "default-lib-solr.xml"));
try {
cc1.loader.openResource("defaultSharedLibFile").close();
} finally {
cc1.shutdown();
}
- final CoreContainer cc2 = new CoreContainer(tmpRoot.getAbsolutePath());
- cc2.load(tmpRoot.getAbsolutePath(), new File(tmpRoot, "explicit-lib-solr.xml"));
+ final CoreContainer cc2 = CoreContainer.createAndLoad(tmpRoot.getAbsolutePath(), new File(tmpRoot, "explicit-lib-solr.xml"));
try {
cc2.loader.openResource("defaultSharedLibFile").close();
} finally {
cc2.shutdown();
}
- final CoreContainer cc3 = new CoreContainer(tmpRoot.getAbsolutePath());
- cc3.load(tmpRoot.getAbsolutePath(), new File(tmpRoot, "custom-lib-solr.xml"));
+ final CoreContainer cc3 = CoreContainer.createAndLoad(tmpRoot.getAbsolutePath(), new File(tmpRoot, "custom-lib-solr.xml"));
try {
cc3.loader.openResource("customSharedLibFile").close();
} finally {
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java?rev=1500315&r1=1500314&r2=1500315&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java Sat Jul 6 19:27:46 2013
@@ -17,10 +17,6 @@ package org.apache.solr.core;
* limitations under the License.
*/
-import java.io.File;
-import java.io.FileOutputStream;
-import java.util.Properties;
-
import org.apache.commons.io.FileUtils;
import org.apache.lucene.util.IOUtils;
import org.apache.solr.SolrTestCaseJ4;
@@ -29,6 +25,10 @@ import org.junit.After;
import org.junit.BeforeClass;
import org.junit.Test;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.Properties;
+
public class TestCoreDiscovery extends SolrTestCaseJ4 {
@BeforeClass
@@ -106,11 +106,8 @@ public class TestCoreDiscovery extends S
}
private CoreContainer init() throws Exception {
-
- CoreContainer.Initializer init = new CoreContainer.Initializer();
-
- final CoreContainer cores = init.initialize();
- cores.setPersistent(false);
+ final CoreContainer cores = new CoreContainer();
+ cores.load();
return cores;
}