SOLR-3264: Fix CoreContainer and SolrResourceLoader logging to stop misleading people about SolrCore instanceDir's being the Solr Home Dir

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1305697 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Chris M. Hostetter 2012-03-27 00:57:09 +00:00
parent 7433d817db
commit 3f32f09c95
3 changed files with 37 additions and 8 deletions

View File

@ -729,6 +729,10 @@ Bug Fixes
and was fundamentally broken/bizarre.
(hossman, Ahmet Arslan)
* SOLR-3264: Fix CoreContainer and SolrResourceLoader logging to be more
clear about when SolrCores are being created, and stop misleading people
about SolrCore instanceDir's being the "Solr Home Dir" (hossman)
Other Changes
----------------------
* SOLR-2922: Upgrade commons-io and commons-lang to 2.1 and 2.6, respectively. (koji)

View File

@ -123,8 +123,14 @@ public class CoreContainer
log.info("New CoreContainer " + System.identityHashCode(this));
}
/**
* Deprecated
* @deprecated use the single arg constructure with locateSolrHome()
* @see SolrResourceLoader#locateSolrHome
*/
@Deprecated
public CoreContainer() {
solrHome = SolrResourceLoader.locateSolrHome();
this(SolrResourceLoader.locateSolrHome());
}
/**
@ -138,6 +144,7 @@ public class CoreContainer
*/
public CoreContainer(String dir, File configFile) throws ParserConfigurationException, IOException, SAXException
{
this(dir);
this.load(dir, configFile);
}
@ -146,8 +153,8 @@ public class CoreContainer
* @param loader the CoreContainer resource loader
*/
public CoreContainer(SolrResourceLoader loader) {
this(loader.getInstanceDir());
this.loader = loader;
this.solrHome = loader.getInstanceDir();
}
public CoreContainer(String solrHome) {
@ -287,7 +294,7 @@ public class CoreContainer
File fconf = new File(solrHome, containerConfigFilename == null ? "solr.xml"
: containerConfigFilename);
log.info("looking for solr.xml: " + fconf.getAbsolutePath());
cores = new CoreContainer();
cores = new CoreContainer(solrHome);
if (fconf.exists()) {
cores.load(solrHome, fconf);
@ -355,6 +362,13 @@ public class CoreContainer
*/
public void load(String dir, InputSource cfgis)
throws ParserConfigurationException, IOException, SAXException {
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();
@ -675,7 +689,8 @@ public class CoreContainer
idir = new File(solrHome, dcore.getInstanceDir());
}
String instanceDir = idir.getPath();
log.info("Creating SolrCore '{}' using instanceDir: {}",
dcore.getName(), instanceDir);
// Initialize the solr config
SolrResourceLoader solrLoader = null;
@ -832,6 +847,9 @@ public class CoreContainer
instanceDir = new File(getSolrHome(), cd.getInstanceDir());
}
log.info("Reloading SolrCore '{}' using instanceDir: {}",
cd.getName(), instanceDir.getAbsolutePath());
SolrResourceLoader solrLoader;
if(zkController == null) {
solrLoader = new SolrResourceLoader(instanceDir.getAbsolutePath(), libLoader, getCoreProps(instanceDir.getAbsolutePath(), cd.getPropertiesName(),cd.getCoreProperties()));
@ -956,7 +974,8 @@ public class CoreContainer
* @return a CoreAdminHandler
*/
protected CoreAdminHandler createMultiCoreHandler(final String adminHandlerClass) {
SolrResourceLoader loader = new SolrResourceLoader(null, libLoader, null);
// :TODO: why create a new SolrResourceLoader? why not use this.loader ???
SolrResourceLoader loader = new SolrResourceLoader(solrHome, libLoader, null);
Object obj = loader.newAdminHandlerInstance(CoreContainer.this, adminHandlerClass);
if ( !(obj instanceof CoreAdminHandler))
{

View File

@ -88,17 +88,22 @@ public class SolrResourceLoader implements ResourceLoader
* This loader will delegate to the context classloader when possible,
* otherwise it will attempt to resolve resources using any jar files
* found in the "lib/" directory in the specified instance directory.
* If the instance directory is not specified (=null), SolrResourceLoader#locateInstanceDir will provide one.
* <p>
* </p>
*
* @param instanceDir - base directory for this resource loader, if null locateSolrHome() will be used.
* @see #locateSolrHome
*/
public SolrResourceLoader( String instanceDir, ClassLoader parent, Properties coreProperties )
{
if( instanceDir == null ) {
this.instanceDir = SolrResourceLoader.locateSolrHome();
log.info("new SolrResourceLoader for deduced Solr Home: '{}'",
this.instanceDir);
} else{
this.instanceDir = normalizeDir(instanceDir);
log.info("new SolrResourceLoader for directory: '{}'",
this.instanceDir);
}
log.info("Solr home set to '" + this.instanceDir + "'");
this.classLoader = createClassLoader(null, parent);
addToClassLoader("./lib/", null);
@ -607,6 +612,7 @@ public class SolrResourceLoader implements ResourceLoader
* @see #normalizeDir(String)
*/
public static String locateSolrHome() {
String home = null;
// Try JNDI
try {