org.apache.lucene.index

## Class PersistentSnapshotDeletionPolicy

- java.lang.Object
- - org.apache.lucene.index.IndexDeletionPolicy
  - - org.apache.lucene.index.SnapshotDeletionPolicy
    - - org.apache.lucene.index.PersistentSnapshotDeletionPolicy

    public class PersistentSnapshotDeletionPolicy
    extends SnapshotDeletionPolicy

A `SnapshotDeletionPolicy` which adds a persistence layer so that snapshots can be maintained across the life of an application. The snapshots are persisted in a `Directory` and are committed as soon as `snapshot()` or `release(IndexCommit)` is called.

NOTE: Sharing `PersistentSnapshotDeletionPolicy`s that write to the same directory across `IndexWriter`s will corrupt snapshots. You should make sure every `IndexWriter` has its own `PersistentSnapshotDeletionPolicy` and that they all write to a different `Directory`. It is OK to use the same Directory that holds the index.

This class adds a `release(long)` method to release commits from a previous snapshot's `IndexCommit.getGeneration()`.

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

### Field Summary

Fields
`static String` `SNAPSHOTS_PREFIX` Prefix used for the save file.

### Fields inherited from class org.apache.lucene.index.SnapshotDeletionPolicy

`indexCommits, lastCommit, refCounts`

### Constructor Summary

Constructors
Constructor and Description
`PersistentSnapshotDeletionPolicy(IndexDeletionPolicy primary, Directory dir)` `PersistentSnapshotDeletionPolicy` wraps another `IndexDeletionPolicy` to enable flexible snapshotting, passing `IndexWriterConfig.OpenMode.CREATE_OR_APPEND` by default.
`PersistentSnapshotDeletionPolicy(IndexDeletionPolicy primary, Directory dir, IndexWriterConfig.OpenMode mode)` `PersistentSnapshotDeletionPolicy` wraps another `IndexDeletionPolicy` to enable flexible snapshotting.

### Method Summary

All Methods Instance Methods Concrete Methods
`String` `getLastSaveFile()` Returns the file name the snapshots are currently saved to, or null if no snapshots have been saved.
`void` `release(IndexCommit commit)` Deletes a snapshotted commit.
`void` `release(long gen)` Deletes a snapshotted commit by generation.
`IndexCommit` `snapshot()` Snapshots the last commit.

### Methods inherited from class org.apache.lucene.index.SnapshotDeletionPolicy

`getIndexCommit, getSnapshotCount, getSnapshots, incRef, onCommit, onInit, releaseGen`

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

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

### Field Detail

#### SNAPSHOTS_PREFIX

    public static final String SNAPSHOTS_PREFIX

Prefix used for the save file.

See Also:
  Constant Field Values

### Constructor Detail

#### PersistentSnapshotDeletionPolicy

    public PersistentSnapshotDeletionPolicy(IndexDeletionPolicy primary,
                                            Directory dir)
                                     throws IOException

`PersistentSnapshotDeletionPolicy` wraps another `IndexDeletionPolicy` to enable flexible snapshotting, passing `IndexWriterConfig.OpenMode.CREATE_OR_APPEND` by default.

Parameters:
  `primary` - the `IndexDeletionPolicy` that is used on non-snapshotted commits. Snapshotted commits, by definition, are not deleted until explicitly released via `release(org.apache.lucene.index.IndexCommit)`.
  `dir` - the `Directory` which will be used to persist the snapshots information.
Throws:
  `IOException`

#### PersistentSnapshotDeletionPolicy

    public PersistentSnapshotDeletionPolicy(IndexDeletionPolicy primary,
                                            Directory dir,
                                            IndexWriterConfig.OpenMode mode)
                                     throws IOException

`PersistentSnapshotDeletionPolicy` wraps another `IndexDeletionPolicy` to enable flexible snapshotting.

Parameters:
  `primary` - the `IndexDeletionPolicy` that is used on non-snapshotted commits. Snapshotted commits, by definition, are not deleted until explicitly released via `release(org.apache.lucene.index.IndexCommit)`.
  `dir` - the `Directory` which will be used to persist the snapshots information.
  `mode` - specifies whether a new index should be created, deleting all existing snapshots information (immediately), or open an existing index, initializing the class with the snapshots information.
Throws:
  `IOException`

### Method Detail

#### snapshot

    public IndexCommit snapshot()
                         throws IOException

Snapshots the last commit. Once this method returns, the snapshot information is persisted in the directory.

Overrides:
  `snapshot` in class `SnapshotDeletionPolicy`
Returns:
  the `IndexCommit` that was snapshotted.
Throws:
  `IOException`
See Also:
  `SnapshotDeletionPolicy.snapshot()`

#### release

    public void release(IndexCommit commit)
                 throws IOException

Deletes a snapshotted commit. Once this method returns, the snapshot information is persisted in the directory.

Overrides:
  `release` in class `SnapshotDeletionPolicy`
Parameters:
  `commit` - the commit previously returned by `SnapshotDeletionPolicy.snapshot()`
Throws:
  `IOException`
See Also:
  `SnapshotDeletionPolicy.release(org.apache.lucene.index.IndexCommit)`

#### release

    public void release(long gen)
                 throws IOException

Deletes a snapshotted commit by generation. Once this method returns, the snapshot information is persisted in the directory.

Throws:
  `IOException`
See Also:
  `IndexCommit.getGeneration()`, `SnapshotDeletionPolicy.release(org.apache.lucene.index.IndexCommit)`

#### getLastSaveFile

    public String getLastSaveFile()

Returns the file name the snapshots are currently saved to, or null if no snapshots have been saved.