Class NativeUnixDirectory
- All Implemented Interfaces:
Closeable,AutoCloseable
Directory implementation for all Unixes that uses
DIRECT I/O to bypass OS level IO caching during
merging. For all other cases (searching, writing) we delegate
to the provided Directory instance.
See Overview for more details.
To use this you must compile
NativePosixUtil.cpp (exposes Linux-specific APIs through
JNI) for your platform, by running ant
build-native-unix, and then putting the resulting
libNativePosixUtil.so (from
lucene/build/native) onto your dynamic
linker search path.
WARNING: this code is very new and quite easily
could contain horrible bugs. For example, here's one
known issue: if you use seek in IndexOutput, and then
write more than one buffer's worth of bytes, then the
file will be wrong. Lucene does not do this today (only writes
small number of bytes after seek), but that may change.
This directory passes Solr and Lucene tests on Linux and OS X; other Unixes should work but have not been tested! Use at your own risk.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final classprivate static final classNested classes/interfaces inherited from class org.apache.lucene.store.FSDirectory
FSDirectory.FSIndexOutput -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final longprivate static final longstatic final intDefault buffer size before writing to disk (256 KB); larger means less IO load but more RAM and direct buffer storage space consumed during merging.static final longDefault min expected merge size before direct IO is used (10 MB):private final Directoryprivate final intprivate final longFields inherited from class org.apache.lucene.store.FSDirectory
directoryFields inherited from class org.apache.lucene.store.BaseDirectory
isOpen, lockFactory -
Constructor Summary
ConstructorsConstructorDescriptionNativeUnixDirectory(Path path, int mergeBufferSize, long minBytesDirect, LockFactory lockFactory, Directory delegate) Create a new NIOFSDirectory for the named location.NativeUnixDirectory(Path path, Directory delegate) Create a new NIOFSDirectory for the named location withFSLockFactory.getDefault().NativeUnixDirectory(Path path, LockFactory lockFactory, Directory delegate) Create a new NIOFSDirectory for the named location. -
Method Summary
Modifier and TypeMethodDescriptioncreateOutput(String name, IOContext context) Creates a new, empty file in the directory and returns anIndexOutputinstance for appending data to this file.Opens a stream for reading an existing file.Methods inherited from class org.apache.lucene.store.FSDirectory
close, createTempOutput, deleteFile, deletePendingFiles, ensureCanRead, fileLength, fsync, getDirectory, getPendingDeletions, listAll, listAll, open, open, rename, sync, syncMetaData, toStringMethods inherited from class org.apache.lucene.store.BaseDirectory
ensureOpen, obtainLockMethods inherited from class org.apache.lucene.store.Directory
copyFrom, getTempFileName, openChecksumInput
-
Field Details
-
ALIGN
private static final long ALIGN- See Also:
-
ALIGN_NOT_MASK
private static final long ALIGN_NOT_MASK- See Also:
-
DEFAULT_MERGE_BUFFER_SIZE
public static final int DEFAULT_MERGE_BUFFER_SIZEDefault buffer size before writing to disk (256 KB); larger means less IO load but more RAM and direct buffer storage space consumed during merging.- See Also:
-
DEFAULT_MIN_BYTES_DIRECT
public static final long DEFAULT_MIN_BYTES_DIRECTDefault min expected merge size before direct IO is used (10 MB):- See Also:
-
mergeBufferSize
private final int mergeBufferSize -
minBytesDirect
private final long minBytesDirect -
delegate
-
-
Constructor Details
-
NativeUnixDirectory
public NativeUnixDirectory(Path path, int mergeBufferSize, long minBytesDirect, LockFactory lockFactory, Directory delegate) throws IOException Create a new NIOFSDirectory for the named location.- Parameters:
path- the path of the directorymergeBufferSize- Size of buffer to use for merging. SeeDEFAULT_MERGE_BUFFER_SIZE.minBytesDirect- Merges, or files to be opened for reading, smaller than this will not use direct IO. SeeDEFAULT_MIN_BYTES_DIRECTlockFactory- to usedelegate- fallback Directory for non-merges- Throws:
IOException- If there is a low-level I/O error
-
NativeUnixDirectory
public NativeUnixDirectory(Path path, LockFactory lockFactory, Directory delegate) throws IOException Create a new NIOFSDirectory for the named location.- Parameters:
path- the path of the directorylockFactory- the lock factory to usedelegate- fallback Directory for non-merges- Throws:
IOException- If there is a low-level I/O error
-
NativeUnixDirectory
Create a new NIOFSDirectory for the named location withFSLockFactory.getDefault().- Parameters:
path- the path of the directorydelegate- fallback Directory for non-merges- Throws:
IOException- If there is a low-level I/O error
-
-
Method Details
-
openInput
Description copied from class:DirectoryOpens a stream for reading an existing file. This method must throw eitherNoSuchFileExceptionorFileNotFoundExceptionifnamepoints to a non-existing file.- Specified by:
openInputin classDirectory- Parameters:
name- the name of an existing file.- Throws:
IOException- in case of I/O error
-
createOutput
Description copied from class:DirectoryCreates a new, empty file in the directory and returns anIndexOutputinstance for appending data to this file. This method must throwFileAlreadyExistsExceptionif the file already exists.- Overrides:
createOutputin classFSDirectory- Parameters:
name- the name of the file to create.- Throws:
IOException- in case of I/O error
-