You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2011/08/19 16:38:51 UTC
svn commit: r1159649 -
/lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/AutoCommitTest.java
Author: markrmiller
Date: Fri Aug 19 14:38:50 2011
New Revision: 1159649
URL: http://svn.apache.org/viewvc?rev=1159649&view=rev
Log:
try to harden this test more
Modified:
lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/AutoCommitTest.java
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/AutoCommitTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/AutoCommitTest.java?rev=1159649&r1=1159648&r2=1159649&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/AutoCommitTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/AutoCommitTest.java Fri Aug 19 14:38:50 2011
@@ -31,10 +31,24 @@ import org.apache.solr.handler.XmlUpdate
import org.apache.solr.request.SolrQueryRequestBase;
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.search.SolrIndexSearcher;
+import org.apache.solr.update.NewSearcherListener.TriggerOn;
import org.apache.solr.util.AbstractSolrTestCase;
class NewSearcherListener implements SolrEventListener {
+
+ enum TriggerOn {Both, Soft, Hard}
+
private volatile boolean triggered = false;
+ private volatile TriggerOn lastType;
+ private volatile TriggerOn triggerOnType;
+
+ public NewSearcherListener() {
+ this(TriggerOn.Both);
+ }
+
+ public NewSearcherListener(TriggerOn type) {
+ this.triggerOnType = type;
+ }
@Override
public void init(NamedList args) {}
@@ -42,14 +56,24 @@ class NewSearcherListener implements Sol
@Override
public void newSearcher(SolrIndexSearcher newSearcher,
SolrIndexSearcher currentSearcher) {
- triggered = true;
+ if (triggerOnType == TriggerOn.Soft && lastType == TriggerOn.Soft) {
+ triggered = true;
+ } else if (triggerOnType == TriggerOn.Hard && lastType == TriggerOn.Hard) {
+ triggered = true;
+ } else if (triggerOnType == TriggerOn.Both) {
+ triggered = true;
+ }
}
@Override
- public void postCommit() {}
+ public void postCommit() {
+ lastType = TriggerOn.Hard;
+ }
@Override
- public void postSoftCommit() {}
+ public void postSoftCommit() {
+ lastType = TriggerOn.Soft;
+ }
public void reset() {
triggered = false;
@@ -217,20 +241,26 @@ public class AutoCommitTest extends Abst
public void testSoftCommitMaxDocs() throws Exception {
SolrCore core = h.getCore();
- NewSearcherListener trigger = new NewSearcherListener();
+ NewSearcherListener trigger = new NewSearcherListener(TriggerOn.Hard);
+ core.registerNewSearcherListener(trigger);
+
DirectUpdateHandler2 updateHandler = (DirectUpdateHandler2)core.getUpdateHandler();
+ updateHandler.registerCommitCallback(trigger);
+
CommitTracker tracker = updateHandler.commitTracker;
tracker.setTimeUpperBound(-1);
tracker.setDocsUpperBound(8);
- NewSearcherListener softTrigger = new NewSearcherListener();
-
+ NewSearcherListener softTrigger = new NewSearcherListener(TriggerOn.Soft);
+ updateHandler.registerSoftCommitCallback(softTrigger);
+ core.registerNewSearcherListener(softTrigger);
+
CommitTracker softTracker = updateHandler.softCommitTracker;
softTracker.setTimeUpperBound(-1);
softTracker.setDocsUpperBound(4);
- core.registerNewSearcherListener(softTrigger);
+
XmlUpdateRequestHandler handler = new XmlUpdateRequestHandler();
handler.init( null );
@@ -254,8 +284,7 @@ public class AutoCommitTest extends Abst
handler.handleRequest( req, rsp );
assertTrue(softTrigger.waitForNewSearcher(10000));
-
- core.registerNewSearcherListener(trigger);
+ softTrigger.reset();
assertQ("should find 5", req("*:*") ,"//result[@numFound=5]" );
assertEquals( 1, softTracker.getCommitCount());
@@ -279,6 +308,8 @@ public class AutoCommitTest extends Abst
}
req.close();
+ assertTrue(softTrigger.waitForNewSearcher(10000));
+ softTrigger.reset();
assertTrue(trigger.waitForNewSearcher(10000));
assertQ("should find 10", req("*:*") ,"//result[@numFound=10]" );
@@ -365,17 +396,25 @@ public class AutoCommitTest extends Abst
public void testSoftAndHardCommitMaxTime() throws Exception {
SolrCore core = h.getCore();
- NewSearcherListener trigger = new NewSearcherListener();
- core.registerNewSearcherListener(trigger);
+ NewSearcherListener softTrigger = new NewSearcherListener(TriggerOn.Soft);
+ NewSearcherListener hardTrigger = new NewSearcherListener(TriggerOn.Hard);
+ core.registerNewSearcherListener(softTrigger);
+ core.registerNewSearcherListener(hardTrigger);
DirectUpdateHandler2 updater = (DirectUpdateHandler2) core.getUpdateHandler();
+
+ updater.registerCommitCallback(softTrigger);
+ updater.registerSoftCommitCallback(softTrigger);
+ updater.registerCommitCallback(hardTrigger);
+ updater.registerSoftCommitCallback(hardTrigger);
+
CommitTracker hardTracker = updater.commitTracker;
CommitTracker softTracker = updater.softCommitTracker;
// too low of a number can cause a slow host to commit before the test code checks that it
// isn't there... causing a failure at "shouldn't find any"
- softTracker.setTimeUpperBound(100);
+ softTracker.setTimeUpperBound(300);
softTracker.setDocsUpperBound(-1);
- hardTracker.setTimeUpperBound(500);
+ hardTracker.setTimeUpperBound(1200);
hardTracker.setDocsUpperBound(-1);
// updater.commitCallbacks.add(trigger);
@@ -389,15 +428,15 @@ public class AutoCommitTest extends Abst
SolrQueryRequestBase req = new SolrQueryRequestBase( core, params ) {};
req.setContentStreams( toContentStreams(
adoc("id", "529", "field_t", "what's inside?", "subject", "info"), null ) );
- trigger.reset();
+
handler.handleRequest( req, rsp );
// Check if it is in the index
assertQ("shouldn't find any", req("id:529") ,"//result[@numFound=0]" );
// Wait longer than the autocommit time
- assertTrue(trigger.waitForNewSearcher(30000));
- trigger.reset();
+ assertTrue(softTrigger.waitForNewSearcher(30000));
+ softTrigger.reset();
req.setContentStreams( toContentStreams(
adoc("id", "530", "field_t", "what's inside?", "subject", "info"), null ) );
handler.handleRequest( req, rsp );
@@ -410,9 +449,12 @@ public class AutoCommitTest extends Abst
// Delete the document
assertU( delI("529") );
assertQ("deleted, but should still be there", req("id:529") ,"//result[@numFound=1]" );
- // Wait longer than the autocommit time
- assertTrue(trigger.waitForNewSearcher(15000));
- trigger.reset();
+
+ // Wait longer than the autocommit time - wait twice to ensure latest is picked up
+ assertTrue(softTrigger.waitForNewSearcher(15000));
+ softTrigger.reset();
+
+
req.setContentStreams( toContentStreams(
adoc("id", "550", "field_t", "what's inside?", "subject", "info"), null ) );
handler.handleRequest( req, rsp );
@@ -430,8 +472,8 @@ public class AutoCommitTest extends Abst
assertQ("should not be there yet", req("id:500") ,"//result[@numFound=0]" );
// Wait longer than the autocommit time
- assertTrue(trigger.waitForNewSearcher(15000));
- trigger.reset();
+ assertTrue(softTrigger.waitForNewSearcher(15000));
+ softTrigger.reset();
req.setContentStreams( toContentStreams(
adoc("id", "531", "field_t", "what's inside?", "subject", "info"), null ) );
@@ -441,12 +483,19 @@ public class AutoCommitTest extends Abst
int softCommitCnt = softTracker.getCommitCount();
assertTrue("commit cnt:" + softCommitCnt, softCommitCnt == 2
|| softCommitCnt == 3);
+
// depending on timing, you might see 1 or 2 hard commits
+ assertTrue(hardTrigger.waitForNewSearcher(15000));
+ hardTrigger.reset();
+
int hardCommitCnt = hardTracker.getCommitCount();
assertTrue("commit cnt:" + hardCommitCnt, hardCommitCnt == 1
|| hardCommitCnt == 2);
+ assertTrue(softTrigger.waitForNewSearcher(15000));
+ softTrigger.reset();
+
assertQ("now it should", req("id:500") ,"//result[@numFound=1]" );
- assertQ("but not this", req("id:531") ,"//result[@numFound=0]" );
+ assertQ("but not this", req("id:531") ,"//result[@numFound=1]" );
}
}