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/09/29 04:55:49 UTC

svn commit: r819804 - in /lucene/solr/trunk/src: test/org/apache/solr/client/solrj/embedded/MultiCoreExampleJettyTest.java webapp/src/org/apache/solr/client/solrj/embedded/JettySolrRunner.java

Author: yonik
Date: Tue Sep 29 02:55:49 2009
New Revision: 819804

URL: http://svn.apache.org/viewvc?rev=819804&view=rev
Log:
tests: try and prevent some spurious test failures that may be happening because jetty/solr isn't ready

Modified:
    lucene/solr/trunk/src/test/org/apache/solr/client/solrj/embedded/MultiCoreExampleJettyTest.java
    lucene/solr/trunk/src/webapp/src/org/apache/solr/client/solrj/embedded/JettySolrRunner.java

Modified: lucene/solr/trunk/src/test/org/apache/solr/client/solrj/embedded/MultiCoreExampleJettyTest.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/test/org/apache/solr/client/solrj/embedded/MultiCoreExampleJettyTest.java?rev=819804&r1=819803&r2=819804&view=diff
==============================================================================
--- lucene/solr/trunk/src/test/org/apache/solr/client/solrj/embedded/MultiCoreExampleJettyTest.java (original)
+++ lucene/solr/trunk/src/test/org/apache/solr/client/solrj/embedded/MultiCoreExampleJettyTest.java Tue Sep 29 02:55:49 2009
@@ -41,7 +41,7 @@
     super.setUp();
 
     jetty = new JettySolrRunner( context, 0 );
-    jetty.start();
+    jetty.start(false);
     port = jetty.getLocalPort();
 
     h.getCoreContainer().setPersistent(false);    

Modified: lucene/solr/trunk/src/webapp/src/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/src/webapp/src/org/apache/solr/client/solrj/embedded/JettySolrRunner.java?rev=819804&r1=819803&r2=819804&view=diff
==============================================================================
--- lucene/solr/trunk/src/webapp/src/org/apache/solr/client/solrj/embedded/JettySolrRunner.java (original)
+++ lucene/solr/trunk/src/webapp/src/org/apache/solr/client/solrj/embedded/JettySolrRunner.java Tue Sep 29 02:55:49 2009
@@ -18,6 +18,8 @@
 package org.apache.solr.client.solrj.embedded;
 
 import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
 
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
@@ -41,6 +43,7 @@
 {
   Server server;
   FilterHolder dispatchFilter;
+  String context;
   
   public JettySolrRunner( String context, int port )
   {
@@ -70,6 +73,7 @@
   
   private void init( String context, int port )
   {
+    this.context = context;
     server = new Server( port );    
     server.setStopAtShutdown( true );
     
@@ -86,11 +90,18 @@
   
   public void start() throws Exception
   {
+    start(true);
+  }
+
+  public void start(boolean waitForSolr) throws Exception
+  {
     if(!server.isRunning() ) {
       server.start();
     }
+    if (waitForSolr) waitForSolr(context);
   }
-  
+
+
   public void stop() throws Exception
   {
     if( server.isRunning() ) {
@@ -99,6 +110,35 @@
     }
   }
 
+  /** Waits until a ping query to the solr server succeeds,
+   * retrying every 200 milliseconds for a total of 20 seconds.
+   */
+  public void waitForSolr(String context) throws Exception
+  {
+    int port = getLocalPort();
+
+    // A raw term query type doesn't check the schema
+    URL url = new URL("http://localhost:"+port+context+"/select?q={!raw+f=junit_test_query}ping");
+
+    Exception ex = null;
+    // Wait for a total of 20 seconds: 100 tries, 200 milliseconds each
+    for (int i=0; i<100; i++) {
+      try {
+        InputStream stream = url.openStream();
+        stream.close();
+      } catch (IOException e) {
+        e.printStackTrace();
+        ex = e;
+        Thread.sleep(200);
+        continue;
+      }
+
+      return;
+    }
+
+    throw new RuntimeException("Jetty/Solr unresponsive",ex);
+  }
+
   /**
    * Returns the Local Port of the first Connector found for the jetty Server.
    * @exception RuntimeException if there is no Connector
@@ -110,7 +150,7 @@
     }
     return conns[0].getLocalPort();
   }
-  
+
   //--------------------------------------------------------------
   //--------------------------------------------------------------