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();