You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by gu...@apache.org on 2022/01/26 10:06:42 UTC

[lucene] branch branch_9x updated: LUCENE-10388: Remove MultiLevelSkipListReader#SkipBuffer (#620)

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

guofeng pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/lucene.git


The following commit(s) were added to refs/heads/branch_9x by this push:
     new c0a2471  LUCENE-10388: Remove MultiLevelSkipListReader#SkipBuffer (#620)
c0a2471 is described below

commit c0a247144ab7ee38e2050bf68c76c67662d4951c
Author: gf2121 <52...@users.noreply.github.com>
AuthorDate: Wed Jan 26 18:06:34 2022 +0800

    LUCENE-10388: Remove MultiLevelSkipListReader#SkipBuffer (#620)
---
 lucene/CHANGES.txt                                 |  2 +
 .../lucene/codecs/MultiLevelSkipListReader.java    | 76 ++--------------------
 2 files changed, 7 insertions(+), 71 deletions(-)

diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 375b815..3e697af 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -133,6 +133,8 @@ Optimizations
 * LUCENE-10375: Speed up HNSW vectors merge by first writing combined vector
   data to a file. (Julie Tibshirani, Adrien Grand)
 
+* LUCENE-10388: Remove MultiLevelSkipListReader#SkipBuffer to make JVM less confused. (Guo Feng)
+
 Changes in runtime behavior
 ---------------------
 
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListReader.java b/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListReader.java
index d454240..e4c59f4 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListReader.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/MultiLevelSkipListReader.java
@@ -42,15 +42,6 @@ public abstract class MultiLevelSkipListReader implements Closeable {
   /** number of levels in this skip list */
   protected int numberOfSkipLevels;
 
-  // Expert: defines the number of top skip levels to buffer in memory.
-  // Reducing this number results in less memory usage, but possibly
-  // slower performance due to more random I/Os.
-  // Please notice that the space each level occupies is limited by
-  // the skipInterval. The top level can not contain more than
-  // skipLevel entries, the second top level can not contain more
-  // than skipLevel^2 entries and so forth.
-  private int numberOfLevelsToBuffer = 1;
-
   private int docCount;
 
   /** skipStream for each level. */
@@ -219,25 +210,18 @@ public abstract class MultiLevelSkipListReader implements Closeable {
 
     skipStream[0].seek(skipPointer[0]);
 
-    int toBuffer = numberOfLevelsToBuffer;
-
     for (int i = numberOfSkipLevels - 1; i > 0; i--) {
       // the length of the current level
       long length = readLevelLength(skipStream[0]);
 
       // the start pointer of the current level
       skipPointer[i] = skipStream[0].getFilePointer();
-      if (toBuffer > 0) {
-        // buffer this level
-        skipStream[i] = new SkipBuffer(skipStream[0], (int) length);
-        toBuffer--;
-      } else {
-        // clone this stream, it is already at the start of the current level
-        skipStream[i] = skipStream[0].clone();
 
-        // move base stream beyond the current level
-        skipStream[0].seek(skipStream[0].getFilePointer() + length);
-      }
+      // clone this stream, it is already at the start of the current level
+      skipStream[i] = skipStream[0].clone();
+
+      // move base stream beyond the current level
+      skipStream[0].seek(skipStream[0].getFilePointer() + length);
     }
 
     // use base stream for the lowest level
@@ -279,54 +263,4 @@ public abstract class MultiLevelSkipListReader implements Closeable {
     lastDoc = skipDoc[level];
     lastChildPointer = childPointer[level];
   }
-
-  /** used to buffer the top skip levels */
-  private static final class SkipBuffer extends IndexInput {
-    private byte[] data;
-    private long pointer;
-    private int pos;
-
-    SkipBuffer(IndexInput input, int length) throws IOException {
-      super("SkipBuffer on " + input);
-      data = new byte[length];
-      pointer = input.getFilePointer();
-      input.readBytes(data, 0, length);
-    }
-
-    @Override
-    public void close() {
-      data = null;
-    }
-
-    @Override
-    public long getFilePointer() {
-      return pointer + pos;
-    }
-
-    @Override
-    public long length() {
-      return data.length;
-    }
-
-    @Override
-    public byte readByte() {
-      return data[pos++];
-    }
-
-    @Override
-    public void readBytes(byte[] b, int offset, int len) {
-      System.arraycopy(data, pos, b, offset, len);
-      pos += len;
-    }
-
-    @Override
-    public void seek(long pos) {
-      this.pos = (int) (pos - pointer);
-    }
-
-    @Override
-    public IndexInput slice(String sliceDescription, long offset, long length) throws IOException {
-      throw new UnsupportedOperationException();
-    }
-  }
 }