hi,
Looks like a bug. open an issue.

On Wed, Oct 28, 2009 at 4:04 AM, Jeremy Hinegardner
<jer...@hinegardner.org> wrote:
> 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
>
>



-- 
-----------------------------------------------------
Noble Paul | Principal Engineer| AOL | http://aol.com

Reply via email to