Index: lucene/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java =================================================================== --- lucene/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java (revision 1026425) +++ lucene/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java (working copy) @@ -183,7 +183,15 @@ } finally { if (reader != null) reader.close(); reader = null; - if (writer != null) writer.close(); + if (writer != null) { + try { + writer.close(); + } catch (IndexFormatTooOldException e) { + // OK -- since IW gives merge scheduler a chance + // to merge at close, it's possible and fine to + // hit this exc here + } + } writer = null; } Index: lucene/src/java/org/apache/lucene/index/IndexWriter.java =================================================================== --- lucene/src/java/org/apache/lucene/index/IndexWriter.java (revision 1026431) +++ lucene/src/java/org/apache/lucene/index/IndexWriter.java (working copy) @@ -3662,7 +3662,7 @@ // This merge (and, generally, any change to the // segments) may now enable new merges, so we call // merge policy & update pending merges. - if (success && !merge.isAborted() && !closed && !closing) { + if (success && !merge.isAborted() && (merge.optimize || (!closed && !closing))) { updatePendingMerges(merge.maxNumSegmentsOptimize, merge.optimize); } }