Author: ryan
Date: Wed Sep 19 12:53:11 2007
New Revision: 577427
URL: http://svn.apache.org/viewvc?rev=577427&view=rev
Log:
SOLR-260 -- adding solrj tests for fast concurrent updates. With the commited
low number for threads and docs, these would not always fail. But increasing
the number takes a long time to run.
I think we should leave it low and let people increase the value for
performance testing... these will fail if something is amiss with concurancy
even at low numbers.
Added:
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/LargeVolumeTestBase.java
(with props)
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/embedded/LargeVolumeEmbeddedTest.java
(with props)
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/embedded/LargeVolumeJettyTest.java
(with props)
Added:
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/LargeVolumeTestBase.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/LargeVolumeTestBase.java?rev=577427&view=auto
==============================================================================
---
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/LargeVolumeTestBase.java
(added)
+++
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/LargeVolumeTestBase.java
Wed Sep 19 12:53:11 2007
@@ -0,0 +1,110 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.client.solrj;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.client.solrj.response.UpdateResponse;
+import org.apache.solr.common.SolrInputDocument;
+import org.junit.Assert;
+
+/**
+ * @version $Id$
+ * @since solr 1.3
+ */
+public abstract class LargeVolumeTestBase extends SolrExampleTestBase
+{
+ SolrServer gserver = null;
+
+ // for real load testing, make these numbers bigger
+ static final int numdocs = 100; //1000 * 1000;
+ static final int threadCount = 5;
+
+ public void testMultiThreaded() throws Exception {
+ gserver = this.getSolrServer();
+ DocThread[] threads = new DocThread[threadCount];
+ for (int i=0; i<threadCount; i++) {
+ threads[i] = new DocThread( "T"+i+":" );
+ threads[i].setName("DocThread-" + i);
+ threads[i].start();
+ System.out.println("Started thread: " + i);
+ }
+ for (int i=0; i<threadCount; i++) {
+ threads[i].join();
+ }
+
+ query(threadCount * numdocs);
+ System.out.println("done");
+ }
+
+ private void query(int count) throws SolrServerException, IOException {
+ SolrQuery query = new SolrQuery("*:*");
+ QueryResponse response = gserver.query(query);
+ Assert.assertEquals(0, response.getStatus());
+ Assert.assertEquals(count, response.getResults().getNumFound());
+ }
+
+ public class DocThread extends Thread {
+
+ final SolrServer tserver;
+ final String name;
+
+ public DocThread( String name )
+ {
+ tserver = createNewSolrServer();
+ this.name = name;
+ }
+
+ @Override
+ public void run() {
+ try {
+ UpdateResponse resp = null;
+ List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
+ for (int i = 0; i < numdocs; i++) {
+ if (i > 0 && i % 200 == 0) {
+ resp = tserver.add(docs);
+ assertEquals(0, resp.getStatus());
+ docs = new ArrayList<SolrInputDocument>();
+ }
+ if (i > 0 && i % 5000 == 0) {
+ System.out.println(getName() + " - Committing " + i);
+ resp = tserver.commit();
+ assertEquals(0, resp.getStatus());
+ }
+ SolrInputDocument doc = new SolrInputDocument();
+ doc.addField("id", name+i );
+ doc.addField("cat", "foocat");
+ docs.add(doc);
+ }
+ resp = tserver.add(docs);
+ assertEquals(0, resp.getStatus());
+ resp = tserver.commit();
+ assertEquals(0, resp.getStatus());
+ resp = tserver.optimize();
+ assertEquals(0, resp.getStatus());
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ Assert.fail( getName() + "---" + e.getMessage() );
+ }
+ }
+ }
+}
Propchange:
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/LargeVolumeTestBase.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/LargeVolumeTestBase.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added:
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/embedded/LargeVolumeEmbeddedTest.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/embedded/LargeVolumeEmbeddedTest.java?rev=577427&view=auto
==============================================================================
---
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/embedded/LargeVolumeEmbeddedTest.java
(added)
+++
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/embedded/LargeVolumeEmbeddedTest.java
Wed Sep 19 12:53:11 2007
@@ -0,0 +1,50 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.client.solrj.embedded;
+
+import org.apache.solr.client.solrj.LargeVolumeTestBase;
+import org.apache.solr.client.solrj.SolrServer;
+
+/**
+ * @version $Id$
+ * @since solr 1.3
+ */
+public class LargeVolumeEmbeddedTest extends LargeVolumeTestBase {
+
+ SolrServer server;
+
+ @Override public void setUp() throws Exception
+ {
+ super.setUp();
+
+ // setup the server...
+ server = createNewSolrServer();
+ }
+
+ @Override
+ protected SolrServer getSolrServer()
+ {
+ return server;
+ }
+
+ @Override
+ protected SolrServer createNewSolrServer()
+ {
+ return new EmbeddedSolrServer( h.getCore() );
+ }
+}
Propchange:
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/embedded/LargeVolumeEmbeddedTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/embedded/LargeVolumeEmbeddedTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Added:
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/embedded/LargeVolumeJettyTest.java
URL:
http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/embedded/LargeVolumeJettyTest.java?rev=577427&view=auto
==============================================================================
---
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/embedded/LargeVolumeJettyTest.java
(added)
+++
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/embedded/LargeVolumeJettyTest.java
Wed Sep 19 12:53:11 2007
@@ -0,0 +1,93 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.client.solrj.embedded;
+
+import org.apache.solr.client.solrj.LargeVolumeTestBase;
+import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
+import org.apache.solr.core.SolrCore;
+import org.apache.solr.schema.SchemaField;
+
+/**
+ * @version $Id$
+ * @since solr 1.3
+ */
+public class LargeVolumeJettyTest extends LargeVolumeTestBase {
+
+ SolrServer server;
+ JettySolrRunner jetty;
+
+ static final int port = 8984; // not 8983
+ static final String context = "/example";
+
+
+ @Override public void setUp() throws Exception
+ {
+ super.setUp();
+
+ SolrCore c = SolrCore.getSolrCore();
+ System.out.println( c.getConfigFile() );
+ System.out.println( c.getSolrConfig().configFile );
+ System.out.println( c.getSchema().getFields() );
+
+ try {
+ SchemaField f = c.getSchema().getField( "cat" );
+ System.out.println( f );
+ }
+ catch( Exception ex ) {
+ ex.printStackTrace();
+ }
+ System.out.println( "---" );
+
+
+ jetty = new JettySolrRunner( context, port );
+ jetty.start();
+
+ server = this.createNewSolrServer();
+ }
+
+ @Override public void tearDown() throws Exception
+ {
+ super.tearDown();
+ jetty.stop(); // stop the server
+ }
+
+
+ @Override
+ protected SolrServer getSolrServer()
+ {
+ return server;
+ }
+
+ @Override
+ protected SolrServer createNewSolrServer()
+ {
+ try {
+ // setup the server...
+ String url = "http://localhost:"+port+context;
+ CommonsHttpSolrServer s = new CommonsHttpSolrServer( url );
+ s.setConnectionTimeout(5);
+ s.setDefaultMaxConnectionsPerHost(100);
+ s.setMaxTotalConnections(100);
+ return s;
+ }
+ catch( Exception ex ) {
+ throw new RuntimeException( ex );
+ }
+ }
+}
Propchange:
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/embedded/LargeVolumeJettyTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
lucene/solr/trunk/client/java/solrj/test/org/apache/solr/client/solrj/embedded/LargeVolumeJettyTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL