Return-Path: X-Original-To: apmail-lucene-commits-archive@www.apache.org Delivered-To: apmail-lucene-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 5E65DCFB9 for ; Tue, 11 Jun 2013 17:57:12 +0000 (UTC) Received: (qmail 53752 invoked by uid 500); 11 Jun 2013 17:57:12 -0000 Mailing-List: contact commits-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@lucene.apache.org Delivered-To: mailing list commits@lucene.apache.org Received: (qmail 53745 invoked by uid 99); 11 Jun 2013 17:57:12 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 11 Jun 2013 17:57:12 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 11 Jun 2013 17:57:08 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id F1CF62388847; Tue, 11 Jun 2013 17:56:47 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1491889 - in /lucene/dev/trunk/lucene: ./ core/src/java/org/apache/lucene/codecs/compressing/ Date: Tue, 11 Jun 2013 17:56:47 -0000 To: commits@lucene.apache.org From: jpountz@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130611175647.F1CF62388847@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: jpountz Date: Tue Jun 11 17:56:47 2013 New Revision: 1491889 URL: http://svn.apache.org/r1491889 Log: LUCENE-5050: Close the stored fields and term vectors index files eagerly. Modified: lucene/dev/trunk/lucene/CHANGES.txt lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingStoredFieldsIndexReader.java lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingStoredFieldsReader.java lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java Modified: lucene/dev/trunk/lucene/CHANGES.txt URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1491889&r1=1491888&r2=1491889&view=diff ============================================================================== --- lucene/dev/trunk/lucene/CHANGES.txt (original) +++ lucene/dev/trunk/lucene/CHANGES.txt Tue Jun 11 17:56:47 2013 @@ -174,6 +174,9 @@ Optimizations * LUCENE-4941: Sort "from" terms only once when using JoinUtil. (Martijn van Groningen) +* LUCENE-5050: Close the stored fields and term vectors index files as soon as + the index has been loaded into memory to save file descriptors. (Adrien Grand) + New Features * LUCENE-4766: Added a PatternCaptureGroupTokenFilter that uses Java regexes to Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingStoredFieldsIndexReader.java URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingStoredFieldsIndexReader.java?rev=1491889&r1=1491888&r2=1491889&view=diff ============================================================================== --- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingStoredFieldsIndexReader.java (original) +++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingStoredFieldsIndexReader.java Tue Jun 11 17:56:47 2013 @@ -17,7 +17,6 @@ package org.apache.lucene.codecs.compres * limitations under the License. */ -import java.io.Closeable; import java.io.IOException; import java.util.Arrays; @@ -25,16 +24,13 @@ import org.apache.lucene.index.CorruptIn import org.apache.lucene.index.SegmentInfo; import org.apache.lucene.store.IndexInput; import org.apache.lucene.util.ArrayUtil; -import org.apache.lucene.util.IOUtils; import org.apache.lucene.util.packed.PackedInts; /** * Random-access reader for {@link CompressingStoredFieldsIndexWriter}. * @lucene.internal */ -public final class CompressingStoredFieldsIndexReader implements Closeable, Cloneable { - - final IndexInput fieldsIndexIn; +public final class CompressingStoredFieldsIndexReader implements Cloneable { static long moveLowOrderBitToSign(long n) { return ((n >>> 1) ^ -(n & 1)); @@ -48,8 +44,9 @@ public final class CompressingStoredFiel final PackedInts.Reader[] docBasesDeltas; // delta from the avg final PackedInts.Reader[] startPointersDeltas; // delta from the avg + // It is the responsibility of the caller to close fieldsIndexIn after this constructor + // has been called CompressingStoredFieldsIndexReader(IndexInput fieldsIndexIn, SegmentInfo si) throws IOException { - this.fieldsIndexIn = fieldsIndexIn; maxDoc = si.getDocCount(); int[] docBases = new int[16]; long[] startPointers = new long[16]; @@ -106,17 +103,6 @@ public final class CompressingStoredFiel this.startPointersDeltas = Arrays.copyOf(startPointersDeltas, blockCount); } - private CompressingStoredFieldsIndexReader(CompressingStoredFieldsIndexReader other) { - this.fieldsIndexIn = null; - this.maxDoc = other.maxDoc; - this.docBases = other.docBases; - this.startPointers = other.startPointers; - this.avgChunkDocs = other.avgChunkDocs; - this.avgChunkSizes = other.avgChunkSizes; - this.docBasesDeltas = other.docBasesDeltas; - this.startPointersDeltas = other.startPointersDeltas; - } - private int block(int docID) { int lo = 0, hi = docBases.length - 1; while (lo <= hi) { @@ -172,16 +158,7 @@ public final class CompressingStoredFiel @Override public CompressingStoredFieldsIndexReader clone() { - if (fieldsIndexIn == null) { - return this; - } else { - return new CompressingStoredFieldsIndexReader(this); - } - } - - @Override - public void close() throws IOException { - IOUtils.close(fieldsIndexIn); + return this; } } Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingStoredFieldsReader.java URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingStoredFieldsReader.java?rev=1491889&r1=1491888&r2=1491889&view=diff ============================================================================== --- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingStoredFieldsReader.java (original) +++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingStoredFieldsReader.java Tue Jun 11 17:56:47 2013 @@ -96,20 +96,23 @@ public final class CompressingStoredFiel numDocs = si.getDocCount(); IndexInput indexStream = null; try { - fieldsStream = d.openInput(IndexFileNames.segmentFileName(segment, segmentSuffix, FIELDS_EXTENSION), context); + // Load the index into memory final String indexStreamFN = IndexFileNames.segmentFileName(segment, segmentSuffix, FIELDS_INDEX_EXTENSION); indexStream = d.openInput(indexStreamFN, context); - final String codecNameIdx = formatName + CODEC_SFX_IDX; - final String codecNameDat = formatName + CODEC_SFX_DAT; CodecUtil.checkHeader(indexStream, codecNameIdx, VERSION_START, VERSION_CURRENT); - CodecUtil.checkHeader(fieldsStream, codecNameDat, VERSION_START, VERSION_CURRENT); - assert CodecUtil.headerLength(codecNameDat) == fieldsStream.getFilePointer(); assert CodecUtil.headerLength(codecNameIdx) == indexStream.getFilePointer(); - indexReader = new CompressingStoredFieldsIndexReader(indexStream, si); + indexStream.close(); indexStream = null; + // Open the data file and read metadata + final String fieldsStreamFN = IndexFileNames.segmentFileName(segment, segmentSuffix, FIELDS_EXTENSION); + fieldsStream = d.openInput(fieldsStreamFN, context); + final String codecNameDat = formatName + CODEC_SFX_DAT; + CodecUtil.checkHeader(fieldsStream, codecNameDat, VERSION_START, VERSION_CURRENT); + assert CodecUtil.headerLength(codecNameDat) == fieldsStream.getFilePointer(); + packedIntsVersion = fieldsStream.readVInt(); decompressor = compressionMode.newDecompressor(); this.bytes = new BytesRef(); @@ -137,7 +140,7 @@ public final class CompressingStoredFiel @Override public void close() throws IOException { if (!closed) { - IOUtils.close(fieldsStream, indexReader); + IOUtils.close(fieldsStream); closed = true; } } Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java?rev=1491889&r1=1491888&r2=1491889&view=diff ============================================================================== --- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java (original) +++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/codecs/compressing/CompressingTermVectorsReader.java Tue Jun 11 17:56:47 2013 @@ -102,20 +102,23 @@ public final class CompressingTermVector numDocs = si.getDocCount(); IndexInput indexStream = null; try { - vectorsStream = d.openInput(IndexFileNames.segmentFileName(segment, segmentSuffix, VECTORS_EXTENSION), context); + // Load the index into memory final String indexStreamFN = IndexFileNames.segmentFileName(segment, segmentSuffix, VECTORS_INDEX_EXTENSION); indexStream = d.openInput(indexStreamFN, context); - final String codecNameIdx = formatName + CODEC_SFX_IDX; - final String codecNameDat = formatName + CODEC_SFX_DAT; CodecUtil.checkHeader(indexStream, codecNameIdx, VERSION_START, VERSION_CURRENT); - CodecUtil.checkHeader(vectorsStream, codecNameDat, VERSION_START, VERSION_CURRENT); - assert CodecUtil.headerLength(codecNameDat) == vectorsStream.getFilePointer(); assert CodecUtil.headerLength(codecNameIdx) == indexStream.getFilePointer(); - indexReader = new CompressingStoredFieldsIndexReader(indexStream, si); + indexStream.close(); indexStream = null; + // Open the data file and read metadata + final String vectorsStreamFN = IndexFileNames.segmentFileName(segment, segmentSuffix, VECTORS_EXTENSION); + vectorsStream = d.openInput(vectorsStreamFN, context); + final String codecNameDat = formatName + CODEC_SFX_DAT; + CodecUtil.checkHeader(vectorsStream, codecNameDat, VERSION_START, VERSION_CURRENT); + assert CodecUtil.headerLength(codecNameDat) == vectorsStream.getFilePointer(); + packedIntsVersion = vectorsStream.readVInt(); chunkSize = vectorsStream.readVInt(); decompressor = compressionMode.newDecompressor(); @@ -161,7 +164,7 @@ public final class CompressingTermVector @Override public void close() throws IOException { if (!closed) { - IOUtils.close(vectorsStream, indexReader); + IOUtils.close(vectorsStream); closed = true; } }