You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2011/06/01 08:24:20 UTC
svn commit: r1130013 [2/2] - in /lucene/dev/branches/solr2193/solr:
example/solr/conf/ src/common/org/apache/solr/common/params/
src/java/org/apache/solr/core/ src/java/org/apache/solr/handler/
src/java/org/apache/solr/handler/component/ src/java/org/a...
Modified: lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/BasicFunctionalityTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/BasicFunctionalityTest.java?rev=1130013&r1=1130012&r2=1130013&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/BasicFunctionalityTest.java (original)
+++ lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/BasicFunctionalityTest.java Wed Jun 1 06:24:18 2011
@@ -28,9 +28,9 @@ import javax.xml.parsers.DocumentBuilder
import org.apache.lucene.document.Field;
import org.apache.lucene.document.Fieldable;
+import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.LogMergePolicy;
import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.params.AppendedSolrParams;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.DefaultSolrParams;
@@ -49,7 +49,7 @@ import org.apache.solr.schema.IndexSchem
import org.apache.solr.schema.SchemaField;
import org.apache.solr.search.DocIterator;
import org.apache.solr.search.DocList;
-import org.apache.solr.update.SolrIndexWriter;
+import org.apache.solr.update.DirectUpdateHandler2;
import org.junit.BeforeClass;
@@ -120,9 +120,8 @@ public class BasicFunctionalityTest exte
// test merge factor picked up
SolrCore core = h.getCore();
- SolrIndexWriter writer = new SolrIndexWriter("testWriter",core.getNewIndexDir(), core.getDirectoryFactory(), false, core.getSchema(), core.getSolrConfig().mainIndexConfig, core.getDeletionPolicy(), core.getCodecProvider());
- assertEquals("Mergefactor was not picked up", ((LogMergePolicy) writer.getConfig().getMergePolicy()).getMergeFactor(), 8);
- writer.close();
+ IndexWriter writer = ((DirectUpdateHandler2)core.getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
+ assertEquals("Mergefactor was not picked up", ((LogMergePolicy)writer.getConfig().getMergePolicy()).getMergeFactor(), 8);
lrf.args.put(CommonParams.VERSION,"2.2");
assertQ("test query on empty index",
Modified: lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/cloud/BasicZkTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/cloud/BasicZkTest.java?rev=1130013&r1=1130012&r2=1130013&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/cloud/BasicZkTest.java (original)
+++ lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/cloud/BasicZkTest.java Wed Jun 1 06:24:18 2011
@@ -17,11 +17,11 @@ package org.apache.solr.cloud;
* limitations under the License.
*/
+import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.LogMergePolicy;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.core.SolrCore;
-import org.apache.solr.update.SolrIndexWriter;
-
+import org.apache.solr.update.DirectUpdateHandler2;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -45,11 +45,10 @@ public class BasicZkTest extends Abstrac
// test merge factor picked up
SolrCore core = h.getCore();
- SolrIndexWriter writer = new SolrIndexWriter("testWriter", core
- .getNewIndexDir(), core.getDirectoryFactory(), false, core.getSchema(),
- core.getSolrConfig().mainIndexConfig, core.getDeletionPolicy(), core.getCodecProvider());
+
+ IndexWriter writer = ((DirectUpdateHandler2)core.getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
+
assertEquals("Mergefactor was not picked up", ((LogMergePolicy)writer.getConfig().getMergePolicy()).getMergeFactor(), 8);
- writer.close();
lrf.args.put(CommonParams.VERSION, "2.2");
assertQ("test query on empty index", req("qlkciyopsbgzyvkylsjhchghjrdf"),
Modified: lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/cloud/CloudStateUpdateTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/cloud/CloudStateUpdateTest.java?rev=1130013&r1=1130012&r2=1130013&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/cloud/CloudStateUpdateTest.java (original)
+++ lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/cloud/CloudStateUpdateTest.java Wed Jun 1 06:24:18 2011
@@ -40,7 +40,7 @@ import org.slf4j.LoggerFactory;
/**
* TODO: look at hostPort used below
*/
-public class CloudStateUpdateTest extends SolrTestCaseJ4 {
+public class CloudStateUpdateTest extends SolrTestCaseJ4 {
protected static Logger log = LoggerFactory
.getLogger(AbstractZkTestCase.class);
@@ -68,15 +68,14 @@ public class CloudStateUpdateTest extend
@BeforeClass
public static void beforeClass() throws Exception {
- initCore();
}
@Override
public void setUp() throws Exception {
super.setUp();
-
+ createTempDir();
System.setProperty("zkClientTimeout", "3000");
-
+
zkDir = dataDir.getAbsolutePath() + File.separator
+ "zookeeper/server1/data";
zkServer = new ZkTestServer(zkDir);
@@ -95,7 +94,7 @@ public class CloudStateUpdateTest extend
dataDir3 = new File(dataDir + File.separator + "data3");
dataDir3.mkdirs();
- dataDir4 = new File(dataDir + File.separator + "data3");
+ dataDir4 = new File(dataDir + File.separator + "data4");
dataDir4.mkdirs();
// set some system properties for use by tests
@@ -103,31 +102,21 @@ public class CloudStateUpdateTest extend
System.setProperty("solr.test.sys.prop2", "proptwo");
System.setProperty("hostPort", "1661");
- CoreContainer.Initializer init1 = new CoreContainer.Initializer() {
- {
- this.dataDir = CloudStateUpdateTest.this.dataDir1.getAbsolutePath();
- }
- };
-
+ CoreContainer.Initializer init1 = new CoreContainer.Initializer();
+ System.setProperty("solr.data.dir", CloudStateUpdateTest.this.dataDir1.getAbsolutePath());
container1 = init1.initialize();
System.clearProperty("hostPort");
System.setProperty("hostPort", "1662");
- init2 = new CoreContainer.Initializer() {
- {
- this.dataDir = CloudStateUpdateTest.this.dataDir2.getAbsolutePath();
- }
- };
-
+ init2 = new CoreContainer.Initializer();
+ System.setProperty("solr.data.dir", CloudStateUpdateTest.this.dataDir2.getAbsolutePath());
container2 = init2.initialize();
System.clearProperty("hostPort");
System.setProperty("hostPort", "1663");
- CoreContainer.Initializer init3 = new CoreContainer.Initializer() {
- {
- this.dataDir = CloudStateUpdateTest.this.dataDir3.getAbsolutePath();
- }
- };
+ CoreContainer.Initializer init3 = new CoreContainer.Initializer();
+
+ System.setProperty("solr.data.dir", CloudStateUpdateTest.this.dataDir3.getAbsolutePath());
container3 = init3.initialize();
System.clearProperty("hostPort");
@@ -153,6 +142,7 @@ public class CloudStateUpdateTest extend
dcore.setDataDir(dataDir4.getAbsolutePath());
SolrCore core = container1.create(dcore);
+
container1.register(core, false);
ZkController zkController2 = container2.getZkController();
@@ -226,7 +216,7 @@ public class CloudStateUpdateTest extend
assertTrue(container1.getZkController().getCloudState().liveNodesContain(
container2.getZkController().getNodeName()));
-
+ core.close();
}
@Override
Modified: lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/MockEventListener.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/MockEventListener.java?rev=1130013&r1=1130012&r2=1130013&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/MockEventListener.java (original)
+++ lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/MockEventListener.java Wed Jun 1 06:24:18 2011
@@ -40,6 +40,11 @@ public class MockEventListener implement
public void postCommit() {
/* NOOP */
}
+
+ @Override
+ public void postSoftCommit() {
+ /* NOOP */
+ }
public void newSearcher(SolrIndexSearcher newSearcher,
SolrIndexSearcher currentSearcher) {
Modified: lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestConfig.java?rev=1130013&r1=1130012&r2=1130013&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestConfig.java (original)
+++ lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestConfig.java Wed Jun 1 06:24:18 2011
@@ -115,22 +115,9 @@ public class TestConfig extends SolrTest
@Test
public void testTermIndexInterval() throws Exception {
- class ExposeWriterHandler extends DirectUpdateHandler2 {
- public ExposeWriterHandler() throws IOException {
- super(h.getCore());
- }
-
- public IndexWriter getWriter() throws IOException {
- forceOpenWriter();
- return writer;
- }
- }
-
- ExposeWriterHandler duh = new ExposeWriterHandler();
- IndexWriter writer = duh.getWriter();
+ IndexWriter writer = ((DirectUpdateHandler2)h.getCore().getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
int interval = writer.getConfig().getTermIndexInterval();
assertEquals(256, interval);
- duh.close();
}
@Test
Modified: lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestLegacyMergeSchedulerPolicyConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestLegacyMergeSchedulerPolicyConfig.java?rev=1130013&r1=1130012&r2=1130013&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestLegacyMergeSchedulerPolicyConfig.java (original)
+++ lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestLegacyMergeSchedulerPolicyConfig.java Wed Jun 1 06:24:18 2011
@@ -17,8 +17,6 @@ package org.apache.solr.core;
* limitations under the License.
*/
-import java.io.IOException;
-
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.LogDocMergePolicy;
import org.apache.lucene.index.SerialMergeScheduler;
@@ -35,21 +33,9 @@ public class TestLegacyMergeSchedulerPol
@Test
public void testLegacy() throws Exception {
- ExposeWriterHandler duh = new ExposeWriterHandler();
- IndexWriter writer = duh.getWriter();
+ IndexWriter writer = ((DirectUpdateHandler2)h.getCore().getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
assertTrue(writer.getConfig().getMergePolicy().getClass().getName().equals(LogDocMergePolicy.class.getName()));
assertTrue(writer.getConfig().getMergeScheduler().getClass().getName().equals(SerialMergeScheduler.class.getName()));
- duh.close();
}
-
- class ExposeWriterHandler extends DirectUpdateHandler2 {
- public ExposeWriterHandler() throws IOException {
- super(h.getCore());
- }
- public IndexWriter getWriter() throws IOException {
- forceOpenWriter();
- return writer;
- }
- }
}
Modified: lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestPropInject.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestPropInject.java?rev=1130013&r1=1130012&r2=1130013&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestPropInject.java (original)
+++ lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestPropInject.java Wed Jun 1 06:24:18 2011
@@ -35,31 +35,16 @@ public class TestPropInject extends Abst
public String getSolrConfigFile() {
return "solrconfig-propinject.xml";
}
-
- class ExposeWriterHandler extends DirectUpdateHandler2 {
- public ExposeWriterHandler() throws IOException {
- super(h.getCore());
- }
-
- public IndexWriter getWriter() throws IOException {
- forceOpenWriter();
- return writer;
- }
- }
public void testMergePolicy() throws Exception {
- ExposeWriterHandler uh = new ExposeWriterHandler();
- IndexWriter writer = uh.getWriter();
+ IndexWriter writer = ((DirectUpdateHandler2)h.getCore().getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
LogByteSizeMergePolicy mp = (LogByteSizeMergePolicy)writer.getConfig().getMergePolicy();
assertEquals(64.0, mp.getMaxMergeMB(), 0);
- uh.close();
}
public void testProps() throws Exception {
- ExposeWriterHandler uh = new ExposeWriterHandler();
- IndexWriter writer = uh.getWriter();
+ IndexWriter writer = ((DirectUpdateHandler2)h.getCore().getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
ConcurrentMergeScheduler cms = (ConcurrentMergeScheduler)writer.getConfig().getMergeScheduler();
assertEquals(2, cms.getMaxThreadCount());
- uh.close();
}
}
Modified: lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestPropInjectDefaults.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestPropInjectDefaults.java?rev=1130013&r1=1130012&r2=1130013&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestPropInjectDefaults.java (original)
+++ lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/core/TestPropInjectDefaults.java Wed Jun 1 06:24:18 2011
@@ -17,8 +17,6 @@ package org.apache.solr.core;
* limitations under the License.
*/
-import java.io.IOException;
-
import org.apache.lucene.index.ConcurrentMergeScheduler;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.LogByteSizeMergePolicy;
@@ -32,34 +30,19 @@ public class TestPropInjectDefaults exte
public static void beforeClass() throws Exception {
initCore("solrconfig-propinject-indexdefault.xml", "schema.xml");
}
-
- class ExposeWriterHandler extends DirectUpdateHandler2 {
- public ExposeWriterHandler() throws IOException {
- super(h.getCore());
- }
-
- public IndexWriter getWriter() throws IOException {
- forceOpenWriter();
- return writer;
- }
- }
@Test
public void testMergePolicyDefaults() throws Exception {
- ExposeWriterHandler uh = new ExposeWriterHandler();
- IndexWriter writer = uh.getWriter();
+ IndexWriter writer = ((DirectUpdateHandler2)h.getCore().getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
LogByteSizeMergePolicy mp = (LogByteSizeMergePolicy)writer.getConfig().getMergePolicy();
assertEquals(32.0, mp.getMaxMergeMB(), 0);
- uh.close();
}
@Test
public void testPropsDefaults() throws Exception {
- ExposeWriterHandler uh = new ExposeWriterHandler();
- IndexWriter writer = uh.getWriter();
+ IndexWriter writer = ((DirectUpdateHandler2)h.getCore().getUpdateHandler()).getIndexWriterProvider().getIndexWriter();
ConcurrentMergeScheduler cms = (ConcurrentMergeScheduler)writer.getConfig().getMergeScheduler();
assertEquals(4, cms.getMaxThreadCount());
- uh.close();
}
}
Modified: lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/handler/JsonLoaderTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/handler/JsonLoaderTest.java?rev=1130013&r1=1130012&r2=1130013&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/handler/JsonLoaderTest.java (original)
+++ lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/handler/JsonLoaderTest.java Wed Jun 1 06:24:18 2011
@@ -22,7 +22,6 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.noggit.JSONParser;
-import org.apache.lucene.util.LuceneTestCase;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
@@ -70,7 +69,7 @@ public class JsonLoaderTest extends Solr
"},\n" +
"\n" +
"'commit': {},\n" +
- "'optimize': { 'waitFlush':false, 'waitSearcher':false },\n" +
+ "'optimize': { 'waitSearcher':false },\n" +
"\n" +
"'delete': { 'id':'ID' },\n" +
"'delete': { 'query':'QUERY' },\n" +
@@ -109,12 +108,10 @@ public class JsonLoaderTest extends Solr
assertEquals( 2, p.commitCommands.size() );
CommitUpdateCommand commit = p.commitCommands.get( 0 );
assertFalse( commit.optimize );
- assertTrue( commit.waitFlush );
assertTrue( commit.waitSearcher );
commit = p.commitCommands.get( 1 );
assertTrue( commit.optimize );
- assertFalse( commit.waitFlush );
assertFalse( commit.waitSearcher );
Modified: lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/update/AutoCommitTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/update/AutoCommitTest.java?rev=1130013&r1=1130012&r2=1130013&view=diff
==============================================================================
--- lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/update/AutoCommitTest.java (original)
+++ lucene/dev/branches/solr2193/solr/src/test/org/apache/solr/update/AutoCommitTest.java Wed Jun 1 06:24:18 2011
@@ -42,31 +42,45 @@ class CommitListener implements SolrEven
this.core = core;
}
+ @Override
public void init(NamedList args) {}
+ @Override
public void newSearcher(SolrIndexSearcher newSearcher, SolrIndexSearcher currentSearcher) {
this.currentSearcher = currentSearcher;
triggered = true;
}
+
+ @Override
public void postCommit() {
triggered = true;
}
+
+ @Override
+ public void postSoftCommit() {
+ triggered = true;
+ }
+
public void reset() {
triggered=false;
}
- public boolean waitForCommit(int timeout) {
+ boolean waitForCommit(int timeout) {
//triggered = false;
for (int towait=timeout; towait > 0; towait -= 250) {
try {
if (triggered) {
- RefCounted<SolrIndexSearcher> holder = core.getSearcher();
+ RefCounted<SolrIndexSearcher> holder = core.getNewestSearcher(false);
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;
+ if (s != currentSearcher) {
+ // a sleep to make sure the search is fully registered ... ? It helps.
+ Thread.sleep( 250 );
+ return true;
+ }
// it may be that a commit just happened, but the new searcher hasn't been registered yet.
}
Thread.sleep( 250 );
@@ -97,51 +111,49 @@ public class AutoCommitTest extends Abst
return streams;
}
- /* This test is causing too many failures on one of the build slaves.
- Temporarily disabled. -Mike Klaas */
- public void XXXtestMaxDocs() throws Exception {
+ public void testMaxDocs() throws Exception {
SolrCore core = h.getCore();
CommitListener trigger = new CommitListener(core);
- DirectUpdateHandler2 updater = (DirectUpdateHandler2)core.getUpdateHandler();
- DirectUpdateHandler2.CommitTracker tracker = updater.tracker;
- tracker.timeUpperBound = 100000;
+ DirectUpdateHandler2 updateHandler = (DirectUpdateHandler2)core.getUpdateHandler();
+ CommitTracker tracker = updateHandler.commitTracker;
+ tracker.timeUpperBound = -1;
tracker.docsUpperBound = 14;
- // updater.commitCallbacks.add(trigger);
+ updateHandler.commitCallbacks.add(trigger);
XmlUpdateRequestHandler handler = new XmlUpdateRequestHandler();
handler.init( null );
MapSolrParams params = new MapSolrParams( new HashMap<String, String>() );
- // Add a single document
+ // Add documents
SolrQueryResponse rsp = new SolrQueryResponse();
SolrQueryRequestBase req = new SolrQueryRequestBase( core, params ) {};
for( int i=0; i<14; i++ ) {
req.setContentStreams( toContentStreams(
- adoc("id", "A"+i, "subject", "info" ), null ) );
+ adoc("id", Integer.toString(i), "subject", "info" ), null ) );
handler.handleRequest( req, rsp );
}
// It should not be there right away
- assertQ("shouldn't find any", req("id:A1") ,"//result[@numFound=0]" );
+ assertQ("shouldn't find any", req("id:1") ,"//result[@numFound=0]" );
assertEquals( 0, tracker.getCommitCount());
req.setContentStreams( toContentStreams(
- adoc("id", "A14", "subject", "info" ), null ) );
+ adoc("id", "14", "subject", "info" ), null ) );
handler.handleRequest( req, rsp );
- // Wait longer than the autocommit time
- assertTrue(trigger.waitForCommit(20000));
+
+ assertTrue(trigger.waitForCommit(10000));
req.setContentStreams( toContentStreams(
- adoc("id", "A15", "subject", "info" ), null ) );
+ adoc("id", "15", "subject", "info" ), null ) );
handler.handleRequest( req, rsp );
// Now make sure we can find it
- assertQ("should find one", req("id:A14") ,"//result[@numFound=1]" );
+ assertQ("should find one", req("id:14") ,"//result[@numFound=1]" );
assertEquals( 1, tracker.getCommitCount());
// But not the one added afterward
- assertQ("should not find one", req("id:A15") ,"//result[@numFound=0]" );
+ assertQ("should not find one", req("id:15") ,"//result[@numFound=0]" );
assertEquals( 1, tracker.getCommitCount());
}
@@ -151,7 +163,7 @@ public class AutoCommitTest extends Abst
CommitListener trigger = new CommitListener(core);
core.registerNewSearcherListener(trigger);
DirectUpdateHandler2 updater = (DirectUpdateHandler2) core.getUpdateHandler();
- DirectUpdateHandler2.CommitTracker tracker = updater.tracker;
+ CommitTracker tracker = updater.commitTracker;
// 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;
@@ -220,4 +232,151 @@ public class AutoCommitTest extends Abst
assertQ("but not this", req("id:531") ,"//result[@numFound=0]" );
}
+ public void testSoftCommitMaxDocs() throws Exception {
+
+ SolrCore core = h.getCore();
+ CommitListener trigger = new CommitListener(core);
+
+ DirectUpdateHandler2 updateHandler = (DirectUpdateHandler2)core.getUpdateHandler();
+ CommitTracker tracker = updateHandler.commitTracker;
+ tracker.timeUpperBound = -1;
+ tracker.docsUpperBound = 8;
+ updateHandler.commitCallbacks.add(trigger);
+
+ CommitListener softTrigger = new CommitListener(core);
+
+ CommitTracker softTracker = updateHandler.softCommitTracker;
+ softTracker.timeUpperBound = -1;
+ softTracker.docsUpperBound = 4;
+ updateHandler.softCommitCallbacks.add(softTrigger);
+
+ XmlUpdateRequestHandler handler = new XmlUpdateRequestHandler();
+ handler.init( null );
+
+ MapSolrParams params = new MapSolrParams( new HashMap<String, String>() );
+
+ // Add documents
+ SolrQueryResponse rsp = new SolrQueryResponse();
+ SolrQueryRequestBase req = new SolrQueryRequestBase( core, params ) {};
+ for( int i=0; i<4; i++ ) {
+ req.setContentStreams( toContentStreams(
+ adoc("id", Integer.toString(i), "subject", "info" ), null ) );
+ handler.handleRequest( req, rsp );
+ }
+ // It should not be there right away
+ assertQ("shouldn't find any", req("id:1") ,"//result[@numFound=0]" );
+ assertEquals( 0, tracker.getCommitCount());
+
+ req.setContentStreams( toContentStreams(
+ adoc("id", "4", "subject", "info" ), null ) );
+ handler.handleRequest( req, rsp );
+
+ assertTrue(softTrigger.waitForCommit(10000));
+
+
+ assertQ("should find 5", req("*:*") ,"//result[@numFound=5]" );
+ assertEquals( 1, softTracker.getCommitCount());
+ assertEquals( 0, tracker.getCommitCount());
+
+ req.setContentStreams( toContentStreams(
+ adoc("id", "5", "subject", "info" ), null ) );
+ handler.handleRequest( req, rsp );
+
+ // Now make sure we can find it
+ assertQ("should find one", req("id:4") ,"//result[@numFound=1]" );
+ assertEquals( 1, softTracker.getCommitCount());
+ // But not the one added afterward
+ assertQ("should not find one", req("id:5") ,"//result[@numFound=0]" );
+ assertEquals( 1, softTracker.getCommitCount());
+
+ for( int i=6; i<10; i++ ) {
+ req.setContentStreams( toContentStreams(
+ adoc("id", Integer.toString(i), "subject", "info" ), null ) );
+ handler.handleRequest( req, rsp );
+ }
+ req.close();
+
+
+ assertTrue(trigger.waitForCommit(10000));
+ assertQ("should find 10", req("*:*") ,"//result[@numFound=10]" );
+ assertEquals( 1, softTracker.getCommitCount());
+ assertEquals( 1, tracker.getCommitCount());
+ }
+
+ public void testSoftCommitMaxTime() throws Exception {
+ SolrCore core = h.getCore();
+ CommitListener trigger = new CommitListener(core);
+ core.registerNewSearcherListener(trigger);
+ DirectUpdateHandler2 updater = (DirectUpdateHandler2) core.getUpdateHandler();
+ CommitTracker tracker = 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.timeUpperBound = 1000;
+ softTracker.docsUpperBound = -1;
+ // updater.commitCallbacks.add(trigger);
+
+ XmlUpdateRequestHandler handler = new XmlUpdateRequestHandler();
+ handler.init( null );
+
+ MapSolrParams params = new MapSolrParams( new HashMap<String, String>() );
+
+ // Add a single document
+ SolrQueryResponse rsp = new SolrQueryResponse();
+ 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(30000));
+ trigger.reset();
+ req.setContentStreams( toContentStreams(
+ adoc("id", "530", "field_t", "what's inside?", "subject", "info"), null ) );
+ handler.handleRequest( req, rsp );
+
+ // Now make sure we can find it
+ assertQ("should find one", req("id:529") ,"//result[@numFound=1]" );
+ // But not this one
+ assertQ("should find none", req("id:530") ,"//result[@numFound=0]" );
+
+ // 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.waitForCommit(30000));
+ trigger.reset();
+ req.setContentStreams( toContentStreams(
+ adoc("id", "550", "field_t", "what's inside?", "subject", "info"), null ) );
+ handler.handleRequest( req, rsp );
+ assertEquals( 2, softTracker.getCommitCount() );
+ assertQ("deleted and time has passed", req("id:529") ,"//result[@numFound=0]" );
+
+ // now make the call 10 times really fast and make sure it
+ // only commits once
+ req.setContentStreams( toContentStreams(
+ adoc("id", "500" ), null ) );
+ for( int i=0;i<10; i++ ) {
+ handler.handleRequest( req, rsp );
+ }
+ assertQ("should not be there yet", req("id:500") ,"//result[@numFound=0]" );
+
+ // Wait longer than the autocommit time
+ assertTrue(trigger.waitForCommit(45000));
+ trigger.reset();
+
+ req.setContentStreams( toContentStreams(
+ adoc("id", "531", "field_t", "what's inside?", "subject", "info"), null ) );
+ handler.handleRequest( req, rsp );
+ assertEquals( 3, softTracker.getCommitCount() );
+ assertEquals( 0, tracker.getCommitCount() );
+
+ assertQ("now it should", req("id:500") ,"//result[@numFound=1]" );
+ assertQ("but not this", req("id:531") ,"//result[@numFound=0]" );
+ }
}