Author: srowen
Date: Wed Nov 12 04:43:18 2008
New Revision: 713356

URL: http://svn.apache.org/viewvc?rev=713356&view=rev
Log:
Ensure readers are closed in BayesFileFormatter and tighten up close() logic a 
little elsewhere

Modified:
    
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/BayesFileFormatter.java
    
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/io/SequenceFileModelReader.java
    
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/ga/watchmaker/OutputUtils.java
    
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/WeightedDistanceMeasure.java

Modified: 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/BayesFileFormatter.java
URL: 
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/BayesFileFormatter.java?rev=713356&r1=713355&r2=713356&view=diff
==============================================================================
--- 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/BayesFileFormatter.java
 (original)
+++ 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/BayesFileFormatter.java
 Wed Nov 12 04:43:18 2008
@@ -26,7 +26,6 @@
 import org.apache.commons.cli2.OptionException;
 import org.apache.commons.cli2.commandline.Parser;
 import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.analysis.CharArraySet;
 import org.apache.lucene.analysis.Token;
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.analysis.standard.StandardAnalyzer;
@@ -42,6 +41,7 @@
 import java.io.OutputStreamWriter;
 import java.io.Reader;
 import java.io.Writer;
+import java.io.Closeable;
 import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
@@ -72,10 +72,12 @@
       Charset charset, File outputFile) throws IOException {
     Writer writer = new OutputStreamWriter(new FileOutputStream(outputFile),
         charset);
-    inputDir.listFiles(new FileProcessor(label, analyzer, charset, writer));
-    // listFiles() is called here as a way to recursively visit files, actually
-    writer.close();
-
+    try {
+      inputDir.listFiles(new FileProcessor(label, analyzer, charset, writer));
+      // listFiles() is called here as a way to recursively visit files, 
actually
+    } finally {
+      quietClose(writer);
+    }
   }
 
   /**
@@ -96,9 +98,11 @@
     } else {
       Writer writer = new OutputStreamWriter(new FileOutputStream(new File(
           outDir, input.getName())), charset);
-      writeFile(label, analyzer, new InputStreamReader(new FileInputStream(
-          input), charset), writer);
-      writer.close();
+      try {
+        writeFile(label, analyzer, input, charset, writer);
+      } finally {
+        quietClose(writer);
+      }
     }
   }
 
@@ -151,27 +155,26 @@
 
     public boolean accept(File file) {
       if (file.isFile()) {
+        Writer theWriter = null;
         try {
-          Writer theWriter;
           if (writer == null) {
             theWriter = new OutputStreamWriter(new FileOutputStream(new File(
                 outputDir, file.getName())), charset);
           } else {
             theWriter = writer;
           }
-          writeFile(label, analyzer, new InputStreamReader(new FileInputStream(
-              file), charset), theWriter);
-          if (writer == null) {
-            theWriter.close();// we are writing a single file per input file
-          } else {
+          writeFile(label, analyzer, file, charset, theWriter);
+          if (writer != null) {
             // just write a new line
             theWriter.write(LINE_SEP);
-
           }
-
         } catch (IOException e) {
           // TODO: report failed files instead of throwing exception
           throw new RuntimeException(e);
+        } finally {
+          if (writer == null) {
+            quietClose(theWriter);
+          }
         }
       } else {
         file.listFiles(this);
@@ -185,31 +188,39 @@
    * 
    * @param label The label
    * @param analyzer The analyzer to use
-   * @param reader The reader to pass to the Analyzer
+   * @param inFile the file to read and whose contents are passed to the 
analyzer
+   * @param charset character encoding to assume when reading the input file
    * @param writer The Writer, is not closed by this method
    * @throws java.io.IOException if there was a problem w/ the reader
    */
-  public static void writeFile(String label, Analyzer analyzer, Reader reader,
-      Writer writer) throws IOException {
-    TokenStream ts = analyzer.tokenStream(label, reader);
-    writer.write(label);
-    writer.write('\t'); // edit: Inorder to match Hadoop standard
-    // TextInputFormat
-    Token token = new Token();
-    //CharArraySet seen = new CharArraySet(256, false);
-    //long numTokens = 0;
-    while ((token = ts.next(token)) != null) {
-      char[] termBuffer = token.termBuffer();
-      int termLen = token.termLength();   
-       
-      writer.write(termBuffer, 0, termLen);
-      writer.write(' ');
-      //char[] tmp = new char[termLen];
-      //System.arraycopy(termBuffer, 0, tmp, 0, termLen);
-      //seen.add(tmp);// do this b/c CharArraySet doesn't allow offsets
+  private static void writeFile(String label, Analyzer analyzer, File inFile,
+      Charset charset, Writer writer) throws IOException {
+    Reader reader = new InputStreamReader(new FileInputStream(inFile), 
charset);
+    try {
+      TokenStream ts = analyzer.tokenStream(label, reader);
+      writer.write(label);
+      writer.write('\t'); // edit: Inorder to match Hadoop standard
+      // TextInputFormat
+      Token token = new Token();
+      while ((token = ts.next(token)) != null) {
+        char[] termBuffer = token.termBuffer();
+        int termLen = token.termLength();
+        writer.write(termBuffer, 0, termLen);
+        writer.write(' ');
+      }
+    } finally {
+      quietClose(reader);
     }
-    ///numTokens++;
+  }
 
+  private static void quietClose(Closeable closeable) {
+    if (closeable != null) {
+      try {
+        closeable.close();
+      } catch (IOException ioe) {
+        // continue
+      }
+    }
   }
 
   /**

Modified: 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/io/SequenceFileModelReader.java
URL: 
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/io/SequenceFileModelReader.java?rev=713356&r1=713355&r2=713356&view=diff
==============================================================================
--- 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/io/SequenceFileModelReader.java
 (original)
+++ 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/io/SequenceFileModelReader.java
 Wed Nov 12 04:43:18 2008
@@ -192,26 +192,28 @@
         Text.class, DoubleWritable.class);
     MapFile.Writer.setIndexInterval(conf, 3);
 
-    FileStatus[] outputFiles = fs.globStatus(pathPattern);
-    for (FileStatus fileStatus : outputFiles) {
-      Path path = fileStatus.getPath();
-      log.info("{}", path);
-      SequenceFile.Reader reader = new SequenceFile.Reader(fs, path, conf);
-      // the key is either _label_ or label,feature
-      while (reader.next(key, value)) {
-        String keyStr = key.toString();
-        if (!keyStr.startsWith("_") && !keyStr.startsWith(",") && 
!keyStr.startsWith("*")) {
-          int idx = keyStr.indexOf(',');
-          if (idx != -1) {
-            //Map<String,Double> data = new HashMap<String,Double>();
-            //data.put(keyStr.substring(0, idx), value.get());
-            writer.append(new Text(key.toString()), value);
+    try {
+      FileStatus[] outputFiles = fs.globStatus(pathPattern);
+      for (FileStatus fileStatus : outputFiles) {
+        Path path = fileStatus.getPath();
+        log.info("{}", path);
+        SequenceFile.Reader reader = new SequenceFile.Reader(fs, path, conf);
+        // the key is either _label_ or label,feature
+        while (reader.next(key, value)) {
+          String keyStr = key.toString();
+          if (!keyStr.startsWith("_") && !keyStr.startsWith(",") && 
!keyStr.startsWith("*")) {
+            int idx = keyStr.indexOf(',');
+            if (idx != -1) {
+              //Map<String,Double> data = new HashMap<String,Double>();
+              //data.put(keyStr.substring(0, idx), value.get());
+              writer.append(new Text(key.toString()), value);
+            }
           }
         }
       }
+    } finally {
+      writer.close();
     }
-    writer.close();
-    // return model;
   }
 
   public Map<String,Double> readLabelSums(FileSystem fs, Path pathPattern, 
Configuration conf) throws IOException {

Modified: 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/ga/watchmaker/OutputUtils.java
URL: 
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/ga/watchmaker/OutputUtils.java?rev=713356&r1=713355&r2=713356&view=diff
==============================================================================
--- 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/ga/watchmaker/OutputUtils.java
 (original)
+++ 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/ga/watchmaker/OutputUtils.java
 Wed Nov 12 04:43:18 2008
@@ -104,12 +104,13 @@
     LongWritable key = new LongWritable();
     DoubleWritable value = new DoubleWritable();
     Reader reader = new Reader(fs, output, conf);
-
-    while (reader.next(key, value)) {
-      evaluations.add(value.get());
+    try {
+      while (reader.next(key, value)) {
+        evaluations.add(value.get());
+      }
+    } finally {
+      reader.close();
     }
-
-    reader.close();
   }
 
 }

Modified: 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/WeightedDistanceMeasure.java
URL: 
http://svn.apache.org/viewvc/lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/WeightedDistanceMeasure.java?rev=713356&r1=713355&r2=713356&view=diff
==============================================================================
--- 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/WeightedDistanceMeasure.java
 (original)
+++ 
lucene/mahout/trunk/core/src/main/java/org/apache/mahout/utils/WeightedDistanceMeasure.java
 Wed Nov 12 04:43:18 2008
@@ -67,8 +67,11 @@
           throw new FileNotFoundException(weightsFile.get().toString());
         }
         DataInputStream in = fs.open(weightsFile.get());
-        weights.readFields(in);
-        in.close();
+        try {
+          weights.readFields(in);
+        } finally {
+          in.close();
+        }
         this.weights = weights;
       }
     } catch (IOException e) {


Reply via email to