Package org.apache.solr.core
Class CachingDirectoryFactory
- java.lang.Object
-
- org.apache.solr.core.DirectoryFactory
-
- org.apache.solr.core.CachingDirectoryFactory
-
- All Implemented Interfaces:
Closeable,AutoCloseable,NamedListInitializedPlugin
- Direct Known Subclasses:
EphemeralDirectoryFactory,StandardDirectoryFactory
public abstract class CachingDirectoryFactory extends DirectoryFactory
ADirectoryFactoryimpl base class for caching Directory instances per path. Most DirectoryFactory implementations will want to extend this class and simply implementDirectoryFactory.create(String, LockFactory, DirContext).This is an expert class and these API's are subject to change.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static classCachingDirectoryFactory.CacheValuestatic interfaceCachingDirectoryFactory.CloseListener-
Nested classes/interfaces inherited from class org.apache.solr.core.DirectoryFactory
DirectoryFactory.DirContext
-
-
Field Summary
Fields Modifier and Type Field Description protected Map<org.apache.lucene.store.Directory,CachingDirectoryFactory.CacheValue>byDirectoryCacheprotected Map<String,CachingDirectoryFactory.CacheValue>byPathCacheprotected Map<org.apache.lucene.store.Directory,List<CachingDirectoryFactory.CloseListener>>closeListenersprotected Set<CachingDirectoryFactory.CacheValue>removeEntries-
Fields inherited from class org.apache.solr.core.DirectoryFactory
coreContainer, dataHomePath, INDEX_W_TIMESTAMP_REGEX, IOCONTEXT_NO_CACHE, LOCK_TYPE_NATIVE, LOCK_TYPE_NONE, LOCK_TYPE_SIMPLE, LOCK_TYPE_SINGLE
-
-
Constructor Summary
Constructors Constructor Description CachingDirectoryFactory()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddCloseListener(org.apache.lucene.store.Directory dir, CachingDirectoryFactory.CloseListener closeListener)Adds a close listener for a Directory.voidclose()Close the this and all of the Directories it contains.protected booleandeleteOldIndexDirectory(String oldDirPath)voiddoneWithDirectory(org.apache.lucene.store.Directory directory)Indicates a Directory will no longer be used, and when its ref count hits 0, it can be closed.booleanexists(String path)Returns true if a Directory exists for a given path in the underlying (stable) storage and contains at least one file.org.apache.lucene.store.Directoryget(String path, DirectoryFactory.DirContext dirContext, String rawLockType)Returns the Directory for a given path, using the specified rawLockType.Set<String>getLivePaths()Method for inspecting the cacheprotected StringgetPath(org.apache.lucene.store.Directory directory)voidincRef(org.apache.lucene.store.Directory directory)Increment the number of references to the given Directory.voidinit(org.apache.solr.common.util.NamedList<?> args)initwill be called just once, immediately after creation.Stringnormalize(String path)Normalize a given path.voidrelease(org.apache.lucene.store.Directory directory)Releases the Directory so that it may be closed when it is no longer referenced.voidremove(String path)This remove is special in that it may be called even after the factory has been closed.voidremove(String path, boolean deleteAfterCoreClose)This remove is special in that it may be called even after the factory has been closed.voidremove(org.apache.lucene.store.Directory dir)Removes the Directory's persistent storage.voidremove(org.apache.lucene.store.Directory dir, boolean deleteAfterCoreClose)Removes the Directory's persistent storage.protected voidremoveDirectory(CachingDirectoryFactory.CacheValue cacheValue)protected StringstripTrailingSlash(String path)-
Methods inherited from class org.apache.solr.core.DirectoryFactory
cleanupOldIndexDirectories, create, createLockFactory, empty, getBaseDir, getDataHome, initCoreContainer, isAbsolute, isPersistent, isSharedStorage, move, newDefaultUpdateLog, renameWithOverwrite, searchersReserveCommitPoints, size, size, sizeOf, sizeOfDirectory
-
-
-
-
Field Detail
-
byPathCache
protected Map<String,CachingDirectoryFactory.CacheValue> byPathCache
-
byDirectoryCache
protected Map<org.apache.lucene.store.Directory,CachingDirectoryFactory.CacheValue> byDirectoryCache
-
closeListeners
protected Map<org.apache.lucene.store.Directory,List<CachingDirectoryFactory.CloseListener>> closeListeners
-
removeEntries
protected Set<CachingDirectoryFactory.CacheValue> removeEntries
-
-
Method Detail
-
addCloseListener
public void addCloseListener(org.apache.lucene.store.Directory dir, CachingDirectoryFactory.CloseListener closeListener)Description copied from class:DirectoryFactoryAdds a close listener for a Directory.- Specified by:
addCloseListenerin classDirectoryFactory
-
doneWithDirectory
public void doneWithDirectory(org.apache.lucene.store.Directory directory) throws IOExceptionDescription copied from class:DirectoryFactoryIndicates a Directory will no longer be used, and when its ref count hits 0, it can be closed. On close all directories will be closed whether this has been called or not. This is simply to allow early cleanup.- Specified by:
doneWithDirectoryin classDirectoryFactory- Throws:
IOException- If there is a low-level I/O error.
-
close
public void close() throws IOExceptionDescription copied from class:DirectoryFactoryClose the this and all of the Directories it contains.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Specified by:
closein classDirectoryFactory- Throws:
IOException- If there is a low-level I/O error.
-
exists
public boolean exists(String path) throws IOException
Description copied from class:DirectoryFactoryReturns true if a Directory exists for a given path in the underlying (stable) storage and contains at least one file. Note that the existence of aDirectoryObject as returned by a previous call to theDirectoryFactory.get(java.lang.String, org.apache.solr.core.DirectoryFactory.DirContext, java.lang.String)method (on the specifiedpath) is not enough to cause this method to return true. Some prior user of that Directory must have written & synced at least one file to that Directory (and at least one file must still exist)- Specified by:
existsin classDirectoryFactory- Throws:
IOException- If there is a low-level I/O error.
-
get
public final org.apache.lucene.store.Directory get(String path, DirectoryFactory.DirContext dirContext, String rawLockType) throws IOException
Description copied from class:DirectoryFactoryReturns the Directory for a given path, using the specified rawLockType. Will return the same Directory instance for the same path.- Specified by:
getin classDirectoryFactory- Throws:
IOException- If there is a low-level I/O error.
-
incRef
public void incRef(org.apache.lucene.store.Directory directory)
Description copied from class:DirectoryFactoryIncrement the number of references to the given Directory. You must call release for every call to this method.- Specified by:
incRefin classDirectoryFactory
-
init
public void init(org.apache.solr.common.util.NamedList<?> args)
Description copied from interface:NamedListInitializedPlugininitwill be called just once, immediately after creation.Source of the initialization arguments will typically be solrconfig.xml, but will ultimately depends on the plugin itself
- Parameters:
args- non-null list of initialization parameters (may be empty)
-
release
public void release(org.apache.lucene.store.Directory directory) throws IOExceptionDescription copied from class:DirectoryFactoryReleases the Directory so that it may be closed when it is no longer referenced.- Specified by:
releasein classDirectoryFactory- Throws:
IOException- If there is a low-level I/O error.
-
remove
public void remove(String path) throws IOException
Description copied from class:DirectoryFactoryThis remove is special in that it may be called even after the factory has been closed. Remove only makes sense for persistent directory factories.- Specified by:
removein classDirectoryFactory- Parameters:
path- to remove- Throws:
IOException- If there is a low-level I/O error.
-
remove
public void remove(org.apache.lucene.store.Directory dir) throws IOExceptionDescription copied from class:DirectoryFactoryRemoves the Directory's persistent storage. For example: A file system impl may remove the on disk directory.- Specified by:
removein classDirectoryFactory- Throws:
IOException- If there is a low-level I/O error.
-
remove
public void remove(String path, boolean deleteAfterCoreClose) throws IOException
Description copied from class:DirectoryFactoryThis remove is special in that it may be called even after the factory has been closed. Remove only makes sense for persistent directory factories.- Specified by:
removein classDirectoryFactory- Parameters:
path- to removedeleteAfterCoreClose- whether to wait until after the core is closed.- Throws:
IOException- If there is a low-level I/O error.
-
remove
public void remove(org.apache.lucene.store.Directory dir, boolean deleteAfterCoreClose) throws IOExceptionDescription copied from class:DirectoryFactoryRemoves the Directory's persistent storage. For example: A file system impl may remove the on disk directory.- Specified by:
removein classDirectoryFactory- Throws:
IOException- If there is a low-level I/O error.
-
removeDirectory
protected void removeDirectory(CachingDirectoryFactory.CacheValue cacheValue) throws IOException
- Throws:
IOException
-
normalize
public String normalize(String path) throws IOException
Description copied from class:DirectoryFactoryNormalize a given path.- Overrides:
normalizein classDirectoryFactory- Parameters:
path- to normalize- Returns:
- normalized path
- Throws:
IOException- on io error
-
getLivePaths
public Set<String> getLivePaths()
Method for inspecting the cache- Returns:
- paths in the cache which have not been marked "done"
- See Also:
doneWithDirectory(org.apache.lucene.store.Directory)
-
deleteOldIndexDirectory
protected boolean deleteOldIndexDirectory(String oldDirPath) throws IOException
- Overrides:
deleteOldIndexDirectoryin classDirectoryFactory- Throws:
IOException
-
getPath
protected String getPath(org.apache.lucene.store.Directory directory)
-
-