/** * Returns <code>true</code> iff any of the buffered readers and updates has at least one pending delete */ synchronized boolean anyDeletions() { for(ReadersAndUpdates rld : readerMap.values()) { if (rld.getDelCount() > 0) { return true; } } return false; }
SegmentState(ReadersAndUpdates rld, IOUtils.IOConsumer<ReadersAndUpdates> onClose, SegmentCommitInfo info) throws IOException { this.rld = rld; reader = rld.getReader(IOContext.READ); startDelCount = rld.getDelCount(); delGen = info.getBufferedDeletesGen(); this.onClose = onClose; }
/** Close segment states previously opened with openSegmentStates. */ public static BufferedUpdatesStream.ApplyDeletesResult closeSegmentStates(IndexWriter writer, BufferedUpdatesStream.SegmentState[] segStates, boolean success) throws IOException { List<SegmentCommitInfo> allDeleted = null; long totDelCount = 0; final List<BufferedUpdatesStream.SegmentState> segmentStates = Arrays.asList(segStates); for (BufferedUpdatesStream.SegmentState segState : segmentStates) { if (success) { totDelCount += segState.rld.getDelCount() - segState.startDelCount; int fullDelCount = segState.rld.getDelCount(); assert fullDelCount <= segState.rld.info.info.maxDoc() : fullDelCount + " > " + segState.rld.info.info.maxDoc(); if (segState.rld.isFullyDeleted() && writer.getConfig().getMergePolicy().keepFullyDeletedSegment(() -> segState.reader) == false) { if (allDeleted == null) { allDeleted = new ArrayList<>(); } allDeleted.add(segState.reader.getOriginalSegmentInfo()); } } } IOUtils.close(segmentStates); if (writer.infoStream.isEnabled("BD")) { writer.infoStream.message("BD", "closeSegmentStates: " + totDelCount + " new deleted documents; pool " + writer.getPendingUpdatesCount()+ " packets; bytesUsed=" + writer.getReaderPoolRamBytesUsed()); } return new BufferedUpdatesStream.ApplyDeletesResult(totDelCount > 0, allDeleted); }
/** * Obtain the number of deleted docs for a pooled reader. * If the reader isn't being pooled, the segmentInfo's * delCount is returned. */ @Override public int numDeletedDocs(SegmentCommitInfo info) { ensureOpen(false); validate(info); final ReadersAndUpdates rld = getPooledInstance(info, false); if (rld != null) { return rld.getDelCount(); // get the full count from here since SCI might change concurrently } else { final int delCount = info.getDelCount(softDeletesEnabled); assert delCount <= info.info.maxDoc(): "delCount: " + delCount + " maxDoc: " + info.info.maxDoc(); return delCount; } }
int numDeletesBefore = mergedDeletesAndUpdates.getDelCount(); infoStream.message("IW", "no new deletes or field updates since merge started"); } else { String msg = mergedDeletesAndUpdates.getDelCount() - numDeletesBefore + " new deletes"; if (anyDVUpdates) { msg += " and " + mergedDeletesAndUpdates.getNumDVUpdates() + " new field updates";
/** * Returns <code>true</code> iff any of the buffered readers and updates has at least one pending delete */ synchronized boolean anyDeletions() { for(ReadersAndUpdates rld : readerMap.values()) { if (rld.getDelCount() > 0) { return true; } } return false; }
SegmentState(ReadersAndUpdates rld, IOUtils.IOConsumer<ReadersAndUpdates> onClose, SegmentCommitInfo info) throws IOException { this.rld = rld; reader = rld.getReader(IOContext.READ); startDelCount = rld.getDelCount(); delGen = info.getBufferedDeletesGen(); this.onClose = onClose; }
/** Close segment states previously opened with openSegmentStates. */ public static BufferedUpdatesStream.ApplyDeletesResult closeSegmentStates(IndexWriter writer, BufferedUpdatesStream.SegmentState[] segStates, boolean success) throws IOException { List<SegmentCommitInfo> allDeleted = null; long totDelCount = 0; final List<BufferedUpdatesStream.SegmentState> segmentStates = Arrays.asList(segStates); for (BufferedUpdatesStream.SegmentState segState : segmentStates) { if (success) { totDelCount += segState.rld.getDelCount() - segState.startDelCount; int fullDelCount = segState.rld.getDelCount(); assert fullDelCount <= segState.rld.info.info.maxDoc() : fullDelCount + " > " + segState.rld.info.info.maxDoc(); if (segState.rld.isFullyDeleted() && writer.getConfig().getMergePolicy().keepFullyDeletedSegment(() -> segState.reader) == false) { if (allDeleted == null) { allDeleted = new ArrayList<>(); } allDeleted.add(segState.reader.getOriginalSegmentInfo()); } } } IOUtils.close(segmentStates); if (writer.infoStream.isEnabled("BD")) { writer.infoStream.message("BD", "closeSegmentStates: " + totDelCount + " new deleted documents; pool " + writer.getPendingUpdatesCount()+ " packets; bytesUsed=" + writer.getReaderPoolRamBytesUsed()); } return new BufferedUpdatesStream.ApplyDeletesResult(totDelCount > 0, allDeleted); }
int numDeletesBefore = mergedDeletesAndUpdates.getDelCount(); infoStream.message("IW", "no new deletes or field updates since merge started"); } else { String msg = mergedDeletesAndUpdates.getDelCount() - numDeletesBefore + " new deletes"; if (anyDVUpdates) { msg += " and " + mergedDeletesAndUpdates.getNumDVUpdates() + " new field updates";
/** * Obtain the number of deleted docs for a pooled reader. * If the reader isn't being pooled, the segmentInfo's * delCount is returned. */ @Override public int numDeletedDocs(SegmentCommitInfo info) { ensureOpen(false); validate(info); final ReadersAndUpdates rld = getPooledInstance(info, false); if (rld != null) { return rld.getDelCount(); // get the full count from here since SCI might change concurrently } else { final int delCount = info.getDelCount(softDeletesEnabled); assert delCount <= info.info.maxDoc(): "delCount: " + delCount + " maxDoc: " + info.info.maxDoc(); return delCount; } }