public abstract class TransientSolrCoreCache
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">
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