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