This is an automated email from the ASF dual-hosted git repository.

jlli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git


The following commit(s) were added to refs/heads/master by this push:
     new b4cd708  Clean up BitmapInvertedIndexReader (#4934)
b4cd708 is described below

commit b4cd708341b43e6c5cf55995eb7b0e83f8dc9a1f
Author: Jialiang Li <j...@linkedin.com>
AuthorDate: Fri Dec 20 19:27:18 2019 -0800

    Clean up BitmapInvertedIndexReader (#4934)
    
    * Clean up BitmapInvertedIndexReader
---
 .../index/readers/BitmapInvertedIndexReader.java   | 60 +++++++++-------------
 1 file changed, 23 insertions(+), 37 deletions(-)

diff --git 
a/pinot-core/src/main/java/org/apache/pinot/core/segment/index/readers/BitmapInvertedIndexReader.java
 
b/pinot-core/src/main/java/org/apache/pinot/core/segment/index/readers/BitmapInvertedIndexReader.java
index d68af16..189b0a2 100644
--- 
a/pinot-core/src/main/java/org/apache/pinot/core/segment/index/readers/BitmapInvertedIndexReader.java
+++ 
b/pinot-core/src/main/java/org/apache/pinot/core/segment/index/readers/BitmapInvertedIndexReader.java
@@ -18,7 +18,7 @@
  */
 package org.apache.pinot.core.segment.index.readers;
 
-import java.io.File;
+import com.google.common.base.Preconditions;
 import java.io.IOException;
 import java.lang.ref.SoftReference;
 import java.nio.ByteBuffer;
@@ -31,25 +31,26 @@ import org.slf4j.LoggerFactory;
 public class BitmapInvertedIndexReader implements 
InvertedIndexReader<ImmutableRoaringBitmap> {
   public static final Logger LOGGER = 
LoggerFactory.getLogger(BitmapInvertedIndexReader.class);
 
-  final private int numberOfBitmaps;
-  private volatile SoftReference<SoftReference<ImmutableRoaringBitmap>[]> 
bitmaps = null;
+  private final PinotDataBuffer _buffer;
+  private final int _numBitmaps;
 
-  private PinotDataBuffer buffer;
-
-  private File file;
+  private volatile SoftReference<SoftReference<ImmutableRoaringBitmap>[]> 
_bitmaps = null;
 
   /**
    * Constructs an inverted index with the specified size.
+   * @param indexDataBuffer data buffer for the inverted index.
    * @param cardinality the number of bitmaps in the inverted index, which 
should be the same as the
    *          number of values in
    *          the dictionary.
-   * @throws IOException
    */
-  public BitmapInvertedIndexReader(PinotDataBuffer indexDataBuffer, int 
cardinality)
-      throws IOException {
-    this.file = file;
-    numberOfBitmaps = cardinality;
-    load(indexDataBuffer);
+  public BitmapInvertedIndexReader(PinotDataBuffer indexDataBuffer, int 
cardinality) {
+    _buffer = indexDataBuffer;
+    _numBitmaps = cardinality;
+
+    final int lastOffset = _buffer.getInt(_numBitmaps * Integer.BYTES);
+    Preconditions.checkState(lastOffset == _buffer.size(),
+        "The last offset should be equal to buffer size! Current lastOffset: " 
+ lastOffset + ", buffer size: "
+            + _buffer.size());
   }
 
   /**
@@ -59,8 +60,8 @@ public class BitmapInvertedIndexReader implements 
InvertedIndexReader<ImmutableR
   public ImmutableRoaringBitmap getDocIds(int dictId) {
     SoftReference<ImmutableRoaringBitmap>[] bitmapArrayReference = null;
     // Return the bitmap if it's still on heap
-    if (bitmaps != null) {
-      bitmapArrayReference = bitmaps.get();
+    if (_bitmaps != null) {
+      bitmapArrayReference = _bitmaps.get();
       if (bitmapArrayReference != null) {
         SoftReference<ImmutableRoaringBitmap> bitmapReference = 
bitmapArrayReference[dictId];
         if (bitmapReference != null) {
@@ -70,12 +71,12 @@ public class BitmapInvertedIndexReader implements 
InvertedIndexReader<ImmutableR
           }
         }
       } else {
-        bitmapArrayReference = new SoftReference[numberOfBitmaps];
-        bitmaps = new 
SoftReference<SoftReference<ImmutableRoaringBitmap>[]>(bitmapArrayReference);
+        bitmapArrayReference = new SoftReference[_numBitmaps];
+        _bitmaps = new 
SoftReference<SoftReference<ImmutableRoaringBitmap>[]>(bitmapArrayReference);
       }
     } else {
-      bitmapArrayReference = new SoftReference[numberOfBitmaps];
-      bitmaps = new 
SoftReference<SoftReference<ImmutableRoaringBitmap>[]>(bitmapArrayReference);
+      bitmapArrayReference = new SoftReference[_numBitmaps];
+      _bitmaps = new 
SoftReference<SoftReference<ImmutableRoaringBitmap>[]>(bitmapArrayReference);
     }
     synchronized (this) {
       ImmutableRoaringBitmap value;
@@ -95,32 +96,17 @@ public class BitmapInvertedIndexReader implements 
InvertedIndexReader<ImmutableR
     final int bufferLength = nextOffset - currentOffset;
 
     // Slice the buffer appropriately for Roaring Bitmap
-    ByteBuffer bb = buffer.toDirectByteBuffer(currentOffset, bufferLength);
-    ImmutableRoaringBitmap immutableRoaringBitmap = null;
-    try {
-      immutableRoaringBitmap = new ImmutableRoaringBitmap(bb);
-    } catch (Exception e) {
-      LOGGER.error(
-          "Error creating immutableRoaringBitmap for dictionary id:{} 
currentOffset:{} bufferLength:{} slice position{} limit:{} file:{}",
-          index, currentOffset, bufferLength, bb.position(), bb.limit(), 
file.getAbsolutePath());
-    }
-    return immutableRoaringBitmap;
+    ByteBuffer bb = _buffer.toDirectByteBuffer(currentOffset, bufferLength);
+    return new ImmutableRoaringBitmap(bb);
   }
 
   private int getOffset(final int index) {
-    return buffer.getInt(index * Integer.BYTES);
-  }
-
-  private void load(PinotDataBuffer indexDataBuffer)
-      throws IOException {
-    final int lastOffset = indexDataBuffer.getInt(numberOfBitmaps * 
Integer.BYTES);
-    assert lastOffset == indexDataBuffer.size();
-    this.buffer = indexDataBuffer;
+    return _buffer.getInt(index * Integer.BYTES);
   }
 
   @Override
   public void close()
       throws IOException {
-    buffer.close();
+    _buffer.close();
   }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org
For additional commands, e-mail: commits-h...@pinot.apache.org

Reply via email to