You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by yo...@apache.org on 2009/08/27 15:24:25 UTC
svn commit: r808409 -
/lucene/solr/trunk/src/test/org/apache/solr/update/AutoCommitTest.java
Author: yonik
Date: Thu Aug 27 13:24:25 2009
New Revision: 808409
URL: http://svn.apache.org/viewvc?rev=808409&view=rev
Log:
AutoCommitTest: no more guessing about when a commit has finished
Modified:
lucene/solr/trunk/src/test/org/apache/solr/update/AutoCommitTest.java
Modified: lucene/solr/trunk/src/test/org/apache/solr/update/AutoCommitTest.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/update/AutoCommitTest.java?rev=808409&r1=808408&r2=808409&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/update/AutoCommitTest.java (original)
+++ lucene/solr/trunk/src/test/org/apache/solr/update/AutoCommitTest.java Thu Aug 27 13:24:25 2009
@@ -31,34 +31,49 @@
import org.apache.solr.request.SolrQueryRequestBase;
import org.apache.solr.request.SolrQueryResponse;
import org.apache.solr.util.AbstractSolrTestCase;
+import org.apache.solr.util.RefCounted;
-
-/** Catch commit notifications
- *
- * It is tricky to be correctly notified when commits occur: Solr's post-commit
- * hook is called after commit has completed but before the search is opened. The
- * best that can be done is wait for a post commit hook, and then wait for a little
- * longer for a new searcher to be registered.
- */
class CommitListener implements SolrEventListener {
public volatile boolean triggered = false;
+ public volatile SolrIndexSearcher currentSearcher;
+ public SolrCore core;
+
+ public CommitListener(SolrCore core) {
+ this.core = core;
+ }
+
public void init(NamedList args) {}
- public void newSearcher(SolrIndexSearcher newSearcher, SolrIndexSearcher currentSearcher) {}
+
+ public void newSearcher(SolrIndexSearcher newSearcher, SolrIndexSearcher currentSearcher) {
+ this.currentSearcher = currentSearcher;
+ triggered = true;
+ }
public void postCommit() {
triggered = true;
}
+ public void reset() {
+ triggered=false;
+ }
+
public boolean waitForCommit(int timeout) {
- triggered = false;
+ //triggered = false;
+
for (int towait=timeout; towait > 0; towait -= 250) {
try {
if (triggered) {
- Thread.sleep( 500 );
+ RefCounted<SolrIndexSearcher> holder = core.getSearcher();
+ SolrIndexSearcher s = holder.get();
+ holder.decref();
+ // since there could be two commits in a row, don't test for a specific new searcher
+ // just test that the old one has been replaced.
+ if (s != currentSearcher) return true;
+ Thread.sleep(250);
break;
}
Thread.sleep( 250 );
} catch (InterruptedException e) {}
}
- return triggered;
+ return false;
}
}
@@ -66,7 +81,7 @@
public String getSchemaFile() { return "schema.xml"; }
public String getSolrConfigFile() { return "solrconfig.xml"; }
-
+
/**
* Take a string and make it an iterable ContentStream
*
@@ -85,13 +100,14 @@
Temporarily disabled. -Mike Klaas */
public void XXXtestMaxDocs() throws Exception {
- CommitListener trigger = new CommitListener();
SolrCore core = h.getCore();
+ CommitListener trigger = new CommitListener(core);
+
DirectUpdateHandler2 updater = (DirectUpdateHandler2)core.getUpdateHandler();
DirectUpdateHandler2.CommitTracker tracker = updater.tracker;
tracker.timeUpperBound = 100000;
tracker.docsUpperBound = 14;
- updater.commitCallbacks.add(trigger);
+ // updater.commitCallbacks.add(trigger);
XmlUpdateRequestHandler handler = new XmlUpdateRequestHandler();
handler.init( null );
@@ -130,15 +146,16 @@
}
public void testMaxTime() throws Exception {
- CommitListener trigger = new CommitListener();
SolrCore core = h.getCore();
+ CommitListener trigger = new CommitListener(core);
+ core.registerNewSearcherListener(trigger);
DirectUpdateHandler2 updater = (DirectUpdateHandler2) core.getUpdateHandler();
DirectUpdateHandler2.CommitTracker tracker = updater.tracker;
// 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"
tracker.timeUpperBound = 1000;
tracker.docsUpperBound = -1;
- updater.commitCallbacks.add(trigger);
+ // updater.commitCallbacks.add(trigger);
XmlUpdateRequestHandler handler = new XmlUpdateRequestHandler();
handler.init( null );
@@ -150,13 +167,15 @@
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 it it is in the index
assertQ("shouldn't find any", req("id:529") ,"//result[@numFound=0]" );
// Wait longer than the autocommit time
- assertTrue(trigger.waitForCommit(20000));
+ assertTrue(trigger.waitForCommit(30000));
+ trigger.reset();
req.setContentStreams( toContentStreams(
adoc("id", "530", "field_t", "what's inside?", "subject", "info"), null ) );
handler.handleRequest( req, rsp );
@@ -170,7 +189,8 @@
assertU( delI("529") );
assertQ("deleted, but should still be there", req("id:529") ,"//result[@numFound=1]" );
// Wait longer than the autocommit time
- assertTrue(trigger.waitForCommit(20000));
+ assertTrue(trigger.waitForCommit(30000));
+ trigger.reset();
req.setContentStreams( toContentStreams(
adoc("id", "550", "field_t", "what's inside?", "subject", "info"), null ) );
handler.handleRequest( req, rsp );
@@ -187,7 +207,9 @@
assertQ("should not be there yet", req("id:500") ,"//result[@numFound=0]" );
// Wait longer than the autocommit time
- assertTrue(trigger.waitForCommit(20000));
+ assertTrue(trigger.waitForCommit(30000));
+ trigger.reset();
+
req.setContentStreams( toContentStreams(
adoc("id", "531", "field_t", "what's inside?", "subject", "info"), null ) );
handler.handleRequest( req, rsp );