You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by dp...@apache.org on 2016/02/23 01:26:06 UTC
[2/2] lucene-solr git commit: SOLR-8666: Adds header 'zkConnected' to
response of SearchHandler and PingRequestHandler
SOLR-8666: Adds header 'zkConnected' to response of SearchHandler and PingRequestHandler
Header is used to notify the client when a connection to zookeeper has been lost and there is a possibility of stale data on the node the request is coming from.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/d6105334
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/d6105334
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/d6105334
Branch: refs/heads/master
Commit: d6105334a0fb46dbb2b5d4a4f8a9d9355a6d7a17
Parents: 2c0a5e3
Author: Dennis Gove <dp...@gmail.com>
Authored: Fri Feb 12 08:14:58 2016 -0500
Committer: Dennis Gove <dp...@gmail.com>
Committed: Mon Feb 22 19:25:17 2016 -0500
----------------------------------------------------------------------
solr/CHANGES.txt | 4 ++
.../apache/solr/handler/PingRequestHandler.java | 7 ++-
.../solr/handler/component/SearchHandler.java | 19 +++++++-
.../solr/handler/PingRequestHandlerTest.java | 3 ++
.../handler/component/SearchHandlerTest.java | 47 ++++++++++++++++++++
5 files changed, 77 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d6105334/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index d834c37..a85e6fa 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -201,6 +201,10 @@ Bug Fixes
* SOLR-8599: After a failed connection during construction of SolrZkClient attempt to retry until a connection
can be made. (Keith Laban, Dennis Gove)
+* SOLR-8666: Adds header 'zkConnected' to response of SearchHandler and PingRequestHandler to notify the client when
+ a connection to zookeeper has been lost and there is a possibility of stale data on the node the request is coming
+ from. (Keith Laban, Dennis Gove)
+
Optimizations
----------------------
* SOLR-7876: Speed up queries and operations that use many terms when timeAllowed has not been
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d6105334/solr/core/src/java/org/apache/solr/handler/PingRequestHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/PingRequestHandler.java b/solr/core/src/java/org/apache/solr/handler/PingRequestHandler.java
index 426bb1a..5df46f5 100644
--- a/solr/core/src/java/org/apache/solr/handler/PingRequestHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/PingRequestHandler.java
@@ -278,7 +278,12 @@ public class PingRequestHandler extends RequestHandlerBase implements SolrCoreAw
try {
SolrQueryResponse pingrsp = new SolrQueryResponse();
core.execute(handler, req, pingrsp );
- ex = pingrsp.getException();
+ ex = pingrsp.getException();
+ NamedList<Object> headers = rsp.getResponseHeader();
+ if(headers != null) {
+ headers.add("zkConnected", pingrsp.getResponseHeader().get("zkConnected"));
+ }
+
}
catch( Exception e ) {
ex = e;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d6105334/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java b/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
index 9cb4183..3518ecb 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/SearchHandler.java
@@ -28,6 +28,7 @@ import java.util.Set;
import org.apache.lucene.index.ExitableDirectoryReader;
import org.apache.lucene.util.Version;
import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.cloud.ZkController;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
@@ -36,6 +37,7 @@ import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.CloseHook;
+import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.PluginInfo;
import org.apache.solr.core.SolrCore;
import org.apache.solr.handler.RequestHandlerBase;
@@ -201,8 +203,9 @@ public class SearchHandler extends RequestHandlerBase implements SolrCoreAware ,
private ShardHandler getAndPrepShardHandler(SolrQueryRequest req, ResponseBuilder rb) {
ShardHandler shardHandler = null;
- rb.isDistrib = req.getParams().getBool("distrib", req.getCore().getCoreDescriptor()
- .getCoreContainer().isZooKeeperAware());
+ CoreContainer cc = req.getCore().getCoreDescriptor().getCoreContainer();
+ boolean isZkAware = cc.isZooKeeperAware();
+ rb.isDistrib = req.getParams().getBool("distrib", isZkAware);
if (!rb.isDistrib) {
// for back compat, a shards param with URLs like localhost:8983/solr will mean that this
// search is distributed.
@@ -218,6 +221,18 @@ public class SearchHandler extends RequestHandlerBase implements SolrCoreAware ,
}
}
+ if(isZkAware) {
+ ZkController zkController = cc.getZkController();
+ NamedList<Object> headers = rb.rsp.getResponseHeader();
+ if(headers != null) {
+ headers.add("zkConnected",
+ zkController != null
+ ? !zkController.getZkClient().getConnectionManager().isLikelyExpired()
+ : false);
+ }
+
+ }
+
return shardHandler;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d6105334/solr/core/src/test/org/apache/solr/handler/PingRequestHandlerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/PingRequestHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/PingRequestHandlerTest.java
index 7a3a640..b95a5f6 100644
--- a/solr/core/src/test/org/apache/solr/handler/PingRequestHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/PingRequestHandlerTest.java
@@ -198,10 +198,13 @@ public class PingRequestHandlerTest extends SolrTestCaseJ4 {
reqDistrib.setDistrib(true);
SolrPingResponse rsp = reqDistrib.process(cloudSolrClient, collectionName);
assertEquals(0, rsp.getStatus());
+ assertTrue(rsp.getResponseHeader().getBooleanArg(("zkConnected")));
+
SolrPing reqNonDistrib = new SolrPing();
rsp = reqNonDistrib.process(cloudSolrClient, collectionName);
assertEquals(0, rsp.getStatus());
+ assertTrue(rsp.getResponseHeader().getBooleanArg(("zkConnected")));
// delete the collection we created earlier
miniCluster.deleteCollection(collectionName);
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/d6105334/solr/core/src/test/org/apache/solr/handler/component/SearchHandlerTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/handler/component/SearchHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/component/SearchHandlerTest.java
index f35754b..7e8ab47 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/SearchHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/SearchHandlerTest.java
@@ -16,12 +16,22 @@
*/
package org.apache.solr.handler.component;
+import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.client.solrj.SolrResponse;
+import org.apache.solr.client.solrj.embedded.JettySolrRunner;
+import org.apache.solr.client.solrj.impl.CloudSolrClient;
+import org.apache.solr.client.solrj.request.QueryRequest;
+import org.apache.solr.client.solrj.request.SolrPing;
+import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.client.solrj.response.SolrPingResponse;
+import org.apache.solr.cloud.MiniSolrCloudCluster;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrCore;
+import org.apache.solr.response.SolrQueryResponse;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -99,4 +109,41 @@ public class SearchHandlerTest extends SolrTestCaseJ4
//Debug component is always last in this case
assertEquals( core.getSearchComponent( DebugComponent.COMPONENT_NAME ), comps.get( comps.size()-1 ) );
}
+
+ @Test
+ public void testZkConnected() throws Exception{
+ MiniSolrCloudCluster miniCluster = new MiniSolrCloudCluster(5, createTempDir(), buildJettyConfig("/solr"));
+
+ final CloudSolrClient cloudSolrClient = miniCluster.getSolrClient();
+
+ try {
+ assertNotNull(miniCluster.getZkServer());
+ List<JettySolrRunner> jettys = miniCluster.getJettySolrRunners();
+ assertEquals(5, jettys.size());
+ for (JettySolrRunner jetty : jettys) {
+ assertTrue(jetty.isRunning());
+ }
+
+ // create collection
+ String collectionName = "testSolrCloudCollection";
+ String configName = "solrCloudCollectionConfig";
+ File configDir = new File(SolrTestCaseJ4.TEST_HOME() + File.separator + "collection1" + File.separator + "conf");
+ miniCluster.uploadConfigDir(configDir, configName);
+ miniCluster.createCollection(collectionName, 2, 2, configName, null);
+
+
+
+ QueryRequest req = new QueryRequest();
+ QueryResponse rsp = req.process(cloudSolrClient, collectionName);
+ assertTrue(rsp.getResponseHeader().getBooleanArg("zkConnected"));
+
+
+ // delete the collection we created earlier
+ miniCluster.deleteCollection(collectionName);
+
+ }
+ finally {
+ miniCluster.shutdown();
+ }
+ }
}