You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2012/01/11 23:20:47 UTC
svn commit: r1230282 - in /lucene/dev/branches/solrcloud/solr:
core/src/java/org/apache/solr/update/PeerSync.java
core/src/test/org/apache/solr/update/PeerSyncTest.java
test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java
Author: yonik
Date: Wed Jan 11 22:20:46 2012
New Revision: 1230282
URL: http://svn.apache.org/viewvc?rev=1230282&view=rev
Log:
server w/o versions should currently fail sync. improve tests.
Modified:
lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/update/PeerSync.java
lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/update/PeerSyncTest.java
lucene/dev/branches/solrcloud/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java
Modified: lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/update/PeerSync.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/update/PeerSync.java?rev=1230282&r1=1230281&r2=1230282&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/update/PeerSync.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/java/org/apache/solr/update/PeerSync.java Wed Jan 11 22:20:46 2012
@@ -125,7 +125,9 @@ public class PeerSync {
ourLowThreshold = percentile(ourUpdates, 0.8f);
ourHighThreshold = percentile(ourUpdates, 0.2f);
} else {
- ourHighThreshold = Long.MAX_VALUE; // nocommit - this is just temporary
+ // we have no versions and hence no frame of reference to tell if we can use a peers
+ // updates to bring us into sync
+ return false;
}
ourUpdateSet = new HashSet<Long>(ourUpdates);
Modified: lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/update/PeerSyncTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/update/PeerSyncTest.java?rev=1230282&r1=1230281&r2=1230282&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/update/PeerSyncTest.java (original)
+++ lucene/dev/branches/solrcloud/solr/core/src/test/org/apache/solr/update/PeerSyncTest.java Wed Jan 11 22:20:46 2012
@@ -21,6 +21,7 @@ import org.apache.solr.BaseDistributedSe
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServer;
+import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.request.QueryRequest;
@@ -30,17 +31,21 @@ import org.apache.solr.common.cloud.ZkNo
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.StrUtils;
import org.apache.solr.update.SolrCmdDistributor.Node;
import org.apache.solr.update.SolrCmdDistributor.Response;
import org.apache.solr.update.SolrCmdDistributor.StdNode;
+import java.io.IOException;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class PeerSyncTest extends BaseDistributedSearchTestCase {
-
-
+ private static int numVersions = 100; // number of versions to use when syncing
+ private ModifiableSolrParams seenLeader = params("leader","true");
+
public PeerSyncTest() {
fixShardCount = true;
shardCount = 3;
@@ -60,23 +65,50 @@ public class PeerSyncTest extends BaseDi
handle.put("score", SKIPVAL);
handle.put("maxScore", SKIPVAL);
- SolrServer clients0 = clients.get(0);
- SolrServer clients1 = clients.get(1);
- SolrServer clients2 = clients.get(2);
-
- clients0.add(addRandFields(sdoc("id",1)));
- clients0.add(addRandFields(sdoc("id",1)));
- clients0.add(addRandFields(sdoc("id",2)));
-
- QueryRequest qr = new QueryRequest(params("qt","/get", "getVersions","100", "sync",shardsArr[0]));
- NamedList rsp = clients1.request(qr);
- // System.out.println("RESPONSE="+rsp);
- assertTrue( (Boolean)rsp.get("sync") );
- clients0.commit();
- clients1.commit();
+ SolrServer client0 = clients.get(0);
+ SolrServer client1 = clients.get(1);
+ SolrServer client2 = clients.get(2);
+
+ long v = 0;
+ add(client0, seenLeader, sdoc("id","1","_version_",++v));
+
+ // this fails because client0 has no context (i.e. no updates of it's own to judge if applying the updates
+ // from client1 will bring it into sync with client1)
+ assertSync(client1, numVersions, false, shardsArr[0]);
+
+ // bring client1 back into sync with client0 by adding the doc
+ add(client1, seenLeader, sdoc("id","1","_version_",v));
+
+ // both have the same version list, so sync should now return true
+ assertSync(client1, numVersions, true, shardsArr[0]);
+ // TODO: test that updates weren't necessary
+
+/**
+ assertSync(client1, numVersions, true, shardsArr[0]);
+ client0.commit();
+ client1.commit();
+ queryAndCompare(params("q", "*:*"), client0, client1);
+
+ for (int i=0; i<numVersions; i++) {
+
+ }
+
+
+ * client0.add(addRandFields(sdoc("id",1)));
+
+ client0.add(addRandFields(sdoc("id",1)));
+ client0.add(addRandFields(sdoc("id", 1)));
+ client0.add(addRandFields(sdoc("id", 2)));
+ **/
+
- queryAndCompare(params("q","*:*"), clients0, clients1);
}
+ void assertSync(SolrServer server, int numVersions, boolean expectedResult, String... syncWith) throws IOException, SolrServerException {
+ QueryRequest qr = new QueryRequest(params("qt","/get", "getVersions",Integer.toString(numVersions), "sync", StrUtils.join(Arrays.asList(syncWith), ',')));
+ NamedList rsp = server.request(qr);
+ assertEquals(expectedResult, (Boolean) rsp.get("sync"));
+ }
+
}
Modified: lucene/dev/branches/solrcloud/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java?rev=1230282&r1=1230281&r2=1230282&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java (original)
+++ lucene/dev/branches/solrcloud/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java Wed Jan 11 22:20:46 2012
@@ -32,11 +32,14 @@ import java.util.Set;
import junit.framework.TestCase;
+import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.embedded.JettySolrRunner;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
+import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.client.solrj.response.UpdateResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
@@ -298,6 +301,15 @@ public abstract class BaseDistributedSea
SolrServer client = clients.get(which);
client.add(doc);
}
+
+ protected UpdateResponse add(SolrServer server, SolrParams params, SolrInputDocument... sdocs) throws IOException, SolrServerException {
+ UpdateRequest ureq = new UpdateRequest();
+ ureq.setParams(new ModifiableSolrParams(params));
+ for (SolrInputDocument sdoc : sdocs) {
+ ureq.add(sdoc);
+ }
+ return ureq.process(server);
+ }
protected void index_specific(int serverNumber, Object... fields) throws Exception {
SolrInputDocument doc = new SolrInputDocument();