You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by no...@apache.org on 2022/03/25 06:46:11 UTC

[solr] branch jira/SOLR15715_1 updated: add support in SolrJ

This is an automated email from the ASF dual-hosted git repository.

noble pushed a commit to branch jira/SOLR15715_1
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/jira/SOLR15715_1 by this push:
     new 074d886  add support in SolrJ
074d886 is described below

commit 074d8865e51c01a4355e82ef24b3b6a67bf8bf0a
Author: Noble Paul <no...@gmail.com>
AuthorDate: Fri Mar 25 17:45:58 2022 +1100

    add support in SolrJ
---
 .../test/org/apache/solr/search/TestCoordinatorRole.java |  9 ++++++---
 .../java/org/apache/solr/client/solrj/SolrRequest.java   | 14 ++++++++++++++
 .../solr/client/solrj/impl/BaseCloudSolrClient.java      | 16 +++++++++++++++-
 3 files changed, 35 insertions(+), 4 deletions(-)

diff --git a/solr/core/src/test/org/apache/solr/search/TestCoordinatorRole.java b/solr/core/src/test/org/apache/solr/search/TestCoordinatorRole.java
index d2cc96f..5f6874b 100644
--- a/solr/core/src/test/org/apache/solr/search/TestCoordinatorRole.java
+++ b/solr/core/src/test/org/apache/solr/search/TestCoordinatorRole.java
@@ -26,12 +26,14 @@ import org.apache.solr.client.solrj.SolrQuery;
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
+import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.client.solrj.request.UpdateRequest;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.cloud.SolrCloudTestCase;
 import org.apache.solr.common.NavigableObject;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.cloud.DocCollection;
+import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.util.Utils;
 import org.apache.solr.core.NodeRoles;
 import org.apache.solr.servlet.CoordinatorHttpSolrCall;
@@ -72,10 +74,11 @@ public class TestCoordinatorRole extends SolrCloudTestCase {
     } finally {
       System.clearProperty(NodeRoles.NODE_ROLES_PROP);
     }
-    NavigableObject result = (NavigableObject) Utils.executeGET(cluster.getSolrClient().getHttpClient(),
-            coordinatorJetty.getBaseUrl().toString()+"/"+COLLECTION_NAME +"/select?q=*:*&wt=javabin", Utils.JAVABINCONSUMER);
+    QueryResponse rslt = new QueryRequest(new SolrQuery("*:*"))
+            .setPreferredNodes(Collections.singletonList(coordinatorJetty.getNodeName()))
+            .process(client, COLLECTION_NAME);
 
-    assertEquals(10, ((Collection)result._get("response", Collections.emptyList())).size());
+    assertEquals(10, rslt.getResults().size());
 
     DocCollection collection = cluster.getSolrClient().getClusterStateProvider().getCollection(SYNTHETIC_COLLECTION);
     assertNotNull(collection);
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/SolrRequest.java b/solr/solrj/src/java/org/apache/solr/client/solrj/SolrRequest.java
index 83c0d3c..779f5e0 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/SolrRequest.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/SolrRequest.java
@@ -22,6 +22,7 @@ import java.security.Principal;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
@@ -75,6 +76,7 @@ public abstract class SolrRequest<T extends SolrResponse> implements Serializabl
   private METHOD method = METHOD.GET;
   private String path = null;
   private Map<String, String> headers;
+  private List<String> preferredNodes;
 
   private ResponseParser responseParser;
   private StreamingResponseCallback callback;
@@ -98,6 +100,18 @@ public abstract class SolrRequest<T extends SolrResponse> implements Serializabl
     return this;
   }
 
+  public SolrRequest<T> setPreferredNodes(List<String> nodes) {
+    this.preferredNodes = nodes;
+    return this;
+  }
+
+  public List<String> getPreferredNodes() {
+    return this.preferredNodes;
+  }
+
+
+
+
   private String basicAuthUser, basicAuthPwd;
 
   private String basePath;
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseCloudSolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseCloudSolrClient.java
index c2390d0..d50110d 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseCloudSolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/BaseCloudSolrClient.java
@@ -1126,6 +1126,17 @@ public abstract class BaseCloudSolrClient extends SolrClient {
             "No collection param specified on request and no default collection has been set: "
                 + inputCollections);
       }
+      String joinedInputCollections = StrUtils.join(inputCollections, ',');
+
+      List<String> preferredNodes = request.getPreferredNodes();
+      if(preferredNodes != null && !preferredNodes.isEmpty()) {
+        List<String> urlList = new ArrayList<>(preferredNodes.size());
+        for (String nodeName : preferredNodes) {
+          //todo avoid hardcoding
+         urlList.add(Utils.getBaseUrlForNodeName(nodeName, "http")+ "/"+ joinedInputCollections);
+        }
+        if(!urlList.isEmpty()) return runReq(request, urlList);
+      }
 
       // TODO: not a big deal because of the caching, but we could avoid looking
       //   at every shard when getting leaders if we tweaked some things
@@ -1172,7 +1183,6 @@ public abstract class BaseCloudSolrClient extends SolrClient {
 
       sortedReplicas.addAll(replicas);
 
-      String joinedInputCollections = StrUtils.join(inputCollections, ',');
       Set<String> seenNodes = new HashSet<>();
       sortedReplicas.forEach(
           replica -> {
@@ -1190,6 +1200,10 @@ public abstract class BaseCloudSolrClient extends SolrClient {
       }
     }
 
+    return runReq(request, theUrlList);
+  }
+
+  private NamedList<Object> runReq(SolrRequest<?> request, List<String> theUrlList) throws SolrServerException, IOException {
     LBSolrClient.Req req = new LBSolrClient.Req(request, theUrlList);
     LBSolrClient.Rsp rsp = getLbClient().request(req);
     return rsp.getResponse();