This is an automated email from the ASF dual-hosted git repository.
gerlowskija pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/branch_9x by this push:
new 2a39d203b0f SOLR-17256: Remove usages of deprecated
SolrRequest.setBasePath (#2811)
2a39d203b0f is described below
commit 2a39d203b0f7b531b01acd73def5b453a3133ba8
Author: Jason Gerlowski <[email protected]>
AuthorDate: Tue Nov 5 10:56:52 2024 -0500
SOLR-17256: Remove usages of deprecated SolrRequest.setBasePath (#2811)
A previous commit deprecated SolrRequest.setBasePath but left it still
used throughout Solr's codebase. This commit switches (almost) all
usage over to the safer `Http2SolrClient.requestWithBaseUrl`.
This will allow setBasePath to be removed more easily in the future.
---------
Co-authored-by: David Smiley <[email protected]>
---
.../org/apache/solr/bench/MiniClusterState.java | 36 ++++++++++------------
.../org/apache/solr/bench/index/CloudIndexing.java | 6 ++--
.../org/apache/solr/bench/search/FilterCache.java | 17 +++++-----
.../org/apache/solr/bench/search/JsonFaceting.java | 10 +++---
.../apache/solr/bench/search/NumericSearch.java | 8 ++---
.../solr/bench/search/QueryResponseWriters.java | 1 -
.../org/apache/solr/bench/search/SimpleSearch.java | 3 --
.../solr/bench/MiniClusterBenchStateTest.java | 3 --
.../java/org/apache/solr/cloud/ZkController.java | 8 ++---
.../java/org/apache/solr/handler/IndexFetcher.java | 3 +-
.../org/apache/solr/update/PeerSyncWithLeader.java | 7 ++---
.../org/apache/solr/update/SolrCmdDistributor.java | 5 +--
.../processor/DistributedUpdateProcessor.java | 7 +++--
.../apache/solr/handler/ReplicationTestHelper.java | 8 ++---
.../TestUserManagedReplicationWithAuth.java | 14 ++++-----
.../solrj/impl/SolrClientNodeStateProvider.java | 6 +---
.../solr/common/cloud/NodesSysPropsCacher.java | 12 +++++---
.../impl/ConcurrentUpdateHttp2SolrClient.java | 19 ++++++------
.../solr/client/solrj/impl/LBHttp2SolrClient.java | 29 +++++++++--------
.../solr/client/solrj/impl/LBSolrClient.java | 33 +++++++++++++++-----
.../client/solrj/request/HealthCheckRequest.java | 5 +--
.../client/solrj/impl/Http2SolrClientTest.java | 16 +++++++++-
.../client/solrj/impl/HttpJdkSolrClientTest.java | 9 ------
.../client/solrj/impl/HttpSolrClientTestBase.java | 28 -----------------
.../client/solrj/impl/LBHttp2SolrClientTest.java | 28 ++++++++++++++---
25 files changed, 166 insertions(+), 155 deletions(-)
diff --git
a/solr/benchmark/src/java/org/apache/solr/bench/MiniClusterState.java
b/solr/benchmark/src/java/org/apache/solr/bench/MiniClusterState.java
index 88bfc05af1f..34a970b3392 100755
--- a/solr/benchmark/src/java/org/apache/solr/bench/MiniClusterState.java
+++ b/solr/benchmark/src/java/org/apache/solr/bench/MiniClusterState.java
@@ -37,7 +37,6 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
-import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.Http2SolrClient;
@@ -84,7 +83,7 @@ public class MiniClusterState {
MiniSolrCloudCluster cluster;
/** The Client. */
- public SolrClient client;
+ public Http2SolrClient client;
/** The Run cnt. */
int runCnt = 0;
@@ -288,7 +287,7 @@ public class MiniClusterState {
}
zkHost = cluster.getZkServer().getZkAddress();
- client = new Http2SolrClient.Builder().useHttp1_1(useHttp1).build();
+ client = new
Http2SolrClient.Builder(nodes.get(0)).useHttp1_1(useHttp1).build();
log("done starting mini cluster");
log("");
@@ -318,9 +317,8 @@ public class MiniClusterState {
CollectionAdminRequest.Create request =
CollectionAdminRequest.createCollection(collection, "conf",
numShards, numReplicas);
-
request.setBasePath(nodes.get(random.nextInt(cluster.getJettySolrRunners().size())));
-
- client.request(request);
+ client.requestWithBaseUrl(
+ nodes.get(random.nextInt(cluster.getJettySolrRunners().size())),
null, request);
cluster.waitForActiveCollection(
collection, 15, TimeUnit.SECONDS, numShards, numShards *
numReplicas);
@@ -368,18 +366,19 @@ public class MiniClusterState {
log("committing data ...");
UpdateRequest commitRequest = new UpdateRequest();
-
commitRequest.setBasePath(nodes.get(random.nextInt(cluster.getJettySolrRunners().size())));
+ final var url =
nodes.get(random.nextInt(cluster.getJettySolrRunners().size()));
commitRequest.setAction(UpdateRequest.ACTION.COMMIT, false, true);
- commitRequest.process(client, collection);
+ client.requestWithBaseUrl(url, collection, commitRequest);
log("done committing data");
} else {
cluster.waitForActiveCollection(collection, 15, TimeUnit.SECONDS);
}
QueryRequest queryRequest = new QueryRequest(new SolrQuery("q", "*:*",
"rows", "1"));
-
queryRequest.setBasePath(nodes.get(random.nextInt(cluster.getJettySolrRunners().size())));
+ final var url =
nodes.get(random.nextInt(cluster.getJettySolrRunners().size()));
+ NamedList<Object> result =
+ client.requestWithBaseUrl(url, collection,
queryRequest).getResponse();
- NamedList<Object> result = client.request(queryRequest, collection);
log("sanity check of single row query result: " + result);
log("");
@@ -417,15 +416,15 @@ public class MiniClusterState {
@Override
public void run() {
UpdateRequest updateRequest = new UpdateRequest();
- updateRequest.setBasePath(
-
nodes.get(threadRandom.nextInt(cluster.getJettySolrRunners().size())));
+ final var url =
+
nodes.get(threadRandom.nextInt(cluster.getJettySolrRunners().size()));
SolrInputDocument doc = docs.inputDocument();
// log("add doc " + doc);
updateRequest.add(doc);
meter.mark();
try {
- client.request(updateRequest, collection);
+ client.requestWithBaseUrl(url, collection, updateRequest);
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -452,9 +451,8 @@ public class MiniClusterState {
batch.add(docs.inputDocument());
if (i % batchSize == 0) {
UpdateRequest updateRequest = new UpdateRequest();
- updateRequest.setBasePath(nodes.get(0));
updateRequest.add(batch);
- client.request(updateRequest, collection);
+ client.requestWithBaseUrl(nodes.get(0), collection, updateRequest);
meter.mark(batch.size());
batch.clear();
log(meter.getCount() + " docs at " + (long) meter.getMeanRate() + "
doc/s");
@@ -462,9 +460,8 @@ public class MiniClusterState {
}
if (!batch.isEmpty()) {
UpdateRequest updateRequest = new UpdateRequest();
- updateRequest.setBasePath(nodes.get(0));
updateRequest.add(batch);
- client.request(updateRequest, collection);
+ client.requestWithBaseUrl(nodes.get(0), collection, updateRequest);
meter.mark(batch.size());
batch = null;
}
@@ -500,10 +497,9 @@ public class MiniClusterState {
}
UpdateRequest optimizeRequest = new UpdateRequest();
- optimizeRequest.setBasePath(
- nodes.get(random.nextInt(cluster.getJettySolrRunners().size())));
+ final var url =
nodes.get(random.nextInt(cluster.getJettySolrRunners().size()));
optimizeRequest.setAction(UpdateRequest.ACTION.OPTIMIZE, false, true,
maxMergeSegments);
- optimizeRequest.process(client, collection);
+ client.requestWithBaseUrl(url, collection, optimizeRequest);
}
}
diff --git
a/solr/benchmark/src/java/org/apache/solr/bench/index/CloudIndexing.java
b/solr/benchmark/src/java/org/apache/solr/bench/index/CloudIndexing.java
index 820f2130a60..0ee950e7231 100755
--- a/solr/benchmark/src/java/org/apache/solr/bench/index/CloudIndexing.java
+++ b/solr/benchmark/src/java/org/apache/solr/bench/index/CloudIndexing.java
@@ -127,9 +127,9 @@ public class CloudIndexing {
public Object indexDoc(MiniClusterState.MiniClusterBenchState
miniClusterState, BenchState state)
throws Exception {
UpdateRequest updateRequest = new UpdateRequest();
- updateRequest.setBasePath(
-
miniClusterState.nodes.get(miniClusterState.getRandom().nextInt(state.nodeCount)));
updateRequest.add(state.getNextDoc());
- return miniClusterState.client.request(updateRequest,
BenchState.COLLECTION);
+ final var url =
+
miniClusterState.nodes.get(miniClusterState.getRandom().nextInt(state.nodeCount));
+ return miniClusterState.client.requestWithBaseUrl(url,
BenchState.COLLECTION, updateRequest);
}
}
diff --git
a/solr/benchmark/src/java/org/apache/solr/bench/search/FilterCache.java
b/solr/benchmark/src/java/org/apache/solr/bench/search/FilterCache.java
index e518ff90865..6b7f6bf4a4f 100644
--- a/solr/benchmark/src/java/org/apache/solr/bench/search/FilterCache.java
+++ b/solr/benchmark/src/java/org/apache/solr/bench/search/FilterCache.java
@@ -68,6 +68,7 @@ public class FilterCache {
QueryRequest q1 = new QueryRequest(new SolrQuery("q", "*:*", "fq",
"Ea_b:true"));
QueryRequest q2 = new QueryRequest(new SolrQuery("q", "*:*", "fq",
"FB_b:true"));
+ String baseUrl;
@Setup(Level.Trial)
public void setupTrial(MiniClusterState.MiniClusterBenchState
miniClusterState)
@@ -100,9 +101,7 @@ public class FilterCache {
docs.field("FB_b", booleans);
miniClusterState.index(COLLECTION, docs, 30 * 1000);
- String base = miniClusterState.nodes.get(0);
- q1.setBasePath(base);
- q2.setBasePath(base);
+ baseUrl = miniClusterState.nodes.get(0);
}
@Setup(Level.Iteration)
@@ -110,8 +109,7 @@ public class FilterCache {
throws SolrServerException, IOException {
// Reload the collection/core to drop existing caches
CollectionAdminRequest.Reload reload =
CollectionAdminRequest.reloadCollection(COLLECTION);
- reload.setBasePath(miniClusterState.nodes.get(0));
- miniClusterState.client.request(reload);
+
miniClusterState.client.requestWithBaseUrl(miniClusterState.nodes.get(0), null,
reload);
}
@TearDown(Level.Iteration)
@@ -139,14 +137,17 @@ public class FilterCache {
public Object filterCacheMultipleQueries(
BenchState benchState, MiniClusterState.MiniClusterBenchState
miniClusterState)
throws SolrServerException, IOException {
- return miniClusterState.client.request(
- miniClusterState.getRandom().nextBoolean() ? benchState.q1 :
benchState.q2, COLLECTION);
+ return miniClusterState.client.requestWithBaseUrl(
+ benchState.baseUrl,
+ COLLECTION,
+ miniClusterState.getRandom().nextBoolean() ? benchState.q1 :
benchState.q2);
}
@Benchmark
public Object filterCacheSingleQuery(
BenchState benchState, MiniClusterState.MiniClusterBenchState
miniClusterState)
throws SolrServerException, IOException {
- return miniClusterState.client.request(benchState.q1, COLLECTION);
+ return miniClusterState.client.requestWithBaseUrl(
+ benchState.baseUrl, COLLECTION, benchState.q1);
}
}
diff --git
a/solr/benchmark/src/java/org/apache/solr/bench/search/JsonFaceting.java
b/solr/benchmark/src/java/org/apache/solr/bench/search/JsonFaceting.java
index 498faed5814..1595de56d3b 100755
--- a/solr/benchmark/src/java/org/apache/solr/bench/search/JsonFaceting.java
+++ b/solr/benchmark/src/java/org/apache/solr/bench/search/JsonFaceting.java
@@ -180,11 +180,13 @@ public class JsonFaceting {
BenchState state,
BenchState.ThreadState threadState)
throws Exception {
+ final var url =
miniClusterState.nodes.get(threadState.random.nextInt(state.nodeCount));
QueryRequest queryRequest = new QueryRequest(state.params);
- queryRequest.setBasePath(
-
miniClusterState.nodes.get(threadState.random.nextInt(state.nodeCount)));
-
- NamedList<Object> result = miniClusterState.client.request(queryRequest,
state.collection);
+ NamedList<Object> result =
+ miniClusterState
+ .client
+ .requestWithBaseUrl(url, state.collection, queryRequest)
+ .getResponse();
// MiniClusterState.log("result: " + result);
diff --git
a/solr/benchmark/src/java/org/apache/solr/bench/search/NumericSearch.java
b/solr/benchmark/src/java/org/apache/solr/bench/search/NumericSearch.java
index 3c7a72385f9..4d662205230 100644
--- a/solr/benchmark/src/java/org/apache/solr/bench/search/NumericSearch.java
+++ b/solr/benchmark/src/java/org/apache/solr/bench/search/NumericSearch.java
@@ -101,8 +101,8 @@ public class NumericSearch {
q.setParam("facet.field", "numbers_i_dv", "term_low_s", "term_high_s");
q.setParam("facet.limit", String.valueOf(maxCardinality));
QueryRequest req = new QueryRequest(q);
- req.setBasePath(basePath);
- QueryResponse response = req.process(miniClusterState.client,
COLLECTION);
+ QueryResponse response =
+ miniClusterState.client.requestWithBaseUrl(basePath, COLLECTION,
req);
Set<String> numbers =
response.getFacetField("numbers_i_dv").getValues().stream()
.map(FacetField.Count::getName)
@@ -144,8 +144,7 @@ public class NumericSearch {
throws SolrServerException, IOException {
// Reload the collection/core to drop existing caches
CollectionAdminRequest.Reload reload =
CollectionAdminRequest.reloadCollection(COLLECTION);
- reload.setBasePath(miniClusterState.nodes.get(0));
- miniClusterState.client.request(reload);
+
miniClusterState.client.requestWithBaseUrl(miniClusterState.nodes.get(0), null,
reload);
}
public QueryRequest intSetQuery(boolean dvs) {
@@ -172,7 +171,6 @@ public class NumericSearch {
termQueryField + ":" + lowCardTerms.next(),
"fq",
"{!terms cache=false f='" + field + "'}" + queries.next()));
- q.setBasePath(basePath);
return q;
}
}
diff --git
a/solr/benchmark/src/java/org/apache/solr/bench/search/QueryResponseWriters.java
b/solr/benchmark/src/java/org/apache/solr/bench/search/QueryResponseWriters.java
index 15b4526d49e..30cd848d0ee 100644
---
a/solr/benchmark/src/java/org/apache/solr/bench/search/QueryResponseWriters.java
+++
b/solr/benchmark/src/java/org/apache/solr/bench/search/QueryResponseWriters.java
@@ -98,7 +98,6 @@ public class QueryResponseWriters {
q = new QueryRequest(params);
q.setResponseParser(new NoOpResponseParser(wt));
String base = miniClusterState.nodes.get(0);
- q.setBasePath(base);
}
}
diff --git
a/solr/benchmark/src/java/org/apache/solr/bench/search/SimpleSearch.java
b/solr/benchmark/src/java/org/apache/solr/bench/search/SimpleSearch.java
index 165d68ecb3b..46982b33b89 100644
--- a/solr/benchmark/src/java/org/apache/solr/bench/search/SimpleSearch.java
+++ b/solr/benchmark/src/java/org/apache/solr/bench/search/SimpleSearch.java
@@ -65,8 +65,6 @@ public class SimpleSearch {
miniClusterState.setUseHttp1(useHttp1);
miniClusterState.startMiniCluster(1);
miniClusterState.createCollection(COLLECTION, 1, 1);
- String base = miniClusterState.nodes.get(0);
- q.setBasePath(base);
}
@Setup(Level.Iteration)
@@ -74,7 +72,6 @@ public class SimpleSearch {
throws SolrServerException, IOException {
// Reload the collection/core to drop existing caches
CollectionAdminRequest.Reload reload =
CollectionAdminRequest.reloadCollection(COLLECTION);
- reload.setBasePath(miniClusterState.nodes.get(0));
miniClusterState.client.request(reload);
total = new AtomicLong();
diff --git
a/solr/benchmark/src/test/org/apache/solr/bench/MiniClusterBenchStateTest.java
b/solr/benchmark/src/test/org/apache/solr/bench/MiniClusterBenchStateTest.java
index e17ed29dcd8..af568e3bb98 100644
---
a/solr/benchmark/src/test/org/apache/solr/bench/MiniClusterBenchStateTest.java
+++
b/solr/benchmark/src/test/org/apache/solr/bench/MiniClusterBenchStateTest.java
@@ -118,10 +118,7 @@ public class MiniClusterBenchStateTest extends
SolrTestCaseJ4 {
miniBenchState.forceMerge(collection, 15);
ModifiableSolrParams params = MiniClusterState.params("q", "*:*");
-
QueryRequest queryRequest = new QueryRequest(params);
- queryRequest.setBasePath(miniBenchState.nodes.get(0));
-
QueryResponse result = queryRequest.process(miniBenchState.client,
collection);
BaseBenchState.log("match all query result=" + result);
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
index f7b61765fcd..07e7743e457 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -415,10 +415,10 @@ public class ZkController implements Closeable {
}
this.overseerCollectionQueue = overseer.getCollectionQueue(zkClient);
this.overseerConfigSetQueue = overseer.getConfigSetQueue(zkClient);
- this.sysPropsCacher =
- new NodesSysPropsCacher(
- ((HttpShardHandlerFactory)
getCoreContainer().getShardHandlerFactory()).getClient(),
- zkStateReader);
+ final var client =
+ (Http2SolrClient)
+ ((HttpShardHandlerFactory)
getCoreContainer().getShardHandlerFactory()).getClient();
+ this.sysPropsCacher = new NodesSysPropsCacher(client, zkStateReader);
assert ObjectReleaseTracker.track(this);
}
diff --git a/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
b/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
index 09588fb1be3..b609b5fb749 100644
--- a/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
+++ b/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
@@ -1981,9 +1981,8 @@ public class IndexFetcher {
try {
QueryRequest req = new QueryRequest(params);
req.setResponseParser(new InputStreamResponseParser(FILE_STREAM));
- req.setBasePath(leaderBaseUrl);
if (useExternalCompression) req.addHeader("Accept-Encoding", "gzip");
- response = solrClient.request(req, leaderCoreName);
+ response = solrClient.requestWithBaseUrl(leaderBaseUrl,
leaderCoreName, req).getResponse();
final var responseStatus = (Integer) response.get("responseStatus");
is = (InputStream) response.get("stream");
diff --git a/solr/core/src/java/org/apache/solr/update/PeerSyncWithLeader.java
b/solr/core/src/java/org/apache/solr/update/PeerSyncWithLeader.java
index ad7c76d752a..f46e0c161e7 100644
--- a/solr/core/src/java/org/apache/solr/update/PeerSyncWithLeader.java
+++ b/solr/core/src/java/org/apache/solr/update/PeerSyncWithLeader.java
@@ -28,9 +28,9 @@ import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.util.List;
import java.util.Set;
-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.Http2SolrClient;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.cloud.ZkController;
@@ -54,7 +54,7 @@ public class PeerSyncWithLeader implements SolrMetricProducer
{
private UpdateHandler uhandler;
private UpdateLog ulog;
- private final SolrClient clientToLeader;
+ private final Http2SolrClient clientToLeader;
private final String coreName;
private final String leaderBaseUrl;
@@ -334,8 +334,7 @@ public class PeerSyncWithLeader implements
SolrMetricProducer {
private NamedList<Object> request(ModifiableSolrParams params, String
onFail) {
try {
QueryRequest request = new QueryRequest(params, SolrRequest.METHOD.POST);
- request.setBasePath(leaderBaseUrl);
- QueryResponse rsp = request.process(clientToLeader, coreName);
+ QueryResponse rsp = clientToLeader.requestWithBaseUrl(leaderBaseUrl,
coreName, request);
Exception exception = rsp.getException();
if (exception != null) {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, onFail);
diff --git a/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
b/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
index d31ddc9ca55..7f1998d6c82 100644
--- a/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
+++ b/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
@@ -315,8 +315,9 @@ public class SolrCmdDistributor implements Closeable {
blockAndDoRetries();
try {
- req.uReq.setBasePath(req.node.getUrl());
- clients.getHttpClient().request(req.uReq);
+ clients
+ .getHttpClient()
+ .requestWithBaseUrl(req.node.getBaseUrl(), req.node.getCoreName(),
req.uReq);
} catch (Exception e) {
log.error("Exception making request", e);
SolrError error = new SolrError();
diff --git
a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
index d8c88ac5786..8e3153046ad 100644
---
a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
+++
b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
@@ -692,8 +692,11 @@ public class DistributedUpdateProcessor extends
UpdateRequestProcessor {
NamedList<Object> rsp;
try {
- ur.setBasePath(leaderUrl);
- rsp = updateShardHandler.getUpdateOnlyHttpClient().request(ur);
+ rsp =
+ updateShardHandler
+ .getUpdateOnlyHttpClient()
+ .requestWithBaseUrl(leaderUrl, null, ur)
+ .getResponse();
} catch (SolrServerException e) {
throw new SolrException(
ErrorCode.SERVER_ERROR,
diff --git
a/solr/core/src/test/org/apache/solr/handler/ReplicationTestHelper.java
b/solr/core/src/test/org/apache/solr/handler/ReplicationTestHelper.java
index edd68727f87..2e69ba4915a 100644
--- a/solr/core/src/test/org/apache/solr/handler/ReplicationTestHelper.java
+++ b/solr/core/src/test/org/apache/solr/handler/ReplicationTestHelper.java
@@ -33,7 +33,7 @@ import org.apache.lucene.tests.util.LuceneTestCase;
import org.apache.solr.SolrTestCaseJ4;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrServerException;
-import org.apache.solr.client.solrj.impl.HttpSolrClient;
+import org.apache.solr.client.solrj.impl.Http2SolrClient;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocumentList;
@@ -76,11 +76,11 @@ public final class ReplicationTestHelper {
* @param baseUrl the root URL for a Solr node
* @param collectionOrCore an optional default collection/core for the
created client
*/
- public static SolrClient createNewSolrClient(String baseUrl, String
collectionOrCore) {
- return new HttpSolrClient.Builder(baseUrl)
+ public static Http2SolrClient createNewSolrClient(String baseUrl, String
collectionOrCore) {
+ return new Http2SolrClient.Builder(baseUrl)
.withDefaultCollection(collectionOrCore)
.withConnectionTimeout(15000, TimeUnit.MILLISECONDS)
- .withSocketTimeout(90000, TimeUnit.MILLISECONDS)
+ .withIdleTimeout(90000, TimeUnit.MILLISECONDS)
.build();
}
diff --git
a/solr/core/src/test/org/apache/solr/handler/TestUserManagedReplicationWithAuth.java
b/solr/core/src/test/org/apache/solr/handler/TestUserManagedReplicationWithAuth.java
index b230aad2021..98a5684791d 100644
---
a/solr/core/src/test/org/apache/solr/handler/TestUserManagedReplicationWithAuth.java
+++
b/solr/core/src/test/org/apache/solr/handler/TestUserManagedReplicationWithAuth.java
@@ -33,6 +33,7 @@ import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrResponse;
import org.apache.solr.client.solrj.SolrServerException;
+import org.apache.solr.client.solrj.impl.Http2SolrClient;
import org.apache.solr.client.solrj.request.HealthCheckRequest;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.client.solrj.request.UpdateRequest;
@@ -48,7 +49,7 @@ import org.junit.Test;
@SuppressSSL
public class TestUserManagedReplicationWithAuth extends SolrTestCaseJ4 {
JettySolrRunner leaderJetty, followerJetty, followerJettyWithAuth;
- SolrClient leaderClient, followerClient, followerClientWithAuth;
+ Http2SolrClient leaderClient, followerClient, followerClientWithAuth;
ReplicationTestHelper.SolrInstance leader = null, follower = null,
followerWithAuth = null;
private static String user = "solr";
@@ -227,7 +228,7 @@ public class TestUserManagedReplicationWithAuth extends
SolrTestCaseJ4 {
return withBasicAuth(new QueryRequest(q)).process(client);
}
- private void disablePoll(JettySolrRunner Jetty, SolrClient solrClient)
+ private void disablePoll(JettySolrRunner Jetty, Http2SolrClient solrClient)
throws SolrServerException, IOException {
ModifiableSolrParams disablePollParams = new ModifiableSolrParams();
disablePollParams.set(COMMAND, CMD_DISABLE_POLL);
@@ -235,19 +236,18 @@ public class TestUserManagedReplicationWithAuth extends
SolrTestCaseJ4 {
disablePollParams.set(CommonParams.QT, ReplicationHandler.PATH);
QueryRequest req = new QueryRequest(disablePollParams);
withBasicAuth(req);
- req.setBasePath(buildUrl(Jetty.getLocalPort()));
- solrClient.request(req, DEFAULT_TEST_CORENAME);
+ final var baseUrl = buildUrl(Jetty.getLocalPort());
+ solrClient.requestWithBaseUrl(baseUrl, DEFAULT_TEST_CORENAME, req);
}
private void pullIndexFromTo(
JettySolrRunner srcSolr, JettySolrRunner destSolr, boolean authEnabled)
throws SolrServerException, IOException {
String srcUrl = buildUrl(srcSolr.getLocalPort()) + "/" +
DEFAULT_TEST_CORENAME;
- String destUrl = buildUrl(destSolr.getLocalPort()) + "/" +
DEFAULT_TEST_CORENAME;
QueryRequest req = getQueryRequestForFetchIndex(authEnabled, srcUrl);
- req.setBasePath(buildUrl(destSolr.getLocalPort()));
- followerClient.request(req, DEFAULT_TEST_CORENAME);
+ final var baseUrl = buildUrl(destSolr.getLocalPort());
+ followerClient.requestWithBaseUrl(baseUrl, DEFAULT_TEST_CORENAME, req);
}
private QueryRequest getQueryRequestForFetchIndex(boolean authEnabled,
String srcUrl) {
diff --git
a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/SolrClientNodeStateProvider.java
b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/SolrClientNodeStateProvider.java
index 984e1b7a18f..a9789c8a141 100644
---
a/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/SolrClientNodeStateProvider.java
+++
b/solr/solrj-zookeeper/src/java/org/apache/solr/client/solrj/impl/SolrClientNodeStateProvider.java
@@ -44,7 +44,6 @@ import org.apache.solr.common.cloud.Replica;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
-import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.Pair;
import org.apache.solr.common.util.Utils;
import org.slf4j.Logger;
@@ -293,10 +292,7 @@ public class SolrClientNodeStateProvider implements
NodeStateProvider, MapWriter
request.setResponseParser(new BinaryResponseParser());
try {
- NamedList<Object> rsp =
- cloudSolrClient.getHttpClient().requestWithBaseUrl(url,
request::process).getResponse();
- request.response.setResponse(rsp);
- return request.response;
+ return cloudSolrClient.getHttpClient().requestWithBaseUrl(url,
request::process);
} catch (SolrServerException | IOException e) {
throw new SolrException(ErrorCode.SERVER_ERROR, "Fetching replica
metrics failed", e);
}
diff --git
a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/NodesSysPropsCacher.java
b/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/NodesSysPropsCacher.java
index df9a7c5dbde..37699901323 100644
---
a/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/NodesSysPropsCacher.java
+++
b/solr/solrj-zookeeper/src/java/org/apache/solr/common/cloud/NodesSysPropsCacher.java
@@ -21,8 +21,8 @@ import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.impl.Http2SolrClient;
import org.apache.solr.client.solrj.request.GenericSolrRequest;
import org.apache.solr.common.MapWriter;
import org.apache.solr.common.NavigableObject;
@@ -35,9 +35,9 @@ public class NodesSysPropsCacher implements NodesSysProps,
AutoCloseable {
private volatile boolean isClosed = false;
private final Map<String, Map<String, Object>> nodeVsTagsCache = new
ConcurrentHashMap<>();
private ZkStateReader zkStateReader;
- private final SolrClient solrClient;
+ private final Http2SolrClient solrClient;
- public NodesSysPropsCacher(SolrClient solrClient, ZkStateReader
zkStateReader) {
+ public NodesSysPropsCacher(Http2SolrClient solrClient, ZkStateReader
zkStateReader) {
this.zkStateReader = zkStateReader;
this.solrClient = solrClient;
zkStateReader.registerLiveNodesListener(
@@ -86,10 +86,12 @@ public class NodesSysPropsCacher implements NodesSysProps,
AutoCloseable {
}
GenericSolrRequest req = new GenericSolrRequest(SolrRequest.METHOD.GET,
"/admin/metrics", msp);
- req.setBasePath(zkStateReader.getBaseUrlForNodeName(nodeName));
try {
LinkedHashMap<String, Object> result = new LinkedHashMap<>();
- NavigableObject response = solrClient.request(req);
+ NavigableObject response =
+ solrClient
+
.requestWithBaseUrl(zkStateReader.getBaseUrlForNodeName(nodeName), null, req)
+ .getResponse();
NavigableObject metrics = (NavigableObject) response._get("metrics",
MapWriter.EMPTY);
keys.forEach((tag, key) -> result.put(tag, metrics._get(key, null)));
return result;
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateHttp2SolrClient.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateHttp2SolrClient.java
index 417e985d901..5065256070c 100644
---
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateHttp2SolrClient.java
+++
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateHttp2SolrClient.java
@@ -367,14 +367,14 @@ public class ConcurrentUpdateHttp2SolrClient extends
SolrClient {
@Override
public NamedList<Object> request(final SolrRequest<?> request, String
collection)
throws SolrServerException, IOException {
- if (ClientUtils.shouldApplyDefaultCollection(collection, request))
- collection = defaultCollection;
+ final String effectiveCollection =
+ ClientUtils.shouldApplyDefaultCollection(collection, request)
+ ? defaultCollection
+ : collection;
if (!(request instanceof UpdateRequest)) {
- request.setBasePath(basePath);
- return client.request(request, collection);
+ return client.requestWithBaseUrl(basePath, (c) -> c.request(request,
effectiveCollection));
}
UpdateRequest req = (UpdateRequest) request;
- req.setBasePath(basePath);
// this happens for commit...
if (streamDeletes) {
if ((req.getDocuments() == null || req.getDocuments().isEmpty())
@@ -382,13 +382,14 @@ public class ConcurrentUpdateHttp2SolrClient extends
SolrClient {
&& (req.getDeleteByIdMap() == null ||
req.getDeleteByIdMap().isEmpty())) {
if (req.getDeleteQuery() == null) {
blockUntilFinished();
- return client.request(request, collection);
+ return client.requestWithBaseUrl(
+ basePath, (c) -> c.request(request, effectiveCollection));
}
}
} else {
if ((req.getDocuments() == null || req.getDocuments().isEmpty())) {
blockUntilFinished();
- return client.request(request, collection);
+ return client.requestWithBaseUrl(basePath, (c) -> c.request(request,
effectiveCollection));
}
}
@@ -398,7 +399,7 @@ public class ConcurrentUpdateHttp2SolrClient extends
SolrClient {
if (params.getBool(UpdateParams.WAIT_SEARCHER, false)) {
log.info("blocking for commit/optimize");
blockUntilFinished(); // empty the queue
- return client.request(request, collection);
+ return client.requestWithBaseUrl(basePath, (c) -> c.request(request,
effectiveCollection));
}
}
@@ -408,7 +409,7 @@ public class ConcurrentUpdateHttp2SolrClient extends
SolrClient {
tmpLock.await();
}
- Update update = new Update(req, collection);
+ Update update = new Update(req, effectiveCollection);
boolean success = queue.offer(update);
long lastStallTime = -1;
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttp2SolrClient.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttp2SolrClient.java
index 12327a6b9fa..15ee0a229d6 100644
---
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttp2SolrClient.java
+++
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttp2SolrClient.java
@@ -290,18 +290,23 @@ public class LBHttp2SolrClient extends LBSolrClient {
RetryListener listener) {
String baseUrl = endpoint.toString();
rsp.server = baseUrl;
- req.getRequest().setBasePath(baseUrl);
- CompletableFuture<NamedList<Object>> future =
- ((Http2SolrClient) getClient(endpoint)).requestAsync(req.getRequest());
- future.whenComplete(
- (result, throwable) -> {
- if (!future.isCompletedExceptionally()) {
- onSuccessfulRequest(result, endpoint, rsp, isZombie, listener);
- } else if (!future.isCancelled()) {
- onFailedRequest(throwable, endpoint, isNonRetryable, isZombie,
listener);
- }
- });
- return future;
+ final var client = (Http2SolrClient) getClient(endpoint);
+ try {
+ CompletableFuture<NamedList<Object>> future =
+ client.requestWithBaseUrl(baseUrl, (c) ->
c.requestAsync(req.getRequest()));
+ future.whenComplete(
+ (result, throwable) -> {
+ if (!future.isCompletedExceptionally()) {
+ onSuccessfulRequest(result, endpoint, rsp, isZombie, listener);
+ } else if (!future.isCancelled()) {
+ onFailedRequest(throwable, endpoint, isNonRetryable, isZombie,
listener);
+ }
+ });
+ return future;
+ } catch (SolrServerException | IOException e) {
+ // Unreachable, since 'requestWithBaseUrl' above is running the request
asynchronously
+ throw new RuntimeException(e);
+ }
}
private void onSuccessfulRequest(
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBSolrClient.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBSolrClient.java
index e8fad19f3ca..4305809f23d 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBSolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBSolrClient.java
@@ -493,8 +493,7 @@ public abstract class LBSolrClient extends SolrClient {
Exception ex = null;
try {
rsp.server = baseUrl;
- req.getRequest().setBasePath(baseUrl);
- rsp.rsp = getClient(baseUrl).request(req.getRequest(), (String) null);
+ rsp.rsp = doRequest(baseUrl, req.getRequest(), null);
if (isZombie) {
// TODO: zombieServers key is String not Endpoint.
zombieServers.remove(baseUrl);
@@ -541,6 +540,25 @@ public abstract class LBSolrClient extends SolrClient {
return ex;
}
+ // TODO SOLR-17541 should remove the need for the special-casing below;
remove as a part of that
+ // ticket
+ protected NamedList<Object> doRequest(
+ String baseUrl, SolrRequest<?> solrRequest, String collection)
+ throws SolrServerException, IOException {
+ final var solrClient = getClient(baseUrl);
+
+ // Some implementations of LBSolrClient.getClient(...) return a
Http2SolrClient that may not be
+ // pointed at the desired URL (or any URL for that matter). We special
case that here to ensure
+ // the appropriate URL is provided.
+ if (solrClient instanceof Http2SolrClient) {
+ final var httpSolrClient = (Http2SolrClient) solrClient;
+ return httpSolrClient.requestWithBaseUrl(baseUrl, (c) ->
c.request(solrRequest, collection));
+ }
+
+ // Assume provided client already uses 'baseUrl'
+ return solrClient.request(solrRequest, collection);
+ }
+
protected abstract SolrClient getClient(String baseUrl);
protected abstract SolrClient getClient(Endpoint endpoint);
@@ -636,8 +654,9 @@ public abstract class LBSolrClient extends SolrClient {
private void checkAZombieServer(ServerWrapper zombieServer) {
try {
QueryRequest queryRequest = new QueryRequest(solrQuery);
- queryRequest.setBasePath(zombieServer.baseUrl);
- QueryResponse resp =
queryRequest.process(getClient(zombieServer.getBaseUrl()));
+ final var responseRaw = doRequest(zombieServer.getBaseUrl(),
queryRequest, null);
+ final var resp = new QueryResponse();
+ resp.setResponse(responseRaw);
if (resp.getStatus() == 0) {
// server has come back up.
// make sure to remove from zombies before adding to the alive list to
avoid a race
@@ -755,8 +774,7 @@ public abstract class LBSolrClient extends SolrClient {
ServerWrapper wrapper = pickServer(serverList, request);
try {
++numServersTried;
- request.setBasePath(wrapper.baseUrl);
- return getClient(wrapper.getBaseUrl()).request(request, collection);
+ return doRequest(wrapper.getBaseUrl(), request, collection);
} catch (SolrException e) {
// Server is alive but the request was malformed or invalid
throw e;
@@ -785,8 +803,7 @@ public abstract class LBSolrClient extends SolrClient {
|| (justFailed != null &&
justFailed.containsKey(wrapper.getBaseUrl()))) continue;
try {
++numServersTried;
- request.setBasePath(wrapper.baseUrl);
- NamedList<Object> rsp = getClient(wrapper.baseUrl).request(request,
collection);
+ final var rsp = doRequest(wrapper.baseUrl, request, collection);
// remove from zombie list *before* adding the alive list to avoid a
race that could lose a
// server
zombieServers.remove(wrapper.getBaseUrl());
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/request/HealthCheckRequest.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/request/HealthCheckRequest.java
index 7937beadd02..77a7165bdf5 100644
---
a/solr/solrj/src/java/org/apache/solr/client/solrj/request/HealthCheckRequest.java
+++
b/solr/solrj/src/java/org/apache/solr/client/solrj/request/HealthCheckRequest.java
@@ -22,7 +22,8 @@ import static
org.apache.solr.common.params.CommonParams.HEALTH_CHECK_HANDLER_PA
import java.util.OptionalInt;
import org.apache.solr.client.solrj.SolrClient;
import org.apache.solr.client.solrj.SolrRequest;
-import org.apache.solr.client.solrj.impl.HttpSolrClient;
+import org.apache.solr.client.solrj.impl.BaseHttpSolrClient;
+import org.apache.solr.client.solrj.impl.HttpSolrClientBase;
import org.apache.solr.client.solrj.response.HealthCheckResponse;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
@@ -58,7 +59,7 @@ public class HealthCheckRequest extends
SolrRequest<HealthCheckResponse> {
protected HealthCheckResponse createResponse(SolrClient client) {
// TODO: Accept requests w/ CloudSolrClient while ensuring that the
request doesn't get routed
// to an unintended recipient.
- assert client instanceof HttpSolrClient;
+ assert client instanceof BaseHttpSolrClient || client instanceof
HttpSolrClientBase;
return new HealthCheckResponse();
}
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientTest.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientTest.java
index 0e6ee7bb8a2..0748b133d6a 100644
---
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientTest.java
+++
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/Http2SolrClientTest.java
@@ -30,6 +30,8 @@ import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.client.solrj.request.RequestWriter;
+import org.apache.solr.client.solrj.request.SolrPing;
+import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.ModifiableSolrParams;
@@ -118,10 +120,22 @@ public class Http2SolrClientTest extends
HttpSolrClientTestBase {
}
}
+ /** test that temporary baseURL overrides are reflected in error messages */
@Test
public void testSolrExceptionWithNullBaseurl() throws IOException,
SolrServerException {
+ final int status = 527;
+ DebugServlet.setErrorCode(status);
+
try (Http2SolrClient client = new Http2SolrClient.Builder(null).build()) {
- super.testSolrExceptionWithNullBaseurl(client);
+ try {
+ // if client base url is null, request url will be used in exception
message
+ client.requestWithBaseUrl(getBaseUrl() + DEBUG_SERVLET_PATH,
DEFAULT_CORE, new SolrPing());
+
+ fail("Didn't get excepted exception from oversided request");
+ } catch (SolrException e) {
+ assertEquals("Unexpected exception status code", status, e.code());
+ assertTrue(e.getMessage().contains(getBaseUrl()));
+ }
} finally {
DebugServlet.clear();
}
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java
index 294b6ae9a48..07a202ccc65 100644
---
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java
+++
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpJdkSolrClientTest.java
@@ -389,15 +389,6 @@ public class HttpJdkSolrClientTest extends
HttpSolrClientTestBase {
}
}
- @Test
- public void testSolrExceptionWithNullBaseurl() throws IOException,
SolrServerException {
- try (HttpJdkSolrClient client = builder(null).build()) {
- super.testSolrExceptionWithNullBaseurl(client);
- } finally {
- DebugServlet.clear();
- }
- }
-
@Test
public void testUpdateDefault() throws Exception {
String url = getBaseUrl() + DEBUG_SERVLET_PATH;
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpSolrClientTestBase.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpSolrClientTestBase.java
index 23f577cffa9..919af4ef266 100644
---
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpSolrClientTestBase.java
+++
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/HttpSolrClientTestBase.java
@@ -41,7 +41,6 @@ import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.request.QueryRequest;
-import org.apache.solr.client.solrj.request.SolrPing;
import org.apache.solr.client.solrj.request.UpdateRequest;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.client.solrj.util.Cancellable;
@@ -251,33 +250,6 @@ public abstract class HttpSolrClientTestBase extends
SolrJettyTestBase {
}
}
- /**
- * test that SolrExceptions thrown by HttpSolrClient can correctly
encapsulate http status codes
- * even when not on the list of ErrorCodes solr may return.
- */
- public void testSolrExceptionWithNullBaseurl(HttpSolrClientBase client)
- throws IOException, SolrServerException {
- final int status = 527;
- assertEquals(
- status
- + " didn't generate an UNKNOWN error code, someone modified the
list of valid ErrorCode's w/o changing this test to work a different way",
- SolrException.ErrorCode.UNKNOWN,
- SolrException.ErrorCode.getErrorCode(status));
-
- DebugServlet.setErrorCode(status);
- try {
- // if client base url is null, request url will be used in exception
message
- SolrPing ping = new SolrPing();
- ping.setBasePath(getBaseUrl() + DEBUG_SERVLET_PATH);
- client.request(ping, DEFAULT_CORE);
-
- fail("Didn't get excepted exception from oversided request");
- } catch (SolrException e) {
- assertEquals("Unexpected exception status code", status, e.code());
- assertTrue(e.getMessage().contains(getBaseUrl()));
- }
- }
-
protected enum WT {
JAVABIN,
XML
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/LBHttp2SolrClientTest.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/LBHttp2SolrClientTest.java
index cd1e0d1afd8..2e20a88ca1c 100644
---
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/LBHttp2SolrClientTest.java
+++
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/LBHttp2SolrClientTest.java
@@ -16,6 +16,7 @@
*/
package org.apache.solr.client.solrj.impl;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
@@ -28,7 +29,9 @@ import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import org.apache.solr.SolrTestCase;
+import org.apache.solr.client.solrj.SolrClientFunction;
import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.client.solrj.util.AsyncListener;
import org.apache.solr.client.solrj.util.Cancellable;
@@ -204,9 +207,11 @@ public class LBHttp2SolrClientTest extends SolrTestCase {
int index = Integer.parseInt(lastQueryReq.getParams().get("q"));
assertNull("Found same request twice: " + index, queryRequests[index]);
queryRequests[index] = lastQueryReq;
- if (lastQueryReq.getBasePath().equals(ep1.toString())) {
+
+ final String lastBasePath = client.lastBasePaths.get(i);
+ if (lastBasePath.equals(ep1.toString())) {
numEndpointOne++;
- } else if (lastQueryReq.getBasePath().equals(ep2.toString())) {
+ } else if (lastBasePath.equals(ep2.toString())) {
numEndpointTwo++;
}
NamedList<Object> lastResponse;
@@ -292,6 +297,8 @@ public class LBHttp2SolrClientTest extends SolrTestCase {
public String basePathToFail = null;
+ public String tmpBaseUrl = null;
+
protected MockHttp2SolrClient(String serverBaseUrl, Builder builder) {
// TODO: Consider creating an interface for Http*SolrClient
// so mocks can Implement, not Extend, and not actually need to
@@ -307,14 +314,27 @@ public class LBHttp2SolrClientTest extends SolrTestCase {
throw new UnsupportedOperationException("do not use deprecated method.");
}
+ @Override
+ public <R> R requestWithBaseUrl(
+ String baseUrl, SolrClientFunction<Http2SolrClient, R> clientFunction)
+ throws SolrServerException, IOException {
+ // This use of 'tmpBaseUrl' is NOT thread safe, but that's fine for our
purposes here.
+ try {
+ tmpBaseUrl = baseUrl;
+ return clientFunction.apply(this);
+ } finally {
+ tmpBaseUrl = null;
+ }
+ }
+
@Override
public CompletableFuture<NamedList<Object>> requestAsync(
final SolrRequest<?> solrRequest, String collection) {
CompletableFuture<NamedList<Object>> cf = new CompletableFuture<>();
lastSolrRequests.add(solrRequest);
- lastBasePaths.add(solrRequest.getBasePath());
+ lastBasePaths.add(tmpBaseUrl);
lastCollections.add(collection);
- if (solrRequest.getBasePath().equals(basePathToFail)) {
+ if (tmpBaseUrl != null && tmpBaseUrl.equals(basePathToFail)) {
cf.completeExceptionally(
new SolrException(SolrException.ErrorCode.SERVER_ERROR, "We should
retry this."));
} else {