You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by iv...@apache.org on 2021/02/16 14:09:09 UTC

[lucene-solr] branch master updated: LUCENE-9322: Lucene90VectorReader can leak open files (#2371)

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

ivera pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/master by this push:
     new 4cdfbbb  LUCENE-9322: Lucene90VectorReader can leak open files (#2371)
4cdfbbb is described below

commit 4cdfbbb95be1b25adb839ee8d1fe61052a53a4a3
Author: Ignacio Vera <iv...@apache.org>
AuthorDate: Tue Feb 16 15:08:50 2021 +0100

    LUCENE-9322: Lucene90VectorReader can leak open files (#2371)
---
 .../codecs/lucene90/Lucene90VectorReader.java      | 83 +++++++++++-----------
 1 file changed, 41 insertions(+), 42 deletions(-)

diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90VectorReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90VectorReader.java
index 370c9f0..58fc919 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90VectorReader.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene90/Lucene90VectorReader.java
@@ -67,20 +67,28 @@ public final class Lucene90VectorReader extends VectorReader {
 
     int versionMeta = readMetadata(state, Lucene90VectorFormat.META_EXTENSION);
     long[] checksumRef = new long[1];
-    vectorData =
-        openDataInput(
-            state,
-            versionMeta,
-            Lucene90VectorFormat.VECTOR_DATA_EXTENSION,
-            Lucene90VectorFormat.VECTOR_DATA_CODEC_NAME,
-            checksumRef);
-    vectorIndex =
-        openDataInput(
-            state,
-            versionMeta,
-            Lucene90VectorFormat.VECTOR_INDEX_EXTENSION,
-            Lucene90VectorFormat.VECTOR_INDEX_CODEC_NAME,
-            checksumRef);
+    boolean success = false;
+    try {
+      vectorData =
+          openDataInput(
+              state,
+              versionMeta,
+              Lucene90VectorFormat.VECTOR_DATA_EXTENSION,
+              Lucene90VectorFormat.VECTOR_DATA_CODEC_NAME,
+              checksumRef);
+      vectorIndex =
+          openDataInput(
+              state,
+              versionMeta,
+              Lucene90VectorFormat.VECTOR_INDEX_EXTENSION,
+              Lucene90VectorFormat.VECTOR_INDEX_CODEC_NAME,
+              checksumRef);
+      success = true;
+    } finally {
+      if (success == false) {
+        IOUtils.closeWhileHandlingException(this);
+      }
+    }
     checksumSeed = checksumRef[0];
   }
 
@@ -116,37 +124,28 @@ public final class Lucene90VectorReader extends VectorReader {
       String codecName,
       long[] checksumRef)
       throws IOException {
-    boolean success = false;
-
     String fileName =
         IndexFileNames.segmentFileName(state.segmentInfo.name, state.segmentSuffix, fileExtension);
     IndexInput in = state.directory.openInput(fileName, state.context);
-    try {
-      int versionVectorData =
-          CodecUtil.checkIndexHeader(
-              in,
-              codecName,
-              Lucene90VectorFormat.VERSION_START,
-              Lucene90VectorFormat.VERSION_CURRENT,
-              state.segmentInfo.getId(),
-              state.segmentSuffix);
-      if (versionMeta != versionVectorData) {
-        throw new CorruptIndexException(
-            "Format versions mismatch: meta="
-                + versionMeta
-                + ", "
-                + codecName
-                + "="
-                + versionVectorData,
-            in);
-      }
-      checksumRef[0] = CodecUtil.retrieveChecksum(in);
-      success = true;
-    } finally {
-      if (!success) {
-        IOUtils.closeWhileHandlingException(in);
-      }
-    }
+    int versionVectorData =
+        CodecUtil.checkIndexHeader(
+            in,
+            codecName,
+            Lucene90VectorFormat.VERSION_START,
+            Lucene90VectorFormat.VERSION_CURRENT,
+            state.segmentInfo.getId(),
+            state.segmentSuffix);
+    if (versionMeta != versionVectorData) {
+      throw new CorruptIndexException(
+          "Format versions mismatch: meta="
+              + versionMeta
+              + ", "
+              + codecName
+              + "="
+              + versionVectorData,
+          in);
+    }
+    checksumRef[0] = CodecUtil.retrieveChecksum(in);
     return in;
   }