Package org.apache.lucene.index
Class IndexFileDeleter
- java.lang.Object
-
- org.apache.lucene.index.IndexFileDeleter
-
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable
final class IndexFileDeleter extends java.lang.Object implements java.io.Closeable
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classIndexFileDeleter.CommitPointHolds details for each commit point.private static classIndexFileDeleter.RefCountTracks the reference count for a single index file:
-
Field Summary
Fields Modifier and Type Field Description private java.util.List<IndexFileDeleter.CommitPoint>commitsprivate java.util.List<IndexFileDeleter.CommitPoint>commitsToDeleteprivate Directorydirectoryprivate DirectorydirectoryOrigprivate InfoStreaminfoStreamprivate java.util.List<java.lang.String>lastFilesprivate SegmentInfoslastSegmentInfosprivate IndexDeletionPolicypolicyprivate java.util.Map<java.lang.String,IndexFileDeleter.RefCount>refCounts(package private) booleanstartingCommitDeletedstatic booleanVERBOSE_REF_COUNTSChange to true to see details of reference counts when infoStream is enabledprivate IndexWriterwriter
-
Constructor Summary
Constructors Constructor Description IndexFileDeleter(java.lang.String[] files, Directory directoryOrig, Directory directory, IndexDeletionPolicy policy, SegmentInfos segmentInfos, InfoStream infoStream, IndexWriter writer, boolean initialIndexExists, boolean isReaderInit)Initialize the deleter: find all previous commits in the Directory, incref the files they reference, call the policy to let it delete commits.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcheckpoint(SegmentInfos segmentInfos, boolean isCommit)For definition of "check point" see IndexWriter comments: "Clarification: Check Points (and commits)".voidclose()private booleandecRef(java.lang.String fileName)Returns true if the file should now be deleted.(package private) voiddecRef(java.util.Collection<java.lang.String> files)Decrefs all provided files, even on exception; throws first exception hit, if any.(package private) voiddecRef(SegmentInfos segmentInfos)private voiddeleteCommits()Remove the CommitPoints in the commitsToDelete List by DecRef'ing all files from each SegmentInfos.private voiddeleteFile(java.lang.String fileName)private voiddeleteFiles(java.util.Collection<java.lang.String> names)(package private) voiddeleteNewFiles(java.util.Collection<java.lang.String> files)Deletes the specified files, but only if they are new (have not yet been incref'd).(package private) voidensureOpen()booleanexists(java.lang.String fileName)private IndexFileDeleter.RefCountgetRefCount(java.lang.String fileName)(package private) voidincRef(java.lang.String fileName)(package private) voidincRef(java.util.Collection<java.lang.String> files)(package private) voidincRef(SegmentInfos segmentInfos, boolean isCommit)(package private) static voidinflateGens(SegmentInfos infos, java.util.Collection<java.lang.String> files, InfoStream infoStream)Set all gens beyond what we currently see in the directory, to avoid double-write in cases where the previous IndexWriter did not gracefully close/rollback (e.g.(package private) booleanisClosed()private booleanlocked()(package private) voidrefresh()Writer calls this when it has hit an error and had to roll back, to tell us that there may now be unreferenced files in the filesystem.(package private) voidrevisitPolicy()Revisits theIndexDeletionPolicyby calling itsIndexDeletionPolicy.onCommit(List)again with the known commits.
-
-
-
Field Detail
-
refCounts
private java.util.Map<java.lang.String,IndexFileDeleter.RefCount> refCounts
-
commits
private java.util.List<IndexFileDeleter.CommitPoint> commits
-
lastFiles
private final java.util.List<java.lang.String> lastFiles
-
commitsToDelete
private java.util.List<IndexFileDeleter.CommitPoint> commitsToDelete
-
infoStream
private final InfoStream infoStream
-
directoryOrig
private final Directory directoryOrig
-
directory
private final Directory directory
-
policy
private final IndexDeletionPolicy policy
-
startingCommitDeleted
final boolean startingCommitDeleted
-
lastSegmentInfos
private SegmentInfos lastSegmentInfos
-
VERBOSE_REF_COUNTS
public static boolean VERBOSE_REF_COUNTS
Change to true to see details of reference counts when infoStream is enabled
-
writer
private final IndexWriter writer
-
-
Constructor Detail
-
IndexFileDeleter
public IndexFileDeleter(java.lang.String[] files, Directory directoryOrig, Directory directory, IndexDeletionPolicy policy, SegmentInfos segmentInfos, InfoStream infoStream, IndexWriter writer, boolean initialIndexExists, boolean isReaderInit) throws java.io.IOExceptionInitialize the deleter: find all previous commits in the Directory, incref the files they reference, call the policy to let it delete commits. This will remove any files not referenced by any of the commits.- Throws:
java.io.IOException- if there is a low-level IO error
-
-
Method Detail
-
locked
private boolean locked()
-
inflateGens
static void inflateGens(SegmentInfos infos, java.util.Collection<java.lang.String> files, InfoStream infoStream)
Set all gens beyond what we currently see in the directory, to avoid double-write in cases where the previous IndexWriter did not gracefully close/rollback (e.g. os/machine crashed or lost power).
-
ensureOpen
void ensureOpen() throws AlreadyClosedException- Throws:
AlreadyClosedException
-
isClosed
boolean isClosed()
-
deleteCommits
private void deleteCommits() throws java.io.IOExceptionRemove the CommitPoints in the commitsToDelete List by DecRef'ing all files from each SegmentInfos.- Throws:
java.io.IOException
-
refresh
void refresh() throws java.io.IOExceptionWriter calls this when it has hit an error and had to roll back, to tell us that there may now be unreferenced files in the filesystem. So we re-list the filesystem and delete such files. If segmentName is non-null, we will only delete files corresponding to that segment.- Throws:
java.io.IOException
-
close
public void close() throws java.io.IOException- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.io.Closeable- Throws:
java.io.IOException
-
revisitPolicy
void revisitPolicy() throws java.io.IOExceptionRevisits theIndexDeletionPolicyby calling itsIndexDeletionPolicy.onCommit(List)again with the known commits. This is useful in cases where a deletion policy which holds onto index commits is used. The application may know that some commits are not held by the deletion policy anymore and callIndexWriter.deleteUnusedFiles(), which will attempt to delete the unused commits again.- Throws:
java.io.IOException
-
checkpoint
public void checkpoint(SegmentInfos segmentInfos, boolean isCommit) throws java.io.IOException
For definition of "check point" see IndexWriter comments: "Clarification: Check Points (and commits)". Writer calls this when it has made a "consistent change" to the index, meaning new files are written to the index and the in-memory SegmentInfos have been modified to point to those files. This may or may not be a commit (segments_N may or may not have been written). We simply incref the files referenced by the new SegmentInfos and decref the files we had previously seen (if any). If this is a commit, we also call the policy to give it a chance to remove other commits. If any commits are removed, we decref their files as well.- Throws:
java.io.IOException
-
incRef
void incRef(SegmentInfos segmentInfos, boolean isCommit) throws java.io.IOException
- Throws:
java.io.IOException
-
incRef
void incRef(java.util.Collection<java.lang.String> files)
-
incRef
void incRef(java.lang.String fileName)
-
decRef
void decRef(java.util.Collection<java.lang.String> files) throws java.io.IOExceptionDecrefs all provided files, even on exception; throws first exception hit, if any.- Throws:
java.io.IOException
-
decRef
private boolean decRef(java.lang.String fileName)
Returns true if the file should now be deleted.
-
decRef
void decRef(SegmentInfos segmentInfos) throws java.io.IOException
- Throws:
java.io.IOException
-
exists
public boolean exists(java.lang.String fileName)
-
getRefCount
private IndexFileDeleter.RefCount getRefCount(java.lang.String fileName)
-
deleteNewFiles
void deleteNewFiles(java.util.Collection<java.lang.String> files) throws java.io.IOExceptionDeletes the specified files, but only if they are new (have not yet been incref'd).- Throws:
java.io.IOException
-
deleteFiles
private void deleteFiles(java.util.Collection<java.lang.String> names) throws java.io.IOException- Throws:
java.io.IOException
-
deleteFile
private void deleteFile(java.lang.String fileName) throws java.io.IOException- Throws:
java.io.IOException
-
-