You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by mi...@apache.org on 2008/01/05 02:51:54 UTC

svn commit: r609080 - in /lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds: EnwikiDocMaker.java LineDocMaker.java

Author: mikemccand
Date: Fri Jan  4 17:51:53 2008
New Revision: 609080

URL: http://svn.apache.org/viewvc?rev=609080&view=rev
Log:
LUCENE-1117: fix intermittent thread safety issue w/ EnwikiDocMaker

Modified:
    lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiDocMaker.java
    lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/LineDocMaker.java

Modified: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiDocMaker.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiDocMaker.java?rev=609080&r1=609079&r2=609080&view=diff
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiDocMaker.java (original)
+++ lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/EnwikiDocMaker.java Fri Jan  4 17:51:53 2008
@@ -25,6 +25,7 @@
 import org.xml.sax.helpers.XMLReaderFactory;
 
 import java.io.IOException;
+import java.io.FileInputStream;
 
 import org.apache.lucene.document.Document;
 
@@ -55,16 +56,28 @@
         reader.setContentHandler(this);
         reader.setErrorHandler(this);
         while(true){
-          InputSource is = new InputSource(fileIS);
-          reader.parse(is);
-          if (!forever) {
-            synchronized(this) {
+          final FileInputStream localFileIS = fileIS;
+          try {
+            InputSource is = new InputSource(localFileIS);
+            reader.parse(is);
+          } catch (IOException ioe) {
+            synchronized(EnwikiDocMaker.this) {
+              if (localFileIS != fileIS) {
+                // fileIS was closed on us, so, just fall
+                // through
+              } else
+                // Exception is real
+                throw ioe;
+            }
+          }
+          synchronized(this) {
+            if (!forever) {
               nmde = new NoMoreDataException();
               notify();
-            }
-            return;
-          } else {
-            synchronized(this){
+              return;
+            } else if (localFileIS == fileIS) {
+              // If file is not already re-opened then
+              // re-open it now
               openFile();
             }
           }
@@ -77,16 +90,15 @@
 
     }
 
-    Parser() {
-      t = new Thread(this);
-      t.setDaemon(true);
-      t.start();
-    }
-
     String[] tuple;
     NoMoreDataException nmde;
 
     String[] next() throws NoMoreDataException {
+      if (t == null) {
+        t = new Thread(this);
+        t.setDaemon(true);
+        t.start();
+      }
       String[] result;
       synchronized(this){
         while(tuple == null && nmde == null){
@@ -96,6 +108,9 @@
           }
         }
         if (nmde != null) {
+          // Set to null so we will re-start thread in case
+          // we are re-used:
+          t = null;
           throw nmde;
         }
         result = tuple;

Modified: lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/LineDocMaker.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/LineDocMaker.java?rev=609080&r1=609079&r2=609080&view=diff
==============================================================================
--- lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/LineDocMaker.java (original)
+++ lucene/java/trunk/contrib/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/LineDocMaker.java Fri Jan  4 17:51:53 2008
@@ -101,14 +101,6 @@
     }
   }
 
-  /* (non-Javadoc)
-   * @see SimpleDocMaker#setConfig(java.util.Properties)
-   */
-  public void setConfig(Config config) {
-    super.setConfig(config);
-    resetInputs();
-  }
-
   protected DocData getNextDocData() throws Exception {
     throw new RuntimeException("not implemented");
   }
@@ -154,7 +146,7 @@
     openFile();
   }
 
-  void openFile() {
+  synchronized void openFile() {
     try {
       if (fileIn != null)
         fileIn.close();