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
ASnapshotDeletionPolicywhich adds a persistence layer so that snapshots can be maintained across the life of an application. The snapshots are persisted in aDirectoryand are committed as soon assnapshot()orrelease(IndexCommit)is called.NOTE: Sharing
PersistentSnapshotDeletionPolicys that write to the same directory acrossIndexWriters will corrupt snapshots. You should make sure everyIndexWriterhas its ownPersistentSnapshotDeletionPolicyand that they all write to a differentDirectory. 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'sIndexCommit.getGeneration().
-
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.StringCODEC_NAMEprivate Directorydirprivate longnextWriteGenstatic java.lang.StringSNAPSHOTS_PREFIXPrefix used for the save file.private static intVERSION_CURRENTprivate static intVERSION_START-
Fields inherited from class org.apache.lucene.index.SnapshotDeletionPolicy
indexCommits, lastCommit, refCounts
-
-
Constructor Summary
Constructors Constructor Description PersistentSnapshotDeletionPolicy(IndexDeletionPolicy primary, Directory dir)PersistentSnapshotDeletionPolicywraps anotherIndexDeletionPolicyto enable flexible snapshotting, passingIndexWriterConfig.OpenMode.CREATE_OR_APPENDby default.PersistentSnapshotDeletionPolicy(IndexDeletionPolicy primary, Directory dir, IndexWriterConfig.OpenMode mode)PersistentSnapshotDeletionPolicywraps anotherIndexDeletionPolicyto enable flexible snapshotting.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidclearPriorSnapshots()java.lang.StringgetLastSaveFile()Returns the file name the snapshots are currently saved to, or null if no snapshots have been saved.private voidloadPriorSnapshots()Reads the snapshots information from the givenDirectory.private voidpersist()voidrelease(long gen)Deletes a snapshotted commit by generation.voidrelease(IndexCommit commit)Deletes a snapshotted commit.IndexCommitsnapshot()Snapshots the last commit.-
Methods inherited from class org.apache.lucene.index.SnapshotDeletionPolicy
getIndexCommit, getSnapshotCount, getSnapshots, incRef, onCommit, onInit, releaseGen
-
-
-
-
Field Detail
-
SNAPSHOTS_PREFIX
public static final java.lang.String SNAPSHOTS_PREFIX
Prefix used for the save file.- See Also:
- Constant Field Values
-
VERSION_START
private static final int VERSION_START
- See Also:
- Constant Field Values
-
VERSION_CURRENT
private static final int VERSION_CURRENT
- See Also:
- Constant Field Values
-
CODEC_NAME
private static final java.lang.String CODEC_NAME
- See Also:
- Constant Field Values
-
nextWriteGen
private long nextWriteGen
-
dir
private final Directory dir
-
-
Constructor Detail
-
PersistentSnapshotDeletionPolicy
public PersistentSnapshotDeletionPolicy(IndexDeletionPolicy primary, Directory dir) throws java.io.IOException
PersistentSnapshotDeletionPolicywraps anotherIndexDeletionPolicyto enable flexible snapshotting, passingIndexWriterConfig.OpenMode.CREATE_OR_APPENDby default.- Parameters:
primary- theIndexDeletionPolicythat is used on non-snapshotted commits. Snapshotted commits, by definition, are not deleted until explicitly released viarelease(org.apache.lucene.index.IndexCommit).dir- theDirectorywhich will be used to persist the snapshots information.- Throws:
java.io.IOException
-
PersistentSnapshotDeletionPolicy
public PersistentSnapshotDeletionPolicy(IndexDeletionPolicy primary, Directory dir, IndexWriterConfig.OpenMode mode) throws java.io.IOException
PersistentSnapshotDeletionPolicywraps anotherIndexDeletionPolicyto enable flexible snapshotting.- Parameters:
primary- theIndexDeletionPolicythat is used on non-snapshotted commits. Snapshotted commits, by definition, are not deleted until explicitly released viarelease(org.apache.lucene.index.IndexCommit).dir- theDirectorywhich 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:
java.io.IOException
-
-
Method Detail
-
snapshot
public IndexCommit snapshot() throws java.io.IOException
Snapshots the last commit. Once this method returns, the snapshot information is persisted in the directory.- Overrides:
snapshotin classSnapshotDeletionPolicy- Returns:
- the
IndexCommitthat was snapshotted. - Throws:
java.io.IOException- See Also:
SnapshotDeletionPolicy.snapshot()
-
release
public void release(IndexCommit commit) throws java.io.IOException
Deletes a snapshotted commit. Once this method returns, the snapshot information is persisted in the directory.- Overrides:
releasein classSnapshotDeletionPolicy- Parameters:
commit- the commit previously returned bySnapshotDeletionPolicy.snapshot()- Throws:
java.io.IOException- See Also:
SnapshotDeletionPolicy.release(org.apache.lucene.index.IndexCommit)
-
release
public void release(long gen) throws java.io.IOExceptionDeletes a snapshotted commit by generation. Once this method returns, the snapshot information is persisted in the directory.- Throws:
java.io.IOException- See Also:
IndexCommit.getGeneration(),SnapshotDeletionPolicy.release(org.apache.lucene.index.IndexCommit)
-
persist
private void persist() throws java.io.IOException- Throws:
java.io.IOException
-
clearPriorSnapshots
private void clearPriorSnapshots() throws java.io.IOException- Throws:
java.io.IOException
-
getLastSaveFile
public java.lang.String getLastSaveFile()
Returns the file name the snapshots are currently saved to, or null if no snapshots have been saved.
-
loadPriorSnapshots
private void loadPriorSnapshots() throws java.io.IOExceptionReads the snapshots information from the givenDirectory. This method can be used if the snapshots information is needed, however you cannot instantiate the deletion policy (because e.g., some other process keeps a lock on the snapshots directory).- Throws:
java.io.IOException
-
-