Example usage for org.apache.lucene.index SegmentReader ramBytesUsed

List of usage examples for org.apache.lucene.index SegmentReader ramBytesUsed

Introduction

In this page you can find the example usage for org.apache.lucene.index SegmentReader ramBytesUsed.

Prototype

@Override
    public long ramBytesUsed() 

Source Link

Usage

From source file:org.elasticsearch.index.engine.internal.AsynchronousEngine.java

License:Apache License

private static long getReaderRamBytesUsed(AtomicReaderContext reader) {
    final SegmentReader segmentReader = SegmentReaderUtils.segmentReader(reader.reader());
    return segmentReader.ramBytesUsed();
}

From source file:org.elasticsearch.index.engine.RamAccountingSearcherFactory.java

License:Apache License

@Override
public IndexSearcher newSearcher(IndexReader reader, IndexReader previousReader) throws IOException {
    final CircuitBreaker breaker = breakerService.getBreaker(CircuitBreaker.ACCOUNTING);

    // Construct a list of the previous segment readers, we only want to track memory used
    // by new readers, so these will be exempted from the circuit breaking accounting.
    ///*from  www . ja v  a 2  s.  c  o  m*/
    // The Core CacheKey is used as the key for the set so that deletions still keep the correct
    // accounting, as using the Reader or Reader's CacheKey causes incorrect accounting.
    final Set<IndexReader.CacheKey> prevReaders;
    if (previousReader == null) {
        prevReaders = Collections.emptySet();
    } else {
        final List<LeafReaderContext> previousReaderLeaves = previousReader.leaves();
        prevReaders = new HashSet<>(previousReaderLeaves.size());
        for (LeafReaderContext lrc : previousReaderLeaves) {
            prevReaders.add(Lucene.segmentReader(lrc.reader()).getCoreCacheHelper().getKey());
        }
    }

    for (LeafReaderContext lrc : reader.leaves()) {
        final SegmentReader segmentReader = Lucene.segmentReader(lrc.reader());
        // don't add the segment's memory unless it is not referenced by the previous reader
        // (only new segments)
        if (prevReaders.contains(segmentReader.getCoreCacheHelper().getKey()) == false) {
            final long ramBytesUsed = segmentReader.ramBytesUsed();
            // add the segment memory to the breaker (non-breaking)
            breaker.addWithoutBreaking(ramBytesUsed);
            // and register a listener for when the segment is closed to decrement the
            // breaker accounting
            segmentReader.getCoreCacheHelper()
                    .addClosedListener(k -> breaker.addWithoutBreaking(-ramBytesUsed));
        }
    }
    return super.newSearcher(reader, previousReader);
}