org.apache.lucene.store

## Class FileSwitchDirectory

- java.lang.Object
- - org.apache.lucene.store.Directory
  - - org.apache.lucene.store.FileSwitchDirectory

All Implemented Interfaces:
  Closeable, AutoCloseable

    public class FileSwitchDirectory
    extends Directory

Expert: A Directory instance that switches files between two other Directory instances.

Files with the specified extensions are placed in the primary directory; others are placed in the secondary directory. The provided Set must not change once passed to this class, and must allow multiple threads to call contains at once.

Locks with a name having the specified extensions are delegated to the primary directory; others are delegated to the secondary directory. Ideally, both Directory instances should use the same lock factory.

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

### Constructor Summary

Constructors
Constructor and Description
`FileSwitchDirectory(Set<String> primaryExtensions, Directory primaryDir, Directory secondaryDir, boolean doClose)`

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`void` `close()` Closes the directory.
`IndexOutput` `createOutput(String name, IOContext context)` Creates a new, empty file in the directory and returns an `IndexOutput` instance for appending data to this file.
`IndexOutput` `createTempOutput(String prefix, String suffix, IOContext context)` Creates a new, empty, temporary file in the directory and returns an `IndexOutput` instance for appending data to this file.
`void` `deleteFile(String name)` Removes an existing file in the directory.
`long` `fileLength(String name)` Returns the byte length of a file in the directory.
`static String` `getExtension(String name)` Utility method to return a file's extension.
`Set<String>` `getPendingDeletions()` Returns a set of files currently pending deletion in this directory.
`Directory` `getPrimaryDir()` Return the primary directory
`Directory` `getSecondaryDir()` Return the secondary directory
`String[]` `listAll()` Returns names of all files stored in this directory.
`Lock` `obtainLock(String name)` Acquires and returns a `Lock` for a file with the given name.
`IndexInput` `openInput(String name, IOContext context)` Opens a stream for reading an existing file.
`void` `rename(String source, String dest)` Renames `source` file to `dest` file where `dest` must not already exist in the directory.
`void` `sync(Collection<String> names)` Ensures that any writes to these files are moved to stable storage (made durable).
`void` `syncMetaData()` Ensures that directory metadata, such as recent file renames, are moved to stable storage.

### Methods inherited from class org.apache.lucene.store.Directory

`copyFrom, ensureOpen, getTempFileName, openChecksumInput, toString`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### FileSwitchDirectory

    public FileSwitchDirectory(Set<String> primaryExtensions,
                               Directory primaryDir,
                               Directory secondaryDir,
                               boolean doClose)

### Method Detail

#### getPrimaryDir

    public Directory getPrimaryDir()

Return the primary directory

#### getSecondaryDir

    public Directory getSecondaryDir()

Return the secondary directory

#### obtainLock

    public Lock obtainLock(String name)
                    throws IOException

Description copied from class: `Directory`
Acquires and returns a `Lock` for a file with the given name.

Specified by:
  `obtainLock` in class `Directory`
Parameters:
  `name` - the name of the lock file
Throws:
  `LockObtainFailedException` - (optional specific exception) if the lock could not be obtained because it is currently held elsewhere.
  `IOException` - if any i/o error occurs attempting to gain the lock

#### close

    public void close()
               throws IOException

Description copied from class: `Directory`
Closes the directory.

Specified by:
  `close` in interface `Closeable`
Specified by:
  `close` in interface `AutoCloseable`
Specified by:
  `close` in class `Directory`
Throws:
  `IOException`

#### listAll

    public String[] listAll()
                     throws IOException

Description copied from class: `Directory`
Returns names of all files stored in this directory. The output must be in sorted (UTF-16, java's `String.compareTo(java.lang.String)`) order.

Specified by:
  `listAll` in class `Directory`
Throws:
  `IOException` - in case of I/O error

#### getExtension

    public static String getExtension(String name)

Utility method to return a file's extension.

#### deleteFile

    public void deleteFile(String name)
                    throws IOException

Description copied from class: `Directory`
Removes an existing file in the directory. This method must throw either `NoSuchFileException` or `FileNotFoundException` if `name` points to a non-existing file.

Specified by:
  `deleteFile` in class `Directory`
Parameters:
  `name` - the name of an existing file.
Throws:
  `IOException` - in case of I/O error

#### fileLength

    public long fileLength(String name)
                    throws IOException

Description copied from class: `Directory`
Returns the byte length of a file in the directory. This method must throw either `NoSuchFileException` or `FileNotFoundException` if `name` points to a non-existing file.

Specified by:
  `fileLength` in class `Directory`
Parameters:
  `name` - the name of an existing file.
Throws:
  `IOException` - in case of I/O error

#### createOutput

    public IndexOutput createOutput(String name,
                                    IOContext context)
                             throws IOException

Description copied from class: `Directory`
Creates a new, empty file in the directory and returns an `IndexOutput` instance for appending data to this file. This method must throw `FileAlreadyExistsException` if the file already exists.

Specified by:
  `createOutput` in class `Directory`
Parameters:
  `name` - the name of the file to create.
Throws:
  `IOException` - in case of I/O error

#### createTempOutput

    public IndexOutput createTempOutput(String prefix,
                                        String suffix,
                                        IOContext context)
                                 throws IOException

Description copied from class: `Directory`
Creates a new, empty, temporary file in the directory and returns an `IndexOutput` instance for appending data to this file. The temporary file name (accessible via `IndexOutput.getName()`) will start with `prefix`, end with `suffix` and have a reserved file extension `.tmp`.

Specified by:
  `createTempOutput` in class `Directory`
Throws:
  `IOException`

#### sync

    public void sync(Collection<String> names)
              throws IOException

Description copied from class: `Directory`
Ensures that any writes to these files are moved to stable storage (made durable). Lucene uses this to properly commit changes to the index, to prevent a machine/OS crash from corrupting the index.

Specified by:
  `sync` in class `Directory`
Throws:
  `IOException`
See Also:
  `Directory.syncMetaData()`

#### rename

    public void rename(String source,
                       String dest)
                throws IOException

Description copied from class: `Directory`
Renames `source` file to `dest` file where `dest` must not already exist in the directory. It is permitted for this operation to not be truly atomic, for example both `source` and `dest` can be visible temporarily in `Directory.listAll()`. However, the implementation of this method must ensure the content of `dest` appears as the entire `source` atomically. So once `dest` is visible for readers, the entire content of previous `source` is visible. This method is used by IndexWriter to publish commits.

Specified by:
  `rename` in class `Directory`
Throws:
  `IOException`

#### syncMetaData

    public void syncMetaData()
                      throws IOException

Description copied from class: `Directory`
Ensures that directory metadata, such as recent file renames, are moved to stable storage.

Specified by:
  `syncMetaData` in class `Directory`
Throws:
  `IOException`
See Also:
  `Directory.sync(Collection)`

#### openInput

    public IndexInput openInput(String name,
                                IOContext context)
                         throws IOException

Description copied from class: `Directory`
Opens a stream for reading an existing file. This method must throw either `NoSuchFileException` or `FileNotFoundException` if `name` points to a non-existing file.

Specified by:
  `openInput` in class `Directory`
Parameters:
  `name` - the name of an existing file.
Throws:
  `IOException` - in case of I/O error

#### getPendingDeletions

    public Set<String> getPendingDeletions()
                                    throws IOException

Description copied from class: `Directory`
Returns a set of files currently pending deletion in this directory.

Specified by:
  `getPendingDeletions` in class `Directory`
Throws:
  `IOException`