Class TransientSolrCoreCache

  • Direct Known Subclasses:
    TransientSolrCoreCacheDefault

    public abstract class TransientSolrCoreCache
    extends Object
    The base class for custom transient core maintenance. Any custom plugin that want's to take control of transient caches (i.e. any core defined with transient=true) should override this class. Register your plugin in solr.xml similarly to: <transientCoreCacheFactory name="transientCoreCacheFactory" class="TransientSolrCoreCacheFactoryDefault"> <int name="transientCacheSize">4</int> </transientCoreCacheFactory> WARNING: There is quite a bit of higher-level locking done by the CoreContainer to avoid various race conditions etc. You should _only_ manipulate them within the method calls designed to change them. E.g. only add to the transient core descriptors in addTransientDescriptor etc. Trust the higher-level code (mainly SolrCores and CoreContainer) to call the appropriate operations when necessary and to coordinate shutting down cores, manipulating the internal structures and the like.. The only real action you should _initiate_ is to close a core for whatever reason, and do that by calling notifyObservers(coreToClose); The observer will call back to removeCore(name) at the appropriate time. There is no need to directly remove the core _at that time_ from the transientCores list, a call will come back to this class when CoreContainer is closing this core. CoreDescriptors are read-once. During "core discovery" all valid descriptors are enumerated and added to the appropriate list. Thereafter, they are NOT re-read from disk. In those situations where you want to re-define the coreDescriptor, maintain a "side list" of changed core descriptors. Then override getTransientDescriptor to return your new core descriptor. NOTE: assuming you've already closed the core, the _next_ time that core is required getTransientDescriptor will be called and if you return the new core descriptor your re-definition should be honored. You'll have to maintain this list for the duration of this Solr instance running. If you persist the coreDescriptor, then next time Solr starts up the new definition will be read. If you need to manipulate the return, for instance block a core from being loaded for some period of time, override say getTransientDescriptor and return null. In particular, DO NOT reach into the transientCores structure from a method called to manipulate core descriptors or vice-versa.
    • Constructor Detail

      • TransientSolrCoreCache

        public TransientSolrCoreCache()
    • Method Detail

      • getAllCoreNames

        public abstract Set<String> getAllCoreNames()
      • getLoadedCoreNames

        public abstract Set<String> getLoadedCoreNames()
      • containsCore

        public abstract boolean containsCore​(String name)
      • addTransientDescriptor

        public abstract void addTransientDescriptor​(String rawName,
                                                    CoreDescriptor cd)
      • removeTransientDescriptor

        public abstract CoreDescriptor removeTransientDescriptor​(String name)
      • close

        public void close()
        Must be called in order to free resources!
      • getStatus

        public abstract int getStatus​(String coreName)
      • setStatus

        public abstract void setStatus​(String coreName,
                                       int status)