final class ReaderPool
extends java.lang.Object
implements java.io.Closeable
Modifier and Type | Field and Description |
---|---|
private java.util.concurrent.atomic.AtomicBoolean |
closed |
private java.util.function.LongSupplier |
completedDelGenSupplier |
private Directory |
directory |
private FieldInfos.FieldNumbers |
fieldNumbers |
private InfoStream |
infoStream |
private Directory |
originalDirectory |
private boolean |
poolReaders |
private java.util.Map<java.lang.String,java.lang.String> |
readerAttributes |
private java.util.Map<SegmentCommitInfo,ReadersAndUpdates> |
readerMap |
private SegmentInfos |
segmentInfos |
private java.lang.String |
softDeletesField |
Constructor and Description |
---|
ReaderPool(Directory directory,
Directory originalDirectory,
SegmentInfos segmentInfos,
FieldInfos.FieldNumbers fieldNumbers,
java.util.function.LongSupplier completedDelGenSupplier,
InfoStream infoStream,
java.lang.String softDeletesField,
StandardDirectoryReader reader,
java.util.Map<java.lang.String,java.lang.String> readerAttributes) |
Modifier and Type | Method and Description |
---|---|
(package private) boolean |
anyDeletions()
Returns
true iff any of the buffered readers and updates has at least one pending delete |
(package private) boolean |
anyDocValuesChanges()
Returns
true iff there are any buffered doc values updates. |
(package private) boolean |
assertInfoIsLive(SegmentCommitInfo info)
Asserts this info still exists in IW's segment infos
|
void |
close() |
(package private) boolean |
commit(SegmentInfos infos)
Commit live docs changes for the segment readers for
the provided infos.
|
(package private) boolean |
drop(SegmentCommitInfo info)
Drops reader for the given
SegmentCommitInfo if it's pooled |
(package private) void |
dropAll()
Remove all our references to readers, and commits
any pending changes.
|
(package private) void |
enableReaderPooling()
Enables reader pooling for this pool.
|
(package private) ReadersAndUpdates |
get(SegmentCommitInfo info,
boolean create)
Obtain a ReadersAndLiveDocs instance from the
readerPool.
|
(package private) java.util.List<ReadersAndUpdates> |
getReadersByRam()
Returns a list of all currently maintained ReadersAndUpdates sorted by it's ram consumption largest to smallest.
|
(package private) boolean |
isReaderPoolingEnabled() |
private PendingDeletes |
newPendingDeletes(SegmentCommitInfo info) |
private PendingDeletes |
newPendingDeletes(SegmentReader reader,
SegmentCommitInfo info) |
private boolean |
noDups() |
(package private) long |
ramBytesUsed()
Returns the sum of the ram used by all the buffered readers and updates in MB
|
(package private) boolean |
release(ReadersAndUpdates rld,
boolean assertInfoLive)
Releases the
ReadersAndUpdates . |
(package private) boolean |
writeAllDocValuesUpdates()
Writes all doc values updates to disk if there are any.
|
(package private) boolean |
writeDocValuesUpdatesForMerge(java.util.List<SegmentCommitInfo> infos)
Writes all doc values updates to disk if there are any.
|
private final java.util.Map<SegmentCommitInfo,ReadersAndUpdates> readerMap
private final Directory directory
private final Directory originalDirectory
private final FieldInfos.FieldNumbers fieldNumbers
private final java.util.function.LongSupplier completedDelGenSupplier
private final InfoStream infoStream
private final SegmentInfos segmentInfos
private final java.lang.String softDeletesField
private final java.util.Map<java.lang.String,java.lang.String> readerAttributes
private volatile boolean poolReaders
private final java.util.concurrent.atomic.AtomicBoolean closed
ReaderPool(Directory directory, Directory originalDirectory, SegmentInfos segmentInfos, FieldInfos.FieldNumbers fieldNumbers, java.util.function.LongSupplier completedDelGenSupplier, InfoStream infoStream, java.lang.String softDeletesField, StandardDirectoryReader reader, java.util.Map<java.lang.String,java.lang.String> readerAttributes) throws java.io.IOException
java.io.IOException
boolean assertInfoIsLive(SegmentCommitInfo info)
boolean drop(SegmentCommitInfo info) throws java.io.IOException
SegmentCommitInfo
if it's pooledtrue
if a reader is pooledjava.io.IOException
long ramBytesUsed()
boolean anyDeletions()
true
iff any of the buffered readers and updates has at least one pending deletevoid enableReaderPooling()
ReadersAndUpdates
will be kept around
in the reader pool on calling release(ReadersAndUpdates, boolean)
until the segment get dropped via calls
to drop(SegmentCommitInfo)
or dropAll()
or close()
.
Reader pooling is disabled upon construction but can't be disabled again once it's enabled.boolean isReaderPoolingEnabled()
boolean release(ReadersAndUpdates rld, boolean assertInfoLive) throws java.io.IOException
ReadersAndUpdates
. This should only be called if the get(SegmentCommitInfo, boolean)
is called with the create paramter set to true.true
if any files were written by this release call.java.io.IOException
public void close() throws java.io.IOException
close
in interface java.io.Closeable
close
in interface java.lang.AutoCloseable
java.io.IOException
boolean writeAllDocValuesUpdates() throws java.io.IOException
true
iff any files where writtenjava.io.IOException
boolean writeDocValuesUpdatesForMerge(java.util.List<SegmentCommitInfo> infos) throws java.io.IOException
true
iff any files where writtenjava.io.IOException
java.util.List<ReadersAndUpdates> getReadersByRam()
void dropAll() throws java.io.IOException
java.io.IOException
boolean commit(SegmentInfos infos) throws java.io.IOException
java.io.IOException
- If there is a low-level I/O errorboolean anyDocValuesChanges()
true
iff there are any buffered doc values updates. Otherwise false
.ReadersAndUpdates get(SegmentCommitInfo info, boolean create)
release(ReadersAndUpdates, boolean)
.private PendingDeletes newPendingDeletes(SegmentCommitInfo info)
private PendingDeletes newPendingDeletes(SegmentReader reader, SegmentCommitInfo info)
private boolean noDups()