You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2014/06/18 23:54:59 UTC

svn commit: r1603647 - /lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java

Author: jpountz
Date: Wed Jun 18 21:54:59 2014
New Revision: 1603647

URL: http://svn.apache.org/r1603647
Log:
LUCENE-5773: Fix BlockTermsReader ram usage estimation.

Modified:
    lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java

Modified: lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java?rev=1603647&r1=1603646&r2=1603647&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java (original)
+++ lucene/dev/trunk/lucene/codecs/src/java/org/apache/lucene/codecs/blockterms/BlockTermsReader.java Wed Jun 18 21:54:59 2014
@@ -41,10 +41,12 @@ import org.apache.lucene.store.ByteArray
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexInput;
+import org.apache.lucene.util.Accountable;
 import org.apache.lucene.util.ArrayUtil;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.DoubleBarrelLRUCache;
+import org.apache.lucene.util.RamUsageEstimator;
 
 /** Handles a terms dict, but decouples all details of
  *  doc/freqs/positions reading to an instance of {@link
@@ -59,6 +61,7 @@ import org.apache.lucene.util.DoubleBarr
  * @lucene.experimental */
 
 public class BlockTermsReader extends FieldsProducer {
+  private static final long BASE_RAM_BYTES_USED = RamUsageEstimator.shallowSizeOfInstance(BlockTermsReader.class);
   // Open input to the main terms dict file (_X.tis)
   private final IndexInput in;
 
@@ -226,7 +229,8 @@ public class BlockTermsReader extends Fi
     return fields.size();
   }
 
-  private class FieldReader extends Terms {
+  private static final long FIELD_READER_RAM_BYTES_USED = RamUsageEstimator.shallowSizeOfInstance(FieldReader.class);
+  private class FieldReader extends Terms implements Accountable {
     final long numTerms;
     final FieldInfo fieldInfo;
     final long termsStartPointer;
@@ -247,6 +251,11 @@ public class BlockTermsReader extends Fi
     }
 
     @Override
+    public long ramBytesUsed() {
+      return FIELD_READER_RAM_BYTES_USED;
+    }
+
+    @Override
     public TermsEnum iterator(TermsEnum reuse) throws IOException {
       return new SegmentTermsEnum();
     }
@@ -862,9 +871,14 @@ public class BlockTermsReader extends Fi
 
   @Override
   public long ramBytesUsed() {
-    long sizeInBytes = (postingsReader!=null) ? postingsReader.ramBytesUsed() : 0;
-    sizeInBytes += (indexReader!=null) ? indexReader.ramBytesUsed() : 0;
-    return sizeInBytes;
+    long ramBytesUsed = BASE_RAM_BYTES_USED;
+    ramBytesUsed += (postingsReader!=null) ? postingsReader.ramBytesUsed() : 0;
+    ramBytesUsed += (indexReader!=null) ? indexReader.ramBytesUsed() : 0;
+    ramBytesUsed += fields.size() * 2L * RamUsageEstimator.NUM_BYTES_OBJECT_REF;
+    for (FieldReader reader : fields.values()) {
+      ramBytesUsed += reader.ramBytesUsed();
+    }
+    return ramBytesUsed;
   }
 
   @Override