You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2012/07/03 10:44:01 UTC
svn commit: r1356614 - in /lucene/dev/trunk: ./ lucene/ lucene/core/
lucene/core/src/java/org/apache/lucene/store/CompoundFileDirectory.java
Author: uschindler
Date: Tue Jul 3 08:44:00 2012
New Revision: 1356614
URL: http://svn.apache.org/viewvc?rev=1356614&view=rev
Log:
Merged revision(s) 1356608 from lucene/dev/branches/branch_4x:
LUCENE-4183: Cleanup CFS reader exeption handling
Modified:
lucene/dev/trunk/ (props changed)
lucene/dev/trunk/lucene/ (props changed)
lucene/dev/trunk/lucene/core/ (props changed)
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/store/CompoundFileDirectory.java
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/store/CompoundFileDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/store/CompoundFileDirectory.java?rev=1356614&r1=1356613&r2=1356614&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/store/CompoundFileDirectory.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/store/CompoundFileDirectory.java Tue Jul 3 08:44:00 2012
@@ -122,50 +122,43 @@ public final class CompoundFileDirectory
/** Helper method that reads CFS entries from an input stream */
private static final Map<String, FileEntry> readEntries(
IndexInputSlicer handle, Directory dir, String name) throws IOException {
- final IndexInput stream = handle.openFullSlice();
- final Map<String, FileEntry> mapping;
- boolean success = false;
+ IOException priorE = null;
+ IndexInput stream = null, entriesStream = null;
try {
+ stream = handle.openFullSlice();
final int firstInt = stream.readInt();
// NOTE: as long as we want to throw indexformattooold (vs corruptindexexception), we need
// to read the magic ourselves. See SegmentInfos which also has this.
if (firstInt == CodecUtil.CODEC_MAGIC) {
CodecUtil.checkHeaderNoMagic(stream, CompoundFileWriter.DATA_CODEC,
CompoundFileWriter.VERSION_START, CompoundFileWriter.VERSION_START);
- IndexInput input = null;
- try {
- final String entriesFileName = IndexFileNames.segmentFileName(
- IndexFileNames.stripExtension(name), "",
- IndexFileNames.COMPOUND_FILE_ENTRIES_EXTENSION);
- input = dir.openInput(entriesFileName, IOContext.READONCE);
- CodecUtil.checkHeader(input, CompoundFileWriter.ENTRY_CODEC, CompoundFileWriter.VERSION_START, CompoundFileWriter.VERSION_START);
- final int numEntries = input.readVInt();
- mapping = new HashMap<String, CompoundFileDirectory.FileEntry>(
- numEntries);
- for (int i = 0; i < numEntries; i++) {
- final FileEntry fileEntry = new FileEntry();
- final String id = input.readString();
- assert !mapping.containsKey(id): "id=" + id + " was written multiple times in the CFS";
- mapping.put(id, fileEntry);
- fileEntry.offset = input.readLong();
- fileEntry.length = input.readLong();
- }
- success = true;
- return mapping;
- } finally {
- IOUtils.close(input);
+ final String entriesFileName = IndexFileNames.segmentFileName(
+ IndexFileNames.stripExtension(name), "",
+ IndexFileNames.COMPOUND_FILE_ENTRIES_EXTENSION);
+ entriesStream = dir.openInput(entriesFileName, IOContext.READONCE);
+ CodecUtil.checkHeader(entriesStream, CompoundFileWriter.ENTRY_CODEC, CompoundFileWriter.VERSION_START, CompoundFileWriter.VERSION_START);
+ final int numEntries = entriesStream.readVInt();
+ final Map<String, FileEntry> mapping = new HashMap<String,FileEntry>(numEntries);
+ for (int i = 0; i < numEntries; i++) {
+ final FileEntry fileEntry = new FileEntry();
+ final String id = entriesStream.readString();
+ assert !mapping.containsKey(id): "id=" + id + " was written multiple times in the CFS";
+ mapping.put(id, fileEntry);
+ fileEntry.offset = entriesStream.readLong();
+ fileEntry.length = entriesStream.readLong();
}
+ return mapping;
} else {
throw new IndexFormatTooOldException(stream, firstInt,
CodecUtil.CODEC_MAGIC, CodecUtil.CODEC_MAGIC);
}
+ } catch (IOException ioe) {
+ priorE = ioe;
} finally {
- if (success) {
- IOUtils.close(stream);
- } else {
- IOUtils.closeWhileHandlingException(stream);
- }
+ IOUtils.closeWhileHandlingException(priorE, stream, entriesStream);
}
+ // this is needed until Java 7's real try-with-resources:
+ throw new AssertionError("impossible to get here");
}
public Directory getDirectory() {