Package 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
Modifier and Type
Field
Description
`static final 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
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

Modifier and Type
Method
Description
`String`
`getLastSaveFile()`
Returns the file name the snapshots are currently saved to, or null if no snapshots have been saved.
`void`
`release(long gen)`
Deletes a snapshotted commit by generation.
`void`
`release(IndexCommit commit)`
Deletes a snapshotted commit.
`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 Details

### SNAPSHOTS_PREFIX

public static final String SNAPSHOTS_PREFIX
Prefix used for the save file.

See Also:
  - Constant Field Values

## Constructor Details

### 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 Details

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