Index: src/test/org/apache/lucene/index/TestConcurrentMergeScheduler.java =================================================================== --- src/test/org/apache/lucene/index/TestConcurrentMergeScheduler.java (revision 612979) +++ src/test/org/apache/lucene/index/TestConcurrentMergeScheduler.java (working copy) @@ -76,10 +76,8 @@ writer.addDocument(doc); } - // Even though this won't delete any docs, - // IndexWriter's flush will still make a clone for all - // SegmentInfos on hitting the exception: - writer.deleteDocuments(new Term("id", "1000")); + writer.addDocument(doc); + failure.setDoFail(); try { writer.flush(); Index: src/test/org/apache/lucene/index/TestIndexWriter.java =================================================================== --- src/test/org/apache/lucene/index/TestIndexWriter.java (revision 612979) +++ src/test/org/apache/lucene/index/TestIndexWriter.java (working copy) @@ -2254,8 +2254,9 @@ int idUpto = 0; int fullCount = 0; + final long stopTime = System.currentTimeMillis() + 500; - while(true) { + while(System.currentTimeMillis() < stopTime) { try { writer.updateDocument(new Term("id", ""+(idUpto++)), doc); } catch (IOException ioe) { @@ -2435,13 +2436,20 @@ // Throws IOException during FieldsWriter.flushDocument and during DocumentsWriter.abort private static class FailOnlyOnAbortOrFlush extends MockRAMDirectory.Failure { + private boolean onlyOnce; + public FailOnlyOnAbortOrFlush(boolean onlyOnce) { + this.onlyOnce = true; + } public void eval(MockRAMDirectory dir) throws IOException { if (doFail) { StackTraceElement[] trace = new Exception().getStackTrace(); for (int i = 0; i < trace.length; i++) { if ("abort".equals(trace[i].getMethodName()) || - "flushDocument".equals(trace[i].getMethodName())) + "flushDocument".equals(trace[i].getMethodName())) { + if (onlyOnce) + doFail = false; throw new IOException("now failing on purpose"); + } } } } @@ -2522,11 +2530,24 @@ assertTrue("hit unexpected Throwable", threads[i].error == null); } + boolean success = false; try { writer.close(false); + success = true; } catch (IOException ioe) { } + if (success) { + IndexReader reader = IndexReader.open(dir); + for(int j=0;j