You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2011/11/17 23:32:33 UTC

svn commit: r1203398 - in /lucene/dev/trunk/lucene/src: java/org/apache/lucene/index/ java/org/apache/lucene/index/codecs/lucene40/ java/org/apache/lucene/index/codecs/sep/ java/org/apache/lucene/util/ test-framework/java/org/apache/lucene/index/codecs...

Author: mikemccand
Date: Thu Nov 17 22:32:32 2011
New Revision: 1203398

URL: http://svn.apache.org/viewvc?rev=1203398&view=rev
Log:
fix a few cases where we fail to close IO if we hit exc during init

Modified:
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocFieldProcessor.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/lucene40/Lucene40PostingsWriter.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/sep/SepPostingsWriter.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/IOUtils.java
    lucene/dev/trunk/lucene/src/test-framework/java/org/apache/lucene/index/codecs/preflexrw/PreFlexFieldsWriter.java
    lucene/dev/trunk/lucene/src/test-framework/java/org/apache/lucene/index/codecs/preflexrw/TermInfosWriter.java
    lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestTransactions.java

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocFieldProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocFieldProcessor.java?rev=1203398&r1=1203397&r2=1203398&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocFieldProcessor.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DocFieldProcessor.java Thu Nov 17 22:32:32 2011
@@ -112,12 +112,8 @@ final class DocFieldProcessor extends Do
         field = next;
       }
     }
-    try {
-      IOUtils.closeWhileHandlingException(perDocConsumers.values());
-      // TODO add abort to PerDocConsumer!
-    } catch (IOException e) {
-      // ignore on abort!
-    }
+    IOUtils.closeWhileHandlingException(perDocConsumers.values());
+    // TODO add abort to PerDocConsumer!
     
     try {
       fieldsWriter.abort();

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/lucene40/Lucene40PostingsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/lucene40/Lucene40PostingsWriter.java?rev=1203398&r1=1203397&r2=1203398&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/lucene40/Lucene40PostingsWriter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/lucene40/Lucene40PostingsWriter.java Thu Nov 17 22:32:32 2011
@@ -26,8 +26,8 @@ import java.util.List;
 
 import org.apache.lucene.index.CorruptIndexException;
 import org.apache.lucene.index.DocsEnum;
-import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.FieldInfo.IndexOptions;
+import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.IndexFileNames;
 import org.apache.lucene.index.SegmentWriteState;
 import org.apache.lucene.index.codecs.PostingsWriterBase;
@@ -36,6 +36,7 @@ import org.apache.lucene.store.IndexOutp
 import org.apache.lucene.store.RAMOutputStream;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.CodecUtil;
+import org.apache.lucene.util.IOUtils;
 
 /** @lucene.experimental */
 public final class Lucene40PostingsWriter extends PostingsWriterBase {
@@ -92,14 +93,22 @@ public final class Lucene40PostingsWrite
     // this.segment = state.segmentName;
     String fileName = IndexFileNames.segmentFileName(state.segmentName, state.segmentSuffix, Lucene40PostingsFormat.FREQ_EXTENSION);
     freqOut = state.directory.createOutput(fileName, state.context);
-    if (state.fieldInfos.hasProx()) {
-      // At least one field does not omit TF, so create the
-      // prox file
-      fileName = IndexFileNames.segmentFileName(state.segmentName, state.segmentSuffix, Lucene40PostingsFormat.PROX_EXTENSION);
-      proxOut = state.directory.createOutput(fileName, state.context);
-    } else {
-      // Every field omits TF so we will write no prox file
-      proxOut = null;
+    boolean success = false;
+    try {
+      if (state.fieldInfos.hasProx()) {
+        // At least one field does not omit TF, so create the
+        // prox file
+        fileName = IndexFileNames.segmentFileName(state.segmentName, state.segmentSuffix, Lucene40PostingsFormat.PROX_EXTENSION);
+        proxOut = state.directory.createOutput(fileName, state.context);
+      } else {
+        // Every field omits TF so we will write no prox file
+        proxOut = null;
+      }
+      success = true;
+    } finally {
+      if (!success) {
+        IOUtils.closeWhileHandlingException(freqOut);
+      }
     }
 
     totalNumDocs = state.numDocs;

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/sep/SepPostingsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/sep/SepPostingsWriter.java?rev=1203398&r1=1203397&r2=1203398&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/sep/SepPostingsWriter.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/codecs/sep/SepPostingsWriter.java Thu Nov 17 22:32:32 2011
@@ -151,7 +151,6 @@ public final class SepPostingsWriter ext
       if (!success) {
         IOUtils.closeWhileHandlingException(docOut, skipOut, freqOut, posOut, payloadOut);
       }
-
     }
   }
 

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/IOUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/IOUtils.java?rev=1203398&r1=1203397&r2=1203398&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/IOUtils.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/util/IOUtils.java Thu Nov 17 22:32:32 2011
@@ -190,7 +190,7 @@ public final class IOUtils {
    * @param objects
    *          objects to call <tt>close()</tt> on
    */
-  public static void closeWhileHandlingException(Closeable... objects) throws IOException {
+  public static void closeWhileHandlingException(Closeable... objects) {
     for (Closeable object : objects) {
       try {
         if (object != null) {
@@ -204,7 +204,7 @@ public final class IOUtils {
   /**
    * @see #closeWhileHandlingException(Closeable...)
    */
-  public static void closeWhileHandlingException(Iterable<? extends Closeable> objects) throws IOException {
+  public static void closeWhileHandlingException(Iterable<? extends Closeable> objects) {
     for (Closeable object : objects) {
       try {
         if (object != null) {

Modified: lucene/dev/trunk/lucene/src/test-framework/java/org/apache/lucene/index/codecs/preflexrw/PreFlexFieldsWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test-framework/java/org/apache/lucene/index/codecs/preflexrw/PreFlexFieldsWriter.java?rev=1203398&r1=1203397&r2=1203398&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test-framework/java/org/apache/lucene/index/codecs/preflexrw/PreFlexFieldsWriter.java (original)
+++ lucene/dev/trunk/lucene/src/test-framework/java/org/apache/lucene/index/codecs/preflexrw/PreFlexFieldsWriter.java Thu Nov 17 22:32:32 2011
@@ -50,15 +50,31 @@ class PreFlexFieldsWriter extends Fields
                                    state.fieldInfos,
                                    state.termIndexInterval);
 
-    final String freqFile = IndexFileNames.segmentFileName(state.segmentName, "", Lucene3xPostingsFormat.FREQ_EXTENSION);
-    freqOut = state.directory.createOutput(freqFile, state.context);
-    totalNumDocs = state.numDocs;
-
-    if (state.fieldInfos.hasProx()) {
-      final String proxFile = IndexFileNames.segmentFileName(state.segmentName, "", Lucene3xPostingsFormat.PROX_EXTENSION);
-      proxOut = state.directory.createOutput(proxFile, state.context);
-    } else {
-      proxOut = null;
+    boolean success = false;
+    try {
+      final String freqFile = IndexFileNames.segmentFileName(state.segmentName, "", Lucene3xPostingsFormat.FREQ_EXTENSION);
+      freqOut = state.directory.createOutput(freqFile, state.context);
+      totalNumDocs = state.numDocs;
+      success = true;
+    } finally {
+      if (!success) {
+        IOUtils.closeWhileHandlingException(termsOut);
+      }
+    }
+
+    success = false;
+    try {
+      if (state.fieldInfos.hasProx()) {
+        final String proxFile = IndexFileNames.segmentFileName(state.segmentName, "", Lucene3xPostingsFormat.PROX_EXTENSION);
+        proxOut = state.directory.createOutput(proxFile, state.context);
+      } else {
+        proxOut = null;
+      }
+      success = true;
+    } finally {
+      if (!success) {
+        IOUtils.closeWhileHandlingException(termsOut, freqOut);
+      }
     }
 
     skipListWriter = new DefaultSkipListWriter(termsOut.skipInterval,

Modified: lucene/dev/trunk/lucene/src/test-framework/java/org/apache/lucene/index/codecs/preflexrw/TermInfosWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test-framework/java/org/apache/lucene/index/codecs/preflexrw/TermInfosWriter.java?rev=1203398&r1=1203397&r2=1203398&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test-framework/java/org/apache/lucene/index/codecs/preflexrw/TermInfosWriter.java (original)
+++ lucene/dev/trunk/lucene/src/test-framework/java/org/apache/lucene/index/codecs/preflexrw/TermInfosWriter.java Thu Nov 17 22:32:32 2011
@@ -92,17 +92,12 @@ final class TermInfosWriter implements C
     initialize(directory, segment, fis, interval, false);
     boolean success = false;
     try {
-    other = new TermInfosWriter(directory, segment, fis, interval, true);
-    other.other = this;
+      other = new TermInfosWriter(directory, segment, fis, interval, true);
+      other.other = this;
       success = true;
     } finally {
       if (!success) {
-        try {
-          IOUtils.closeWhileHandlingException(output);
-        } catch (IOException e) {
-          // cannot happen since we suppress exceptions
-          throw new RuntimeException(e);
-        }
+        IOUtils.closeWhileHandlingException(output);
 
         try {
           directory.deleteFile(IndexFileNames.segmentFileName(segment, "",
@@ -129,21 +124,16 @@ final class TermInfosWriter implements C
             : Lucene3xPostingsFormat.TERMS_EXTENSION)), IOContext.DEFAULT);
     boolean success = false;
     try {
-    output.writeInt(FORMAT_CURRENT);              // write format
-    output.writeLong(0);                          // leave space for size
-    output.writeInt(indexInterval);               // write indexInterval
-    output.writeInt(skipInterval);                // write skipInterval
-    output.writeInt(maxSkipLevels);               // write maxSkipLevels
-    assert initUTF16Results();
+      output.writeInt(FORMAT_CURRENT);              // write format
+      output.writeLong(0);                          // leave space for size
+      output.writeInt(indexInterval);               // write indexInterval
+      output.writeInt(skipInterval);                // write skipInterval
+      output.writeInt(maxSkipLevels);               // write maxSkipLevels
+      assert initUTF16Results();
       success = true;
     } finally {
       if (!success) {
-        try {
-          IOUtils.closeWhileHandlingException(output);
-        } catch (IOException e) {
-          // cannot happen since we suppress exceptions
-          throw new RuntimeException(e);
-        }
+        IOUtils.closeWhileHandlingException(output);
 
         try {
           directory.deleteFile(IndexFileNames.segmentFileName(segment, "",

Modified: lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestTransactions.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestTransactions.java?rev=1203398&r1=1203397&r2=1203398&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestTransactions.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestTransactions.java Thu Nov 17 22:32:32 2011
@@ -37,8 +37,9 @@ public class TestTransactions extends Lu
   private class RandomFailure extends MockDirectoryWrapper.Failure {
     @Override
     public void eval(MockDirectoryWrapper dir) throws IOException {
-      if (TestTransactions.doFail && random.nextInt() % 10 <= 3)
+      if (TestTransactions.doFail && random.nextInt() % 10 <= 3) {
         throw new IOException("now failing randomly but on purpose");
+      }
     }
   }