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
ADirectoryFactory
impl 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 class
CachingDirectoryFactory.CacheValue
static interface
CachingDirectoryFactory.CloseListener
-
Nested classes/interfaces inherited from class org.apache.solr.core.DirectoryFactory
DirectoryFactory.DirContext
-
-
Field Summary
Fields Modifier and Type Field Description protected IdentityHashMap<org.apache.lucene.store.Directory,CachingDirectoryFactory.CacheValue>
byDirectoryCache
protected Map<String,CachingDirectoryFactory.CacheValue>
byPathCache
protected Map<org.apache.lucene.store.Directory,List<CachingDirectoryFactory.CloseListener>>
closeListeners
protected 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 void
addCloseListener(org.apache.lucene.store.Directory dir, CachingDirectoryFactory.CloseListener closeListener)
Adds a close listener for a Directory.void
close()
Close this factory and all of the Directories it contains.protected boolean
deleteOldIndexDirectory(String oldDirPath)
void
doneWithDirectory(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.boolean
exists(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.Directory
get(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 String
getPath(org.apache.lucene.store.Directory directory)
void
incRef(org.apache.lucene.store.Directory directory)
Increment the number of references to the given Directory.void
init(org.apache.solr.common.util.NamedList<?> args)
init
will be called just once, immediately after creation.String
normalize(String path)
Normalize a given path.void
release(org.apache.lucene.store.Directory directory)
Releases the Directory so that it may be closed when it is no longer referenced.void
remove(String path)
This remove is special in that it may be called even after the factory has been closed.void
remove(String path, boolean deleteAfterCoreClose)
This remove is special in that it may be called even after the factory has been closed.void
remove(org.apache.lucene.store.Directory dir)
Removes the Directory's persistent storage.void
remove(org.apache.lucene.store.Directory dir, boolean deleteAfterCoreClose)
Removes the Directory's persistent storage.protected void
removeDirectory(CachingDirectoryFactory.CacheValue cacheValue)
protected String
stripTrailingSlash(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 IdentityHashMap<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:DirectoryFactory
Adds a close listener for a Directory.- Specified by:
addCloseListener
in classDirectoryFactory
-
doneWithDirectory
public void doneWithDirectory(org.apache.lucene.store.Directory directory) throws IOException
Description copied from class:DirectoryFactory
Indicates 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:
doneWithDirectory
in classDirectoryFactory
- Throws:
IOException
- If there is a low-level I/O error.
-
close
public void close() throws IOException
Description copied from class:DirectoryFactory
Close this factory and all of the Directories it contains.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in classDirectoryFactory
- Throws:
IOException
- If there is a low-level I/O error.
-
exists
public boolean exists(String path) throws IOException
Description copied from class:DirectoryFactory
Returns 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 aDirectory
Object 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:
exists
in 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:DirectoryFactory
Returns the Directory for a given path, using the specified rawLockType. Will return the same Directory instance for the same path.- Specified by:
get
in 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:DirectoryFactory
Increment the number of references to the given Directory. You must call release for every call to this method.- Specified by:
incRef
in classDirectoryFactory
-
init
public void init(org.apache.solr.common.util.NamedList<?> args)
Description copied from interface:NamedListInitializedPlugin
init
will 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 IOException
Description copied from class:DirectoryFactory
Releases the Directory so that it may be closed when it is no longer referenced.- Specified by:
release
in classDirectoryFactory
- Throws:
IOException
- If there is a low-level I/O error.
-
remove
public void remove(String path) throws IOException
Description copied from class:DirectoryFactory
This 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:
remove
in 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 IOException
Description copied from class:DirectoryFactory
Removes the Directory's persistent storage. For example: A file system impl may remove the on disk directory.- Specified by:
remove
in 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:DirectoryFactory
This 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:
remove
in 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 IOException
Description copied from class:DirectoryFactory
Removes the Directory's persistent storage. For example: A file system impl may remove the on disk directory.- Specified by:
remove
in 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:DirectoryFactory
Normalize a given path.- Overrides:
normalize
in 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:
deleteOldIndexDirectory
in classDirectoryFactory
- Throws:
IOException
-
getPath
protected String getPath(org.apache.lucene.store.Directory directory)
-
-