And, re-examining the URL, this is clearly my fault for improper use of
SolrJ.  Please ignore.


danben wrote:
> 
> Hi,
> 
> I'm developing an application that requires a large number of cores, and
> since lazy loading / LRU caching won't be available until 1.5, I decided
> to modify CoreContainer to hold me over.
> 
> Another requirement is that multiple Solr instances can access the same
> cores (on NAS, for instance), so the approach I'm using is to maintain a
> local registry / load balancer that assigns "active" cores to different
> machines and, when a machine has exceeded its limit, unload cores in LRU
> order.
> 
> The modifications to CoreContainer are as follows:  to avoid having to
> issue "create" requests every time we need to load an inactive core,
> getCore will attempt to create/open any core that it doesn't find in the
> cores map, unless name is "" or "admin", in which case it returns null as
> per the original implementation.  The create function is overloaded to
> take a core name and creates a CoreDescriptor using some defaults added to
> solr.xml.
> 
> Everything works fine until I try to make a core unload request, at which
> point I see the following:
> org.apache.solr.common.SolrException: Not Found
> 
> Not Found
> 
> request:
> /solr/NewUser0/admin/cores?action=UNLOAD&core=NewUser0&wt=javabin&version=2.2
>       at
> org.apache.solr.client.solrj.impl.CommonsHttpSolrServer.request(CommonsHttpSolrServer.java:343)
> 
> So, my guess is that my modifications are keeping admin cores from being
> created properly.  Or maybe I don't know what I'm talking about.  I
> stepped through execution with a debugger and watched it bounce around
> SolrDispatchHandler.doFilter() before giving up and forwarding the request
> to the RequestDispatcher, but all I could tell from that was that it
> wanted something it couldn't find.  Can anyone shed some light on what my
> mods might be keeping Solr from doing that would cause this problem?
> 
> Code pasted below.  And don't mind the weird locking, this happens even
> with a single thread.
> 
> Thanks,
> Dan
> 
>   public SolrCore getCore(String name) {
>       ReentrantReadWriteLock lock = getCoreLock(name);
>       try {
>           lock.readLock().lock();
>           SolrCore core = cores.get(name);
>           if (core != null) {
>               core.open();  // increment the ref count while still
> synchronized
>               return core;
>           } else if ("".equals(name) || "admin".equals(name)) {
>               return null;
>           } else {
>               try {
>                   lock.readLock().unlock();
>                   lock.writeLock().lock();
>                   SolrCore core1 = cores.get(name);
>                   if (core1 != null) {
>                       return core1;
>                   }
>                   log.info("Autocreating core: '" + name + "'");
>                   core = create(name);
>                   cores.put(name, core);
>                   core.open();
>                   return core;
>               } catch (IOException e) {
>                   log.error("Autocreating core '" + name + "'", e);
>                   return null;
>               } catch (ParserConfigurationException e) {
>                   log.error("Autocreating core '" + name + "'", e);
>                   return null;
>               } catch (SAXException e) {
>                   log.error("Autocreating core '" + name + "'", e);
>                   return null;
>               } finally {
>                   lock.readLock().lock();
>                   lock.writeLock().unlock();
>               }
>           }
>       } finally {
>           lock.readLock().unlock();
>       }
>   }
> 
>   public SolrCore create(String coreName) throws IOException,
> ParserConfigurationException, SAXException {
>       if (defaultConfigFile == null || defaultSchemaFile == null) {
>           throw new RuntimeException("Cannot use autocreate unless both a
> default configuration file and a default schema file are specified");
>       }
>       CoreDescriptor dcore = new CoreDescriptor(this, coreName,
> getInstanceDir(coreName));
>       dcore.setConfigName(defaultConfigFile);
>       dcore.setSchemaName(defaultSchemaFile);
>       return create(dcore);
>   }
> 
> // Eventually this will be overridden to do some intelligent management of
> a directory hierarchy so we //don't have hundreds of thousands of cores in
> the same directory
> public String getInstanceDir(String coreName) {
>       return coreName;
> }
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Problem-After-Modifying-CoreContainer-tp24762199p24763149.html
Sent from the Solr - User mailing list archive at Nabble.com.

Reply via email to