Package org.apache.solr.core
Class DirectoryFactory
- java.lang.Object
-
- org.apache.solr.core.DirectoryFactory
-
- All Implemented Interfaces:
Closeable
,AutoCloseable
,NamedListInitializedPlugin
- Direct Known Subclasses:
CachingDirectoryFactory
public abstract class DirectoryFactory extends Object implements NamedListInitializedPlugin, Closeable
Provides access to a Directory implementation. You must release every Directory that you get.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
DirectoryFactory.DirContext
-
Field Summary
Fields Modifier and Type Field Description protected CoreContainer
coreContainer
protected Path
dataHomePath
protected static String
INDEX_W_TIMESTAMP_REGEX
static org.apache.lucene.store.IOContext
IOCONTEXT_NO_CACHE
static String
LOCK_TYPE_NATIVE
static String
LOCK_TYPE_NONE
static String
LOCK_TYPE_SIMPLE
static String
LOCK_TYPE_SINGLE
-
Constructor Summary
Constructors Constructor Description DirectoryFactory()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract void
addCloseListener(org.apache.lucene.store.Directory dir, CachingDirectoryFactory.CloseListener closeListener)
Adds a close listener for a Directory.void
cleanupOldIndexDirectories(String dataDirPath, String currentIndexDirPath, boolean afterCoreReload)
abstract void
close()
Close this factory and all of the Directories it contains.protected abstract org.apache.lucene.store.Directory
create(String path, org.apache.lucene.store.LockFactory lockFactory, DirectoryFactory.DirContext dirContext)
Creates a new Directory for a given path.protected abstract org.apache.lucene.store.LockFactory
createLockFactory(String rawLockType)
Creates a new LockFactory for a given path.protected boolean
deleteOldIndexDirectory(String oldDirPath)
abstract 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.static boolean
empty(org.apache.lucene.store.Directory dir)
Delete the files in the Directoryabstract 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.abstract org.apache.lucene.store.Directory
get(String path, DirectoryFactory.DirContext dirContext, String rawLockType)
Returns the Directory for a given path, using the specified rawLockType.protected org.apache.lucene.store.Directory
getBaseDir(org.apache.lucene.store.Directory dir)
String
getDataHome(CoreDescriptor cd)
Get the data home folder.abstract void
incRef(org.apache.lucene.store.Directory directory)
Increment the number of references to the given Directory.void
initCoreContainer(CoreContainer cc)
boolean
isAbsolute(String path)
abstract boolean
isPersistent()
boolean
isSharedStorage()
void
move(org.apache.lucene.store.Directory fromDir, org.apache.lucene.store.Directory toDir, String fileName, org.apache.lucene.store.IOContext ioContext)
Override for more efficient moves.UpdateLog
newDefaultUpdateLog()
Returns a default Update Log instance.String
normalize(String path)
Normalize a given path.abstract void
release(org.apache.lucene.store.Directory directory)
Releases the Directory so that it may be closed when it is no longer referenced.abstract void
remove(String path)
This remove is special in that it may be called even after the factory has been closed.abstract void
remove(String path, boolean afterCoreClose)
This remove is special in that it may be called even after the factory has been closed.abstract void
remove(org.apache.lucene.store.Directory dir)
Removes the Directory's persistent storage.abstract void
remove(org.apache.lucene.store.Directory dir, boolean afterCoreClose)
Removes the Directory's persistent storage.void
renameWithOverwrite(org.apache.lucene.store.Directory dir, String fileName, String toName)
boolean
searchersReserveCommitPoints()
If your implementation can count on delete-on-last-close semantics or throws an exception when trying to remove a file in use, return false (eg NFS).long
size(String path)
long
size(org.apache.lucene.store.Directory directory)
static long
sizeOf(org.apache.lucene.store.Directory directory, String file)
static long
sizeOfDirectory(org.apache.lucene.store.Directory directory)
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.solr.util.plugin.NamedListInitializedPlugin
init
-
-
-
-
Field Detail
-
IOCONTEXT_NO_CACHE
public static final org.apache.lucene.store.IOContext IOCONTEXT_NO_CACHE
-
INDEX_W_TIMESTAMP_REGEX
protected static final String INDEX_W_TIMESTAMP_REGEX
- See Also:
- Constant Field Values
-
dataHomePath
protected Path dataHomePath
-
LOCK_TYPE_SIMPLE
public static final String LOCK_TYPE_SIMPLE
- See Also:
- Constant Field Values
-
LOCK_TYPE_NATIVE
public static final String LOCK_TYPE_NATIVE
- See Also:
- Constant Field Values
-
LOCK_TYPE_SINGLE
public static final String LOCK_TYPE_SINGLE
- See Also:
- Constant Field Values
-
LOCK_TYPE_NONE
public static final String LOCK_TYPE_NONE
- See Also:
- Constant Field Values
-
coreContainer
protected volatile CoreContainer coreContainer
-
-
Method Detail
-
doneWithDirectory
public abstract void doneWithDirectory(org.apache.lucene.store.Directory directory) throws IOException
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.- Throws:
IOException
- If there is a low-level I/O error.
-
addCloseListener
public abstract void addCloseListener(org.apache.lucene.store.Directory dir, CachingDirectoryFactory.CloseListener closeListener)
Adds a close listener for a Directory.
-
close
public abstract void close() throws IOException
Close this factory and all of the Directories it contains.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Throws:
IOException
- If there is a low-level I/O error.
-
create
protected abstract org.apache.lucene.store.Directory create(String path, org.apache.lucene.store.LockFactory lockFactory, DirectoryFactory.DirContext dirContext) throws IOException
Creates a new Directory for a given path.- Throws:
IOException
- If there is a low-level I/O error.
-
createLockFactory
protected abstract org.apache.lucene.store.LockFactory createLockFactory(String rawLockType) throws IOException
Creates a new LockFactory for a given path.- Parameters:
rawLockType
- A string value as passed in config. Every factory should at least support 'none' to disable locking.- Throws:
IOException
- If there is a low-level I/O error.
-
exists
public abstract boolean exists(String path) throws IOException
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 theget(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)- Throws:
IOException
- If there is a low-level I/O error.
-
remove
public abstract void remove(org.apache.lucene.store.Directory dir) throws IOException
Removes the Directory's persistent storage. For example: A file system impl may remove the on disk directory.- Throws:
IOException
- If there is a low-level I/O error.
-
remove
public abstract void remove(org.apache.lucene.store.Directory dir, boolean afterCoreClose) throws IOException
Removes the Directory's persistent storage. For example: A file system impl may remove the on disk directory.- Throws:
IOException
- If there is a low-level I/O error.
-
remove
public abstract void remove(String path, boolean afterCoreClose) throws IOException
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.- Parameters:
path
- to removeafterCoreClose
- whether to wait until after the core is closed.- Throws:
IOException
- If there is a low-level I/O error.
-
remove
public abstract void remove(String path) throws IOException
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.- Parameters:
path
- to remove- Throws:
IOException
- If there is a low-level I/O error.
-
size
public long size(org.apache.lucene.store.Directory directory) throws IOException
- Parameters:
directory
- to calculate size of- Returns:
- size in bytes
- Throws:
IOException
- on low level IO error
-
size
public long size(String path) throws IOException
- Parameters:
path
- to calculate size of- Returns:
- size in bytes
- Throws:
IOException
- on low level IO error
-
move
public void move(org.apache.lucene.store.Directory fromDir, org.apache.lucene.store.Directory toDir, String fileName, org.apache.lucene.store.IOContext ioContext) throws IOException
Override for more efficient moves.Intended for use with replication - use carefully - some Directory wrappers will cache files for example.
- Throws:
IOException
- If there is a low-level I/O error.
-
renameWithOverwrite
public void renameWithOverwrite(org.apache.lucene.store.Directory dir, String fileName, String toName) throws IOException
- Throws:
IOException
-
get
public abstract org.apache.lucene.store.Directory get(String path, DirectoryFactory.DirContext dirContext, String rawLockType) throws IOException
Returns the Directory for a given path, using the specified rawLockType. Will return the same Directory instance for the same path.- Throws:
IOException
- If there is a low-level I/O error.
-
incRef
public abstract void incRef(org.apache.lucene.store.Directory directory)
Increment the number of references to the given Directory. You must call release for every call to this method.
-
isPersistent
public abstract boolean isPersistent()
- Returns:
- true if data is kept after close.
-
isSharedStorage
public boolean isSharedStorage()
- Returns:
- true if storage is shared.
-
release
public abstract void release(org.apache.lucene.store.Directory directory) throws IOException
Releases the Directory so that it may be closed when it is no longer referenced.- Throws:
IOException
- If there is a low-level I/O error.
-
normalize
public String normalize(String path) throws IOException
Normalize a given path.- Parameters:
path
- to normalize- Returns:
- normalized path
- Throws:
IOException
- on io error
-
isAbsolute
public boolean isAbsolute(String path)
- Parameters:
path
- the path to check- Returns:
- true if absolute, as in not relative
-
sizeOfDirectory
public static long sizeOfDirectory(org.apache.lucene.store.Directory directory) throws IOException
- Throws:
IOException
-
sizeOf
public static long sizeOf(org.apache.lucene.store.Directory directory, String file) throws IOException
- Throws:
IOException
-
empty
public static boolean empty(org.apache.lucene.store.Directory dir)
Delete the files in the Directory
-
searchersReserveCommitPoints
public boolean searchersReserveCommitPoints()
If your implementation can count on delete-on-last-close semantics or throws an exception when trying to remove a file in use, return false (eg NFS). Otherwise, return true. Defaults to returning false.- Returns:
- true if factory impl requires that Searcher's explicitly reserve commit points.
-
getDataHome
public String getDataHome(CoreDescriptor cd) throws IOException
Get the data home folder. If solr.data.home is set, that is used, else base on instanceDir- Parameters:
cd
- core descriptor instance- Returns:
- a String with absolute path to data directory
- Throws:
IOException
-
cleanupOldIndexDirectories
public void cleanupOldIndexDirectories(String dataDirPath, String currentIndexDirPath, boolean afterCoreReload)
-
deleteOldIndexDirectory
protected boolean deleteOldIndexDirectory(String oldDirPath) throws IOException
- Throws:
IOException
-
initCoreContainer
public void initCoreContainer(CoreContainer cc)
-
getBaseDir
protected org.apache.lucene.store.Directory getBaseDir(org.apache.lucene.store.Directory dir)
-
newDefaultUpdateLog
public UpdateLog newDefaultUpdateLog()
Returns a default Update Log instance. UpdateHandler will invoke this method if the solrconfig / plugin info does not specify any ulog class.
-
-