You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by no...@apache.org on 2009/08/26 09:46:22 UTC
svn commit: r807914 - in /lucene/solr/trunk: ./
src/java/org/apache/solr/core/ src/test/org/apache/solr/
src/test/test-files/solr/conf/
Author: noble
Date: Wed Aug 26 07:46:22 2009
New Revision: 807914
URL: http://svn.apache.org/viewvc?rev=807914&view=rev
Log:
SOLR-1335 load core properties from a properties file
Added:
lucene/solr/trunk/src/test/org/apache/solr/TestSolrCoreProperties.java
lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig-solcoreproperties.xml
Modified:
lucene/solr/trunk/CHANGES.txt
lucene/solr/trunk/src/java/org/apache/solr/core/CoreContainer.java
lucene/solr/trunk/src/java/org/apache/solr/core/CoreDescriptor.java
Modified: lucene/solr/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/CHANGES.txt?rev=807914&r1=807913&r2=807914&view=diff
==============================================================================
--- lucene/solr/trunk/CHANGES.txt (original)
+++ lucene/solr/trunk/CHANGES.txt Wed Aug 26 07:46:22 2009
@@ -288,6 +288,8 @@
73. SOLR-1156: Sort TermsComponent results by frequency (Matt Weber via yonik)
+74. SOLR-1384 : load core properties from a properties file (noble)
+
Optimizations
----------------------
1. SOLR-374: Use IndexReader.reopen to save resources by re-using parts of the
Modified: lucene/solr/trunk/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/core/CoreContainer.java?rev=807914&r1=807913&r2=807914&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/core/CoreContainer.java Wed Aug 26 07:46:22 2009
@@ -24,6 +24,7 @@
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
+import java.io.InputStream;
import java.nio.channels.FileChannel;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@@ -45,6 +46,7 @@
import org.apache.solr.common.util.FileUtils;
import org.apache.solr.handler.admin.CoreAdminHandler;
import org.apache.solr.schema.IndexSchema;
+import org.apache.commons.io.IOUtils;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
@@ -81,7 +83,7 @@
public Properties getContainerProperties() {
return containerProperties;
}
-
+
// Helper class to initialize the CoreContainer
public static class Initializer {
protected String solrConfigFilename = null;
@@ -124,8 +126,11 @@
solrConfigFilename = cores.getConfigFile().getName();
} else {
// perform compatibility init
- cores = new CoreContainer(new SolrResourceLoader(solrHome));
- SolrConfig cfg = solrConfigFilename == null ? new SolrConfig() : new SolrConfig(solrConfigFilename);
+ SolrResourceLoader resourceLoader = new SolrResourceLoader(solrHome, null, getCoreProps(solrHome, null,null));
+ cores = new CoreContainer(resourceLoader);
+ SolrConfig cfg = solrConfigFilename == null ?
+ new SolrConfig(resourceLoader, SolrConfig.DEFAULT_CONF_FILE,null) :
+ new SolrConfig(resourceLoader, solrConfigFilename,null);
CoreDescriptor dcore = new CoreDescriptor(cores, "", ".");
SolrCore singlecore = new SolrCore(null, null, cfg, null, dcore);
abortOnConfigurationError = cfg.getBool(
@@ -138,6 +143,28 @@
}
}
+ private static Properties getCoreProps(String instanceDir, String file, Properties defaults) {
+ if(file == null) file = "conf"+File.separator+ "solrcore.properties";
+ File corePropsFile = new File(file);
+ if(!corePropsFile.isAbsolute()){
+ corePropsFile = new File(instanceDir, file);
+ }
+ Properties p = defaults;
+ if (corePropsFile.exists() && corePropsFile.isFile()) {
+ p = new Properties(defaults);
+ InputStream is = null;
+ try {
+ is = new FileInputStream(corePropsFile);
+ p.load(is);
+ } catch (IOException e) {
+ log.warn("Error loading properties ",e);
+ } finally{
+ IOUtils.closeQuietly(is);
+ }
+ }
+ return p;
+ }
+
/**
* Initalize CoreContainer directly from the constructor
*
@@ -231,6 +258,10 @@
if (opt != null) {
p.setSchemaName(opt);
}
+ opt = DOMUtil.getAttr(node, "properties", null);
+ if (opt != null) {
+ p.setPropertiesName(opt);
+ }
opt = DOMUtil.getAttr(node, CoreAdminParams.DATA_DIR, null);
if (opt != null) {
p.setDataDir(opt);
@@ -364,7 +395,7 @@
String instanceDir = idir.getPath();
// Initialize the solr config
- SolrResourceLoader solrLoader = new SolrResourceLoader(instanceDir, libLoader, dcore.getCoreProperties());
+ SolrResourceLoader solrLoader = new SolrResourceLoader(instanceDir, libLoader, getCoreProps(instanceDir, dcore.getPropertiesName(),dcore.getCoreProperties()));
SolrConfig config = new SolrConfig(solrLoader, dcore.getConfigName(), null);
IndexSchema schema = null;
if(indexSchemaCache != null){
@@ -716,6 +747,10 @@
if (opt != null && !opt.equals(dcore.getDefaultSchemaName())) {
writeAttribute(w,"schema",opt);
}
+ opt = dcore.getPropertiesName();
+ if (opt != null) {
+ writeAttribute(w,"properties",opt);
+ }
opt = dcore.dataDir;
if (opt != null) writeAttribute(w,"dataDir",opt);
if (dcore.getCoreProperties() == null || dcore.getCoreProperties().isEmpty())
Modified: lucene/solr/trunk/src/java/org/apache/solr/core/CoreDescriptor.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/java/org/apache/solr/core/CoreDescriptor.java?rev=807914&r1=807913&r2=807914&view=diff
==============================================================================
--- lucene/solr/trunk/src/java/org/apache/solr/core/CoreDescriptor.java (original)
+++ lucene/solr/trunk/src/java/org/apache/solr/core/CoreDescriptor.java Wed Aug 26 07:46:22 2009
@@ -30,6 +30,7 @@
protected String instanceDir;
protected String dataDir;
protected String configName;
+ protected String propertiesName;
protected String schemaName;
private final CoreContainer coreContainer;
private Properties coreProperties;
@@ -83,6 +84,14 @@
return "data" + File.separator;
}
+ public String getPropertiesName() {
+ return propertiesName;
+ }
+
+ public void setPropertiesName(String propertiesName) {
+ this.propertiesName = propertiesName;
+ }
+
public String getDataDir() {
String dataDir = this.dataDir;
if (dataDir == null) dataDir = getDefaultDataDir();
Added: lucene/solr/trunk/src/test/org/apache/solr/TestSolrCoreProperties.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/TestSolrCoreProperties.java?rev=807914&view=auto
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/TestSolrCoreProperties.java (added)
+++ lucene/solr/trunk/src/test/org/apache/solr/TestSolrCoreProperties.java Wed Aug 26 07:46:22 2009
@@ -0,0 +1,149 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.solr;
+
+import org.apache.solr.util.AbstractSolrTestCase;
+import org.apache.solr.client.solrj.embedded.JettySolrRunner;
+import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
+import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.commons.io.IOUtils;
+
+import java.io.*;
+import java.util.Properties;
+
+import junit.framework.TestCase;
+
+/**
+ * <p> Test for Loading core properties from a properties file </p>
+ *
+ * @version $Id$
+ * @since solr 1.4
+ */
+public class TestSolrCoreProperties extends AbstractSolrTestCase {
+ private static final String CONF_DIR = "." + File.separator + "solr" + File.separator + "conf" + File.separator;
+ JettySolrRunner solrJetty;
+ SolrServer client;
+
+ @Override
+ public void setUp() throws Exception {
+// System.setProperty("foo.foo1", "f1");
+// System.setProperty("foo.foo2", "f2");
+ setUpMe();
+ System.setProperty("solr.solr.home", getHomeDir());
+ System.setProperty("solr.data.dir", getDataDir());
+
+ solrJetty = new JettySolrRunner("/solr", 0);
+
+ solrJetty.start();
+ String url = "http://localhost:" + solrJetty.getLocalPort() + "/solr";
+ client = new CommonsHttpSolrServer(url);
+
+ }
+
+ @Override
+ public void tearDown() throws Exception {
+ solrJetty.stop();
+ AbstractSolrTestCase.recurseDelete(homeDir);
+ }
+
+ public void testSimple() throws SolrServerException {
+ ModifiableSolrParams params = new ModifiableSolrParams();
+ params.add("q", "*:*");
+ QueryResponse res = client.query(params);
+ assertEquals(0, res.getResults().getNumFound());
+ }
+
+
+
+ File homeDir;
+ File confDir;
+
+ /**
+ * if masterPort is null, this instance is a master -- otherwise this instance is a slave, and assumes the master is
+ * on localhost at the specified port.
+ */
+
+
+ public String getHomeDir() {
+ return homeDir.toString();
+ }
+
+ @Override
+ public String getSchemaFile() {
+ return CONF_DIR + "schema-replication1.xml";
+ }
+
+ public String getConfDir() {
+ return confDir.toString();
+ }
+
+ public String getDataDir() {
+ return dataDir.toString();
+ }
+
+ @Override
+ public String getSolrConfigFile() {
+ return CONF_DIR + "solrconfig-solcoreproperties.xml";
+ }
+
+ public void setUpMe() throws Exception {
+
+ String home = System.getProperty("java.io.tmpdir")
+ + File.separator
+ + getClass().getName() + "-" + System.currentTimeMillis();
+
+
+ homeDir = new File(home);
+ dataDir = new File(home, "data");
+ confDir = new File(home, "conf");
+
+
+ homeDir.mkdirs();
+ dataDir.mkdirs();
+ confDir.mkdirs();
+
+ File f = new File(confDir, "solrconfig.xml");
+ copyFile(new File(getSolrConfigFile()), f);
+
+ f = new File(confDir, "schema.xml");
+ copyFile(new File(getSchemaFile()), f);
+ Properties p = new Properties();
+ p.setProperty("foo.foo1","f1");
+ p.setProperty("foo.foo2","f2");
+ FileOutputStream fos = new FileOutputStream(confDir + File.separator + "solrcore.properties");
+ p.store(fos,null);
+ fos.close();
+ IOUtils.closeQuietly(fos);
+
+ }
+
+
+
+ private void copyFile(File src, File dst) throws IOException {
+ BufferedReader in = new BufferedReader(new FileReader(src));
+ Writer out = new FileWriter(dst);
+
+ for (String line = in.readLine(); null != line; line = in.readLine()) {
+ out.write(line);
+ }
+ in.close();
+ out.close();
+ }
+}
Added: lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig-solcoreproperties.xml
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig-solcoreproperties.xml?rev=807914&view=auto
==============================================================================
--- lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig-solcoreproperties.xml (added)
+++ lucene/solr/trunk/src/test/test-files/solr/conf/solrconfig-solcoreproperties.xml Wed Aug 26 07:46:22 2009
@@ -0,0 +1,82 @@
+<?xml version="1.0" ?>
+
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<!-- $Id: solrconfig-slave.xml 741684 2009-02-06 19:21:44Z shalin $
+ $Source$
+ $Name$
+ -->
+
+<config>
+
+ <dataDir>${solr.data.dir:./solr/data}</dataDir>
+
+ <indexDefaults>
+ <useCompoundFile>false</useCompoundFile>
+ <mergeFactor>10</mergeFactor>
+ <ramBufferSizeMB>32</ramBufferSizeMB>
+ <maxMergeDocs>2147483647</maxMergeDocs>
+ <maxFieldLength>10000</maxFieldLength>
+ <writeLockTimeout>1000</writeLockTimeout>
+ <commitLockTimeout>10000</commitLockTimeout>
+
+ <writeLockTimeout>1000</writeLockTimeout>
+ <commitLockTimeout>10000</commitLockTimeout>
+
+ <lockType>single</lockType>
+ </indexDefaults>
+
+ <mainIndex>
+ <useCompoundFile>false</useCompoundFile>
+ <mergeFactor>10</mergeFactor>
+ <ramBufferSizeMB>32</ramBufferSizeMB>
+ <maxMergeDocs>2147483647</maxMergeDocs>
+ <maxFieldLength>10000</maxFieldLength>
+
+ <unlockOnStartup>true</unlockOnStartup>
+ </mainIndex>
+
+ <updateHandler class="solr.DirectUpdateHandler2">
+ </updateHandler>
+
+ <requestHandler name="standard" class="solr.StandardRequestHandler">
+ <bool name="httpCaching">true</bool>
+ </requestHandler>
+
+ <!-- test query parameter defaults -->
+ <requestHandler name="defaults" class="solr.StandardRequestHandler">
+
+ </requestHandler>
+ <tag1>${foo.foo1}</tag1>
+ <tag2>${foo.foo2}</tag2>
+
+ <!-- test query parameter defaults -->
+ <requestHandler name="lazy" class="solr.StandardRequestHandler" startup="lazy">
+ </requestHandler>
+
+ <requestHandler name="/update" class="solr.XmlUpdateRequestHandler"/>
+
+ <!-- enable streaming for testing... -->
+ <requestDispatcher handleSelect="true">
+ <requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048"/>
+ <httpCaching lastModifiedFrom="openTime" etagSeed="Solr" never304="false">
+ <cacheControl>max-age=30, public</cacheControl>
+ </httpCaching>
+ </requestDispatcher>
+
+</config>