You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2018/10/29 19:07:42 UTC

[18/32] lucene-solr:jira/solr-12730: SOLR-12868: Request forwarding for v2 API is broken

SOLR-12868: Request forwarding for v2 API is broken


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/f33be7a1
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/f33be7a1
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/f33be7a1

Branch: refs/heads/jira/solr-12730
Commit: f33be7a172d7b4596530d8cb925ba6dd1f1f53f0
Parents: 8d10939
Author: Noble Paul <no...@apache.org>
Authored: Fri Oct 26 12:50:45 2018 +1100
Committer: Noble Paul <no...@apache.org>
Committed: Fri Oct 26 12:50:45 2018 +1100

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  2 +
 .../java/org/apache/solr/api/V2HttpCall.java    |  5 ++-
 .../org/apache/solr/servlet/HttpSolrCall.java   |  4 +-
 .../client/solrj/request/TestV2Request.java     | 44 ++++++++++++++++++++
 4 files changed, 51 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f33be7a1/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 7715efa..03c97fd 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -210,6 +210,8 @@ Bug Fixes
 
 * SOLR-12874: Java 9+ GC Logging filesize parameter should use a unit.  (Tim Underwood via Uwe Schindler)
 
+* SOLR-12868: Request forwarding for v2 API is broken (noble)
+
 Improvements
 ----------------------
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f33be7a1/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/api/V2HttpCall.java b/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
index d2b891e..c318cb0 100644
--- a/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
+++ b/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
@@ -121,9 +121,10 @@ public class V2HttpCall extends HttpSolrCall {
           core = getCoreByCollection(collection.getName(), isPreferLeader);
           if (core == null) {
             //this collection exists , but this node does not have a replica for that collection
-            extractRemotePath(collection.getName(), origCorename);
+            extractRemotePath(collection.getName(), collection.getName());
             if (action == REMOTEQUERY) {
-              this.path = path = path.substring(prefix.length() + origCorename.length() + 2);
+              coreUrl = coreUrl.replace("/solr/", "/solr/____v2/c/");
+              this.path = path = path.substring(prefix.length() + collection.getName().length() + 2);
               return;
             }
           }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f33be7a1/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
index 4a3c34f..64dc3dd 100644
--- a/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
+++ b/solr/core/src/java/org/apache/solr/servlet/HttpSolrCall.java
@@ -133,7 +133,7 @@ import static org.apache.solr.servlet.SolrDispatchFilter.Action.RETURN;
 public class HttpSolrCall {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
-  static final Random random;
+  public static final Random random;
   static {
     // We try to make things reproducible in the context of our tests by initializing the random instance
     // based on the current seed
@@ -877,7 +877,7 @@ public class HttpSolrCall {
     }
   }
 
-  private String getRemotCoreUrl(String collectionName, String origCorename) {
+  protected String getRemotCoreUrl(String collectionName, String origCorename) {
     ClusterState clusterState = cores.getZkController().getClusterState();
     final DocCollection docCollection = clusterState.getCollectionOrNull(collectionName);
     Slice[] slices = (docCollection != null) ? docCollection.getActiveSlicesArr() : null;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/f33be7a1/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestV2Request.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestV2Request.java b/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestV2Request.java
index 12b3271..4aa1b64 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestV2Request.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestV2Request.java
@@ -18,18 +18,25 @@
 package org.apache.solr.client.solrj.request;
 
 import java.io.IOException;
+import java.lang.invoke.MethodHandles;
 import java.util.List;
 
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
+import org.apache.solr.client.solrj.response.V2Response;
 import org.apache.solr.cloud.SolrCloudTestCase;
+import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.util.NamedList;
 import org.junit.BeforeClass;
 import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class TestV2Request extends SolrCloudTestCase {
+  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
 
   @BeforeClass
   public static void setupCluster() throws Exception {
@@ -99,4 +106,41 @@ public class TestV2Request extends SolrCloudTestCase {
 
   }
 
+  public void testV2Forwarding() throws Exception {
+    SolrClient client = cluster.getSolrClient();
+    assertSuccess(client, new V2Request.Builder("/collections")
+        .withMethod(SolrRequest.METHOD.POST)
+        .withPayload("{" +
+            "  'create' : {" +
+            "    'name' : 'v2forward'," +
+            "    'numShards' : 1," +
+            "    'replicationFactor' : 1," +
+            "    'config' : 'config'" +
+            "  }" +
+            "}").build());
+
+    ClusterState cs = cluster.getSolrClient().getClusterStateProvider().getClusterState();
+    System.out.println("livenodes: " + cs.getLiveNodes());
+
+    String[] node = new String[1];
+    cs.getCollection("v2forward").forEachReplica((s, replica) -> node[0] = replica.getNodeName());
+
+    //find a node that does not have a replica for this collection
+    final String[] testNode = new String[1];
+    cs.getLiveNodes().forEach(s -> {
+      if (!s.equals(node[0])) testNode[0] = s;
+    });
+
+    String testServer = cluster.getSolrClient().getZkStateReader().getBaseUrlForNodeName(testNode[0]);
+     V2Request v2r = new V2Request.Builder("/c/v2forward/_introspect")
+        .withMethod(SolrRequest.METHOD.GET).build();
+
+    try(HttpSolrClient client1 = new HttpSolrClient.Builder()
+        .withBaseSolrUrl(testServer)
+        .build()) {
+      V2Response rsp = v2r.process(client1);
+      assertEquals("0",rsp._getStr("responseHeader/status", null));
+    }
+  }
+
 }