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 2014/12/19 11:34:41 UTC
svn commit: r1646665 - in /lucene/dev/branches/branch_5x: ./ solr/
solr/core/ solr/core/src/java/org/apache/solr/core/
solr/core/src/test/org/apache/solr/core/
Author: romseygeek
Date: Fri Dec 19 10:34:40 2014
New Revision: 1646665
URL: http://svn.apache.org/r1646665
Log:
SOLR-6718: coreRootDirectory should be resolved against SOLR_HOME
Modified:
lucene/dev/branches/branch_5x/ (props changed)
lucene/dev/branches/branch_5x/solr/ (props changed)
lucene/dev/branches/branch_5x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_5x/solr/core/ (props changed)
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/ConfigSolr.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestSolrXml.java
Modified: lucene/dev/branches/branch_5x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/CHANGES.txt?rev=1646665&r1=1646664&r2=1646665&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/solr/CHANGES.txt Fri Dec 19 10:34:40 2014
@@ -94,6 +94,10 @@ Upgrading from Solr 4.x
java -jar -Dc=<collection_name> post.jar *.xml (new call with collection name)
See SOLR-6852 for more details.
+* Relative paths specified in the solr.xml coreRootDirectory parameter for core
+ discovery are now resolved relative to SOLR_HOME, rather than cwd. See
+ SOLR-6718.
+
Detailed Change List
----------------------
@@ -296,6 +300,9 @@ Bug Fixes
component. Increased test coverage of expand component with docValues.
(Christine Poerschke, Per Steffensen, shalin)
+* SOLR-6718: Core discovery was walking paths relative to the Jetty working
+ directory, rather than SOLR_HOME. (Andreas Hubold, Alan Woodward)
+
* SOLR-6864: Support registering searcher listeners in SolrCoreAware.inform(SolrCore)
method. Existing components rely on this. (Tomás Fernández Löbbe)
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/ConfigSolr.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/ConfigSolr.java?rev=1646665&r1=1646664&r2=1646665&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/ConfigSolr.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/ConfigSolr.java Fri Dec 19 10:34:40 2014
@@ -17,18 +17,6 @@ package org.apache.solr.core;
* limitations under the License.
*/
-import javax.xml.xpath.XPath;
-import javax.xml.xpath.XPathConstants;
-import javax.xml.xpath.XPathExpressionException;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
import org.apache.commons.io.IOUtils;
import org.apache.solr.cloud.CloudConfigSetService;
import org.apache.solr.cloud.ZkController;
@@ -42,6 +30,18 @@ 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.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
public abstract class ConfigSolr {
protected static Logger log = LoggerFactory.getLogger(ConfigSolr.class);
@@ -105,7 +105,11 @@ public abstract class ConfigSolr {
* @return core root directory
*/
public String getCoreRootDirectory() {
- return SolrResourceLoader.normalizeDir( get(CfgProp.SOLR_COREROOTDIRECTORY, config.getResourceLoader().getInstanceDir()) );
+ SolrResourceLoader loader = config.getResourceLoader();
+ String relativeDir = get(CfgProp.SOLR_COREROOTDIRECTORY, null);
+ if (relativeDir != null)
+ return loader.resolve(relativeDir);
+ return loader.getInstanceDir();
}
public PluginInfo getShardHandlerFactoryPluginInfo() {
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java?rev=1646665&r1=1646664&r2=1646665&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java Fri Dec 19 10:34:40 2014
@@ -19,7 +19,6 @@ package org.apache.solr.core;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
-
import org.apache.commons.lang.StringUtils;
import org.apache.solr.cloud.CloudDescriptor;
import org.apache.solr.common.SolrException;
@@ -32,6 +31,7 @@ import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Paths;
import java.util.Locale;
import java.util.Properties;
@@ -324,10 +324,7 @@ public class CoreDescriptor {
private static String convertToAbsolute(String instDir, String solrHome) {
checkNotNull(instDir);
- File f = new File(instDir);
- if (f.isAbsolute())
- return SolrResourceLoader.normalizeDir(instDir);
- return SolrResourceLoader.normalizeDir(solrHome + SolrResourceLoader.normalizeDir(instDir));
+ return SolrResourceLoader.normalizeDir(Paths.get(solrHome).resolve(instDir).toString());
}
/**
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java?rev=1646665&r1=1646664&r2=1646665&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java Fri Dec 19 10:34:40 2014
@@ -48,7 +48,6 @@ import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.NoInitialContextException;
-
import java.io.Closeable;
import java.io.File;
import java.io.FileFilter;
@@ -65,6 +64,7 @@ import java.net.URLClassLoader;
import java.nio.charset.CharacterCodingException;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -857,4 +857,8 @@ public class SolrResourceLoader implemen
}
}
}
+
+ public String resolve(String pathToResolve) {
+ return Paths.get(instanceDir).resolve(pathToResolve).toString();
+ }
}
Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java?rev=1646665&r1=1646664&r2=1646665&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestCoreDiscovery.java Fri Dec 19 10:34:40 2014
@@ -17,13 +17,6 @@ package org.apache.solr.core;
* limitations under the License.
*/
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.OutputStreamWriter;
-import java.io.Writer;
-import java.nio.file.Files;
-import java.util.Properties;
-
import org.apache.commons.io.FileUtils;
import org.apache.lucene.util.IOUtils;
import org.apache.solr.SolrTestCaseJ4;
@@ -32,7 +25,17 @@ import org.junit.After;
import org.junit.BeforeClass;
import org.junit.Test;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.not;
+import static org.junit.internal.matchers.StringContains.containsString;
public class TestCoreDiscovery extends SolrTestCaseJ4 {
@@ -211,6 +214,38 @@ public class TestCoreDiscovery extends S
cc.shutdown();
}
}
+
+ @Test
+ public void testAlternateRelativeCoreDir() throws Exception {
+
+ String relative = "relativeCoreDir";
+
+ setMeUp(relative);
+ // two cores under the relative directory
+ addCoreWithProps(makeCorePropFile("core1", false, true, "dataDir=core1"),
+ solrHomeDirectory.toPath().resolve(relative).resolve("core1").resolve(CorePropertiesLocator.PROPERTIES_FILENAME).toFile());
+ addCoreWithProps(makeCorePropFile("core2", false, false, "dataDir=core2"),
+ solrHomeDirectory.toPath().resolve(relative).resolve("core2").resolve(CorePropertiesLocator.PROPERTIES_FILENAME).toFile());
+ // one core *not* under the relative directory
+ addCoreWithProps(makeCorePropFile("core0", false, true, "datadir=core0"),
+ solrHomeDirectory.toPath().resolve("core0").resolve(CorePropertiesLocator.PROPERTIES_FILENAME).toFile());
+
+ CoreContainer cc = init();
+ try (SolrCore core1 = cc.getCore("core1");
+ SolrCore core2 = cc.getCore("core2")) {
+ assertNotNull(core1);
+ assertNotNull(core2);
+
+ assertNull(cc.getCore("core0"));
+
+ SolrCore core3 = cc.create(new CoreDescriptor(cc, "core3", "core3", "configSet", "minimal"));
+ assertThat(core3.getCoreDescriptor().getInstanceDir(), containsString("relative"));
+
+ } finally {
+ cc.shutdown();
+ }
+ }
+
@Test
public void testNoCoreDir() throws Exception {
File noCoreDir = createTempDir().toFile();
@@ -344,9 +379,11 @@ public class TestCoreDiscovery extends S
homeDir.setReadable(true, false);
}
+
// For testing whether finding a solr.xml overrides looking at solr.properties
private final static String SOLR_XML = "<solr> " +
"<int name=\"transientCacheSize\">2</int> " +
+ "<str name=\"configSetBaseDir\">" + Paths.get(TEST_HOME()).resolve("configsets").toString() + "</str>" +
"<solrcloud> " +
"<str name=\"hostContext\">solrprop</str> " +
"<int name=\"zkClientTimeout\">20</int> " +
@@ -354,4 +391,16 @@ public class TestCoreDiscovery extends S
"<int name=\"hostPort\">6000</int> " +
"</solrcloud> " +
"</solr>";
+
+ @Test
+ public void testRootDirectoryResolution() {
+
+ SolrResourceLoader loader = new SolrResourceLoader(solrHomeDirectory.getAbsolutePath());
+
+ ConfigSolr config = ConfigSolr.fromString(loader, "<solr><str name=\"coreRootDirectory\">relative</str></solr>");
+ assertThat(config.getCoreRootDirectory(), containsString(solrHomeDirectory.getAbsolutePath()));
+
+ ConfigSolr absConfig = ConfigSolr.fromString(loader, "<solr><str name=\"coreRootDirectory\">/absolute</str></solr>");
+ assertThat(absConfig.getCoreRootDirectory(), not(containsString(solrHomeDirectory.getAbsolutePath())));
+ }
}
Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestSolrXml.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestSolrXml.java?rev=1646665&r1=1646664&r2=1646665&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestSolrXml.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/core/TestSolrXml.java Fri Dec 19 10:34:40 2014
@@ -17,10 +17,6 @@ package org.apache.solr.core;
* limitations under the License.
*/
-import java.io.File;
-import java.io.IOException;
-import java.util.Locale;
-
import com.carrotsearch.randomizedtesting.rules.SystemPropertiesRestoreRule;
import org.apache.commons.io.FileUtils;
import org.apache.lucene.util.TestUtil;
@@ -33,6 +29,12 @@ import org.junit.rules.ExpectedException
import org.junit.rules.RuleChain;
import org.junit.rules.TestRule;
+import java.io.File;
+import java.io.IOException;
+import java.util.Locale;
+
+import static org.junit.internal.matchers.StringContains.containsString;
+
public class TestSolrXml extends SolrTestCaseJ4 {
@Rule
@@ -67,7 +69,7 @@ public class TestSolrXml extends SolrTes
assertEquals("collection handler class", "testCollectionsHandler", cfg.getCollectionsHandlerClass());
assertEquals("info handler class", "testInfoHandler", cfg.getInfoHandlerClass());
assertEquals("core load threads", 11, cfg.getCoreLoadThreadCount());
- assertEquals("core root dir", "testCoreRootDirectory" + File.separator, cfg.getCoreRootDirectory());
+ assertThat("core root dir", cfg.getCoreRootDirectory(), containsString("testCoreRootDirectory"));
assertEquals("distrib conn timeout", 22, cfg.getDistributedConnectionTimeout());
assertEquals("distrib socket timeout", 33, cfg.getDistributedSocketTimeout());
assertEquals("max update conn", 3, cfg.getMaxUpdateConnections());
@@ -103,7 +105,7 @@ public class TestSolrXml extends SolrTes
FileUtils.copyFile(new File(testSrcRoot, "solr-50-all.xml"), new File(solrHome, "solr.xml"));
ConfigSolr cfg = ConfigSolr.fromSolrHome(loader, solrHome.getAbsolutePath());
- assertEquals("core root dir", "myCoreRoot" + File.separator, cfg.getCoreRootDirectory());
+ assertThat(cfg.getCoreRootDirectory(), containsString("myCoreRoot"));
assertEquals("solr host port", "8888", cfg.getSolrHostPort());
assertEquals("schema cache", false, cfg.hasSchemaCache());
}