From 9524cc42338b9cd837d152205385c7093cc93c8a Mon Sep 17 00:00:00 2001 From: Simon Willnauer Date: Wed, 17 Jun 2020 23:27:39 +0200 Subject: [PATCH] LUCENE-9408: roll back only called once enforcement --- .../src/java/org/apache/lucene/index/MergePolicy.java | 11 +++++++---- .../test/org/apache/lucene/index/TestMergePolicy.java | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java b/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java index ca324a2309e..e9757905d2f 100644 --- a/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java +++ b/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java @@ -252,13 +252,16 @@ public abstract class MergePolicy { public void mergeInit() throws IOException { mergeProgress.setMergeThread(Thread.currentThread()); } - + + private Exception originalClosed; /** Called by {@link IndexWriter} after the merge is done and all readers have been closed. * @param success true iff the merge finished successfully ie. was committed */ public void mergeFinished(boolean success) throws IOException { - if (mergeCompleted.complete(success) == false) { - throw new IllegalStateException("merge has already finished"); - } + mergeCompleted.complete(success); + // https://issues.apache.org/jira/browse/LUCENE-9408 + // if (mergeCompleted.complete(success) == false) { + // throw new IllegalStateException("merge has already finished", originalClosed); + // } } /** Wrap the reader in order to add/remove information to the merged segment. */ diff --git a/lucene/core/src/test/org/apache/lucene/index/TestMergePolicy.java b/lucene/core/src/test/org/apache/lucene/index/TestMergePolicy.java index c252da019d6..e5f5635e1f1 100644 --- a/lucene/core/src/test/org/apache/lucene/index/TestMergePolicy.java +++ b/lucene/core/src/test/org/apache/lucene/index/TestMergePolicy.java @@ -110,6 +110,7 @@ public class TestMergePolicy extends LuceneTestCase { } } + @AwaitsFix(bugUrl = "https://issues.apache.org/jira/browse/LUCENE-9408") public void testFinishTwice() throws IOException { try (Directory dir = newDirectory()) { MergePolicy.MergeSpecification spec = createRandomMergeSpecification(dir, 1);