Package org.apache.solr.core
Class TransientSolrCoreCache
- java.lang.Object
-
- org.apache.solr.core.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 Summary
Constructors Constructor Description TransientSolrCoreCache()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract SolrCore
addCore(String name, SolrCore core)
abstract void
addTransientDescriptor(String rawName, CoreDescriptor cd)
void
close()
Must be called in order to free resources!abstract boolean
containsCore(String name)
abstract Set<String>
getAllCoreNames()
abstract CoreContainer
getContainer()
abstract SolrCore
getCore(String name)
abstract Set<String>
getLoadedCoreNames()
List<String>
getNamesForCore(SolrCore core)
abstract int
getStatus(String coreName)
abstract CoreDescriptor
getTransientDescriptor(String name)
abstract Collection<SolrCore>
prepareForShutdown()
abstract SolrCore
removeCore(String name)
abstract CoreDescriptor
removeTransientDescriptor(String name)
abstract void
setStatus(String coreName, int status)
-
-
-
Method Detail
-
getContainer
public abstract CoreContainer getContainer()
-
containsCore
public abstract boolean containsCore(String name)
-
prepareForShutdown
public abstract Collection<SolrCore> prepareForShutdown()
-
addTransientDescriptor
public abstract void addTransientDescriptor(String rawName, CoreDescriptor cd)
-
getTransientDescriptor
public abstract CoreDescriptor getTransientDescriptor(String name)
-
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)
-
-