Return-Path: Delivered-To: apmail-lucene-solr-commits-archive@minotaur.apache.org Received: (qmail 22982 invoked from network); 27 Aug 2009 13:24:50 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 27 Aug 2009 13:24:50 -0000 Received: (qmail 12561 invoked by uid 500); 27 Aug 2009 13:24:50 -0000 Delivered-To: apmail-lucene-solr-commits-archive@lucene.apache.org Received: (qmail 12481 invoked by uid 500); 27 Aug 2009 13:24:50 -0000 Mailing-List: contact solr-commits-help@lucene.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: solr-dev@lucene.apache.org Delivered-To: mailing list solr-commits@lucene.apache.org Received: (qmail 12472 invoked by uid 99); 27 Aug 2009 13:24:50 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 27 Aug 2009 13:24:50 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Thu, 27 Aug 2009 13:24:47 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id DDA082388852; Thu, 27 Aug 2009 13:24:25 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r808409 - /lucene/solr/trunk/src/test/org/apache/solr/update/AutoCommitTest.java Date: Thu, 27 Aug 2009 13:24:25 -0000 To: solr-commits@lucene.apache.org From: yonik@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20090827132425.DDA082388852@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org 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 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 );