Hi all, I was trying to use the new 'shareSchema=true' feature in solr 1.4 and it appears as though this will only happen in one configuration. I'd like someone to confirm this for me and then we can file a bug on it.
This all happens in CoreContainer.create(). When you have shareSchema=true in solr.xml then an instance variable indexSchemaCache is created in the CoreContainer instance. This snippet is from CoreContainer.create if (indexSchemaCache != null){ //schema sharing is enabled. so check if it already is loaded [1] File schemFile = new File(solrLoader.getInstanceDir() + "conf" + File.separator + dcore.getSchemaName()); if(schemFile. exists()){ [2] String key = schemFile.getAbsolutePath()+":"+new SimpleDateFormat("yyyyMMddhhmmss").format(new Date(schemFile.lastModified())); schema = indexSchemaCache.get(key); if(schema == null){ log.info("creating new schema object for core: " + dcore.name); schema = new IndexSchema(config, dcore.getSchemaName(), null); indexSchemaCache.put(key,schema); } else { log.info("re-using schema object for core: " + dcore.name); } } } if(schema == null){ schema = new IndexSchema(config, dcore.getSchemaName(), null); } A couple of points: [1] dcore.getSchemaName() is the value that is in the 'schema' <core /> element in the solr.xml. This means that the this MUST be relative to the core-instance-dir/conf directory. Putting an absolute path in the xml means that schemFile.exists() will always return false. That is, if I put in <core name="core0" schema="/opt/search/solr/conf/multicore-common-schema.xml" /> then schemFile will have a path of: /path/to/core0/instanceDir/conf/opt/search/solr/conf/multicore-common-schema.xml Which never exists. [2] If you do use a relative path to the schema.xml file, then the key will always be unique, since each schemFile is relative to a core's instanceDir, the core name is in the path and schemFile.getAbsolutePathe() will always be unique for every core. The result of this is, if I wanted to use shareSchema, it looks like the only way for that to happen, is if two cores are using the same instanceDir but different dataDir. I tried a test with this solr.xml in the example multicore configurae, and this appears to be the only way to reuse the schema instance, and to me this has a bit of a smell: <solr persistent="false"> <cores adminPath="/admin/cores" shareSchema="true" > <core name="core0" instanceDir="mcore" schema="schema-common.xml" dataDir="core0/data" /> <core name="core1" instanceDir="mcore" schema="schema-common.xml" dataDir="core1/data" /> </cores> </solr> In my initial playing with this feature, I assumed that just putting in the full path to a common schema.xml file would do the trick. That is evidently not the way it works. What is the way that shareSchema=true is supposed to work? enjoy, -jeremy -- ======================================================================== Jeremy Hinegardner jer...@hinegardner.org