mirror of https://github.com/apache/lucene.git
SOLR-9486: Fix race in AutoCommitTest
This commit is contained in:
parent
255bf895b3
commit
6687244667
|
@ -20,6 +20,7 @@ import java.lang.invoke.MethodHandles;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import org.apache.lucene.util.LuceneTestCase.Slow;
|
import org.apache.lucene.util.LuceneTestCase.Slow;
|
||||||
|
@ -49,6 +50,8 @@ class NewSearcherListener implements SolrEventListener {
|
||||||
private volatile TriggerOn triggerOnType;
|
private volatile TriggerOn triggerOnType;
|
||||||
private volatile SolrIndexSearcher newSearcher;
|
private volatile SolrIndexSearcher newSearcher;
|
||||||
|
|
||||||
|
private CountDownLatch latch;
|
||||||
|
|
||||||
public NewSearcherListener() {
|
public NewSearcherListener() {
|
||||||
this(TriggerOn.Both);
|
this(TriggerOn.Both);
|
||||||
}
|
}
|
||||||
|
@ -63,6 +66,7 @@ class NewSearcherListener implements SolrEventListener {
|
||||||
@Override
|
@Override
|
||||||
public void newSearcher(SolrIndexSearcher newSearcher,
|
public void newSearcher(SolrIndexSearcher newSearcher,
|
||||||
SolrIndexSearcher currentSearcher) {
|
SolrIndexSearcher currentSearcher) {
|
||||||
|
waitForTrigger();
|
||||||
if (triggerOnType == TriggerOn.Soft && lastType == TriggerOn.Soft) {
|
if (triggerOnType == TriggerOn.Soft && lastType == TriggerOn.Soft) {
|
||||||
triggered = true;
|
triggered = true;
|
||||||
} else if (triggerOnType == TriggerOn.Hard && lastType == TriggerOn.Hard) {
|
} else if (triggerOnType == TriggerOn.Hard && lastType == TriggerOn.Hard) {
|
||||||
|
@ -84,6 +88,29 @@ class NewSearcherListener implements SolrEventListener {
|
||||||
lastType = TriggerOn.Soft;
|
lastType = TriggerOn.Soft;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void waitForTrigger() {
|
||||||
|
if (latch != null) {
|
||||||
|
try {
|
||||||
|
if (latch.await(30, TimeUnit.SECONDS) == false) {
|
||||||
|
throw new AssertionError("Timed out waiting for search trigger to be released");
|
||||||
|
}
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
throw new AssertionError("Interrupted waiting for new searcher");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void pause() {
|
||||||
|
latch = new CountDownLatch(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unpause() {
|
||||||
|
if (latch != null) {
|
||||||
|
latch.countDown();
|
||||||
|
latch = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void reset() {
|
public void reset() {
|
||||||
triggered = false;
|
triggered = false;
|
||||||
// log.info("TEST: trigger reset");
|
// log.info("TEST: trigger reset");
|
||||||
|
@ -316,6 +343,7 @@ public class AutoCommitTest extends AbstractSolrTestCase {
|
||||||
assertQ("shouldn't find any", req("id:530") ,"//result[@numFound=0]" );
|
assertQ("shouldn't find any", req("id:530") ,"//result[@numFound=0]" );
|
||||||
|
|
||||||
// Delete one document with commitWithin
|
// Delete one document with commitWithin
|
||||||
|
trigger.pause();
|
||||||
req.setContentStreams( toContentStreams(
|
req.setContentStreams( toContentStreams(
|
||||||
delI("529", "commitWithin", "2000"), null ) );
|
delI("529", "commitWithin", "2000"), null ) );
|
||||||
trigger.reset();
|
trigger.reset();
|
||||||
|
@ -323,6 +351,7 @@ public class AutoCommitTest extends AbstractSolrTestCase {
|
||||||
|
|
||||||
// Now make sure we can find it
|
// Now make sure we can find it
|
||||||
assertQ("should find one", req("id:529") ,"//result[@numFound=1]" );
|
assertQ("should find one", req("id:529") ,"//result[@numFound=1]" );
|
||||||
|
trigger.unpause();
|
||||||
|
|
||||||
// Wait for the commit to happen
|
// Wait for the commit to happen
|
||||||
assertTrue("commitWithin failed to commit", trigger.waitForNewSearcher(30000));
|
assertTrue("commitWithin failed to commit", trigger.waitForNewSearcher(30000));
|
||||||
|
|
|
@ -90,6 +90,7 @@ public class HardAutoCommitTest extends AbstractSolrTestCase {
|
||||||
assertQ("shouldn't find any", req("id:530") ,"//result[@numFound=0]" );
|
assertQ("shouldn't find any", req("id:530") ,"//result[@numFound=0]" );
|
||||||
|
|
||||||
// Delete one document with commitWithin
|
// Delete one document with commitWithin
|
||||||
|
trigger.pause();
|
||||||
req.setContentStreams( AutoCommitTest.toContentStreams(
|
req.setContentStreams( AutoCommitTest.toContentStreams(
|
||||||
delI("529", "commitWithin", "1000"), null ) );
|
delI("529", "commitWithin", "1000"), null ) );
|
||||||
trigger.reset();
|
trigger.reset();
|
||||||
|
@ -97,6 +98,7 @@ public class HardAutoCommitTest extends AbstractSolrTestCase {
|
||||||
|
|
||||||
// Now make sure we can find it
|
// Now make sure we can find it
|
||||||
assertQ("should find one", req("id:529") ,"//result[@numFound=1]" );
|
assertQ("should find one", req("id:529") ,"//result[@numFound=1]" );
|
||||||
|
trigger.unpause();
|
||||||
|
|
||||||
// Wait for the commit to happen
|
// Wait for the commit to happen
|
||||||
assertTrue("commitWithin failed to commit", trigger.waitForNewSearcher(30000));
|
assertTrue("commitWithin failed to commit", trigger.waitForNewSearcher(30000));
|
||||||
|
|
Loading…
Reference in New Issue