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 2009/02/19 10:32:01 UTC
svn commit: r745788 - in /lucene/java/branches/lucene_2_4: ./ CHANGES.txt
src/java/org/apache/lucene/index/IndexWriter.java
src/test/org/apache/lucene/index/TestIndexWriter.java
Author: mikemccand
Date: Thu Feb 19 09:32:00 2009
New Revision: 745788
URL: http://svn.apache.org/viewvc?rev=745788&view=rev
Log:
LUCENE-1429 (on 2.4 branch): don't throw IllegalStateEx during close() after hitting OOME when autoCommit=true
Modified:
lucene/java/branches/lucene_2_4/ (props changed)
lucene/java/branches/lucene_2_4/CHANGES.txt
lucene/java/branches/lucene_2_4/src/java/org/apache/lucene/index/IndexWriter.java
lucene/java/branches/lucene_2_4/src/test/org/apache/lucene/index/TestIndexWriter.java
Propchange: lucene/java/branches/lucene_2_4/
------------------------------------------------------------------------------
svn:mergeinfo = /lucene/java/trunk:708549
Modified: lucene/java/branches/lucene_2_4/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_2_4/CHANGES.txt?rev=745788&r1=745787&r2=745788&view=diff
==============================================================================
--- lucene/java/branches/lucene_2_4/CHANGES.txt (original)
+++ lucene/java/branches/lucene_2_4/CHANGES.txt Thu Feb 19 09:32:00 2009
@@ -11,6 +11,10 @@
numbers). This bug was introduced with LUCENE-1219. (Andrzej
Bialecki via Mike McCandless).
+2. LUCENE-1429: Don't throw incorrect IllegalStateException from
+ IndexWriter.close() if you've hit an OOM when autoCommit is true.
+ (Mike McCandless)
+
======================= Release 2.4.0 2008-10-06 =======================
Changes in backwards compatibility policy
Modified: lucene/java/branches/lucene_2_4/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_2_4/src/java/org/apache/lucene/index/IndexWriter.java?rev=745788&r1=745787&r2=745788&view=diff
==============================================================================
--- lucene/java/branches/lucene_2_4/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/java/branches/lucene_2_4/src/java/org/apache/lucene/index/IndexWriter.java Thu Feb 19 09:32:00 2009
@@ -1575,17 +1575,16 @@
*/
public void close(boolean waitForMerges) throws CorruptIndexException, IOException {
- // If any methods have hit OutOfMemoryError, then abort
- // on close, in case the internal state of IndexWriter
- // or DocumentsWriter is corrupt
- if (hitOOM) {
- rollback();
- return;
- }
-
// Ensure that only one thread actually gets to do the closing:
- if (shouldClose())
- closeInternal(waitForMerges);
+ if (shouldClose()) {
+ // If any methods have hit OutOfMemoryError, then abort
+ // on close, in case the internal state of IndexWriter
+ // or DocumentsWriter is corrupt
+ if (hitOOM)
+ rollbackInternal();
+ else
+ closeInternal(waitForMerges);
+ }
}
// Returns true if this thread should attempt to close, or
@@ -3297,6 +3296,9 @@
* @deprecated please call {@link #commit()}) instead
*/
public final void flush() throws CorruptIndexException, IOException {
+ if (hitOOM)
+ throw new IllegalStateException("this writer hit an OutOfMemoryError; cannot flush");
+
flush(true, false, true);
}
Modified: lucene/java/branches/lucene_2_4/src/test/org/apache/lucene/index/TestIndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/java/branches/lucene_2_4/src/test/org/apache/lucene/index/TestIndexWriter.java?rev=745788&r1=745787&r2=745788&view=diff
==============================================================================
--- lucene/java/branches/lucene_2_4/src/test/org/apache/lucene/index/TestIndexWriter.java (original)
+++ lucene/java/branches/lucene_2_4/src/test/org/apache/lucene/index/TestIndexWriter.java Thu Feb 19 09:32:00 2009
@@ -20,6 +20,8 @@
import java.io.IOException;
import java.io.Reader;
import java.io.File;
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
@@ -4140,4 +4142,30 @@
dir.close();
}
}
+
+ // LUCENE-1429
+ public void testOutOfMemoryErrorCausesCloseToFail() throws Exception {
+
+ final List thrown = new ArrayList();
+
+ final IndexWriter writer = new IndexWriter(new MockRAMDirectory(), new StandardAnalyzer()) {
+ public void message(final String message) {
+ if (message.startsWith("now flush at close") && 0 == thrown.size()) {
+ thrown.add(null);
+ throw new OutOfMemoryError("fake OOME at " + message);
+ }
+ }
+ };
+
+ // need to set an info stream so message is called
+ writer.setInfoStream(new PrintStream(new ByteArrayOutputStream()));
+ try {
+ writer.close();
+ fail("OutOfMemoryError expected");
+ }
+ catch (final OutOfMemoryError expected) {}
+
+ // throws IllegalStateEx w/o bug fix
+ writer.close();
+ }
}