org.apache.lucene.store
Class NativeUnixDirectory

java.lang.Object
  extended by org.apache.lucene.store.Directory
      extended by org.apache.lucene.store.FSDirectory
          extended by org.apache.lucene.store.NativeUnixDirectory
All Implemented Interfaces:
Closeable

public class NativeUnixDirectory
extends FSDirectory

A 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.

WARNING: This API is experimental and might change in incompatible ways in the next release.

Nested Class Summary
 
Nested classes/interfaces inherited from class org.apache.lucene.store.FSDirectory
FSDirectory.FSIndexInput, FSDirectory.FSIndexOutput
 
Nested classes/interfaces inherited from class org.apache.lucene.store.Directory
Directory.IndexInputSlicer
 
Field Summary
static int DEFAULT_MERGE_BUFFER_SIZE
          Default 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 long DEFAULT_MIN_BYTES_DIRECT
          Default min expected merge size before direct IO is used (10 MB):
 
Fields inherited from class org.apache.lucene.store.FSDirectory
DEFAULT_READ_CHUNK_SIZE, directory, staleFiles
 
Fields inherited from class org.apache.lucene.store.Directory
isOpen, lockFactory
 
Constructor Summary
NativeUnixDirectory(File path, Directory delegate)
          Create a new NIOFSDirectory for the named location.
NativeUnixDirectory(File path, int mergeBufferSize, long minBytesDirect, Directory delegate)
          Create a new NIOFSDirectory for the named location.
 
Method Summary
 IndexOutput createOutput(String name, IOContext context)
           
 IndexInput openInput(String name, IOContext context)
           
 
Methods inherited from class org.apache.lucene.store.FSDirectory
close, deleteFile, ensureCanWrite, fileExists, fileLength, fileModified, fsync, getDirectory, getLockID, getReadChunkSize, listAll, listAll, onIndexOutputClosed, open, open, setLockFactory, setReadChunkSize, sync, toString
 
Methods inherited from class org.apache.lucene.store.Directory
clearLock, copy, createSlicer, ensureOpen, getLockFactory, makeLock
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

DEFAULT_MERGE_BUFFER_SIZE

public static final int DEFAULT_MERGE_BUFFER_SIZE
Default 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:
Constant Field Values

DEFAULT_MIN_BYTES_DIRECT

public static final long DEFAULT_MIN_BYTES_DIRECT
Default min expected merge size before direct IO is used (10 MB):

See Also:
Constant Field Values
Constructor Detail

NativeUnixDirectory

public NativeUnixDirectory(File path,
                           int mergeBufferSize,
                           long minBytesDirect,
                           Directory delegate)
                    throws IOException
Create a new NIOFSDirectory for the named location.

Parameters:
path - the path of the directory
mergeBufferSize - Size of buffer to use for merging. See DEFAULT_MERGE_BUFFER_SIZE.
minBytesDirect - Merges, or files to be opened for reading, smaller than this will not use direct IO. See DEFAULT_MIN_BYTES_DIRECT
delegate - fallback Directory for non-merges
Throws:
IOException - If there is a low-level I/O error

NativeUnixDirectory

public NativeUnixDirectory(File path,
                           Directory delegate)
                    throws IOException
Create a new NIOFSDirectory for the named location.

Parameters:
path - the path of the directory
delegate - fallback Directory for non-merges
Throws:
IOException - If there is a low-level I/O error
Method Detail

openInput

public IndexInput openInput(String name,
                            IOContext context)
                     throws IOException
Specified by:
openInput in class Directory
Throws:
IOException

createOutput

public IndexOutput createOutput(String name,
                                IOContext context)
                         throws IOException
Overrides:
createOutput in class FSDirectory
Throws:
IOException


Copyright © 2000-2013 Apache Software Foundation. All Rights Reserved.