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.