You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2014/07/02 18:50:33 UTC
svn commit: r1607418 [2/2] - in /lucene/dev/trunk/solr: ./
core/src/java/org/apache/solr/ core/src/java/org/apache/solr/cloud/
core/src/java/org/apache/solr/handler/admin/
core/src/java/org/apache/solr/servlet/ core/src/java/org/apache/solr/util/
core/...
Modified: lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrServerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrServerTest.java?rev=1607418&r1=1607417&r2=1607418&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrServerTest.java (original)
+++ lucene/dev/trunk/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrServerTest.java Wed Jul 2 16:50:32 2014
@@ -20,7 +20,6 @@ package org.apache.solr.client.solrj.imp
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
@@ -42,7 +41,6 @@ import org.apache.solr.client.solrj.requ
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.cloud.AbstractFullDistribZkTestBase;
import org.apache.solr.cloud.AbstractZkTestCase;
-import org.apache.solr.cloud.Overseer;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
@@ -51,7 +49,6 @@ import org.apache.solr.common.cloud.DocC
import org.apache.solr.common.cloud.DocRouter;
import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.cloud.Slice;
-import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
@@ -62,7 +59,6 @@ import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
-import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -125,6 +121,7 @@ public class CloudSolrServerTest extends
@Override
public void doTest() throws Exception {
allTests();
+ stateVersionParamTest();
}
private void allTests() throws Exception {
@@ -346,7 +343,77 @@ public class CloudSolrServerTest extends
SolrInputDocument doc = getDoc(fields);
indexDoc(doc);
}
-
+
+ private void stateVersionParamTest() throws Exception {
+ CloudSolrServer client = createCloudClient(null);
+ try {
+ String collectionName = "checkStateVerCol";
+ createCollection(collectionName, client, 2, 2);
+ waitForRecoveriesToFinish(collectionName, false);
+ DocCollection coll = client.getZkStateReader().getClusterState().getCollection(collectionName);
+ Replica r = coll.getSlices().iterator().next().getReplicas().iterator().next();
+
+ HttpSolrServer httpSolrServer = new HttpSolrServer(r.getStr(ZkStateReader.BASE_URL_PROP) + "/"+collectionName);
+
+
+ SolrQuery q = new SolrQuery().setQuery("*:*");
+
+ log.info("should work query, result {}", httpSolrServer.query(q));
+ //no problem
+ q.setParam(CloudSolrServer.STATE_VERSION, collectionName+":"+coll.getZNodeVersion());
+ log.info("2nd query , result {}", httpSolrServer.query(q));
+ //no error yet good
+
+ q.setParam(CloudSolrServer.STATE_VERSION, collectionName+":"+ (coll.getZNodeVersion() -1)); //an older version expect error
+
+ HttpSolrServer.RemoteSolrException sse = null;
+ try {
+ httpSolrServer.query(q);
+ log.info("expected query error");
+ } catch (HttpSolrServer.RemoteSolrException e) {
+ sse = e;
+ }
+ httpSolrServer.shutdown();
+ assertNotNull(sse);
+ assertEquals(" Error code should be ", sse.code() , SolrException.ErrorCode.INVALID_STATE.code);
+
+ //now send the request to another node that does n ot serve the collection
+
+ Set<String> allNodesOfColl = new HashSet<>();
+ for (Slice slice : coll.getSlices()) {
+ for (Replica replica : slice.getReplicas()) {
+ allNodesOfColl.add(replica.getStr(ZkStateReader.BASE_URL_PROP));
+ }
+ }
+ String theNode = null;
+ for (String s : client.getZkStateReader().getClusterState().getLiveNodes()) {
+ String n = client.getZkStateReader().getBaseUrlForNodeName(s);
+ if(!allNodesOfColl.contains(s)){
+ theNode = n;
+ break;
+ }
+ }
+ log.info("thenode which does not serve this collection{} ",theNode);
+ assertNotNull(theNode);
+ httpSolrServer = new HttpSolrServer(theNode + "/"+collectionName);
+
+ q.setParam(CloudSolrServer.STATE_VERSION, collectionName+":"+coll.getZNodeVersion());
+
+ try {
+ httpSolrServer.query(q);
+ log.info("error was expected");
+ } catch (HttpSolrServer.RemoteSolrException e) {
+ sse = e;
+ }
+ httpSolrServer.shutdown();
+ assertNotNull(sse);
+ assertEquals(" Error code should be ", sse.code() , SolrException.ErrorCode.INVALID_STATE.code);
+ } finally {
+ client.shutdown();
+ }
+
+ }
+
public void testShutdown() throws MalformedURLException {
CloudSolrServer server = new CloudSolrServer("[ff01::114]:33332");
try {
Modified: lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java?rev=1607418&r1=1607417&r2=1607418&view=diff
==============================================================================
--- lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java (original)
+++ lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java Wed Jul 2 16:50:32 2014
@@ -339,6 +339,19 @@ public abstract class AbstractFullDistri
return createJettys(numJettys, false);
}
+ protected int defaultStateFormat = 1 + random().nextInt(2);
+
+ protected int getStateFormat() {
+ String stateFormat = System.getProperty("tests.solr.stateFormat", null);
+ if (stateFormat != null) {
+ if ("2".equals(stateFormat)) {
+ return defaultStateFormat = 2;
+ } else if ("1".equals(stateFormat)) {
+ return defaultStateFormat = 1;
+ }
+ }
+ return defaultStateFormat; // random
+ }
/**
* @param checkCreatedVsState
@@ -351,6 +364,17 @@ public abstract class AbstractFullDistri
List<SolrServer> clients = new ArrayList<>();
StringBuilder sb = new StringBuilder();
+ if(getStateFormat() == 2) {
+ log.info("Creating collection1 with stateFormat=2");
+ SolrZkClient zkClient = new SolrZkClient(zkServer.getZkAddress(), AbstractZkTestCase.TIMEOUT, AbstractZkTestCase.TIMEOUT);
+ Overseer.getInQueue(zkClient).offer(ZkStateReader.toJSON(ZkNodeProps.makeMap(
+ Overseer.QUEUE_OPERATION, OverseerCollectionProcessor.CREATECOLLECTION,
+ "name", DEFAULT_COLLECTION,
+ "numShards", String.valueOf(sliceCount),
+ DocCollection.STATE_FORMAT, getStateFormat())));
+ zkClient.close();
+ }
+
for (int i = 1; i <= numJettys; i++) {
if (sb.length() > 0) sb.append(',');
int cnt = this.jettyIntCntr.incrementAndGet();
@@ -1490,6 +1514,10 @@ public abstract class AbstractFullDistri
collectionInfos.put(collectionName, list);
}
params.set("name", collectionName);
+ if (getStateFormat() == 2) {
+ log.info("Creating collection with stateFormat=2: " + collectionName);
+ params.set(DocCollection.STATE_FORMAT, "2");
+ }
SolrRequest request = new QueryRequest(params);
request.setPath("/admin/collections");