This is an automated email from the ASF dual-hosted git repository.
epugh 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 9cabc8e188a SOLR-10452: setQueryParams should be deprecated in favor
of SolrClientBuilder methods (#1253)
9cabc8e188a is described below
commit 9cabc8e188a0c9beba2047c21b3ab9299365586d
Author: Eric Pugh <[email protected]>
AuthorDate: Sat Dec 31 08:35:04 2022 -0500
SOLR-10452: setQueryParams should be deprecated in favor of
SolrClientBuilder methods (#1253)
Moved setQueryParams to the Builder, and renamed it to setUrlParamNames, to
make it clearer that it's just the name of url parameters.
Co-authored-by: Alex Deparvu <[email protected]>
Co-authored-by: David Smiley <[email protected]>
---
solr/CHANGES.txt | 4 ++
.../org/apache/solr/update/UpdateShardHandler.java | 10 ++--
.../solrj/impl/ConcurrentUpdateSolrClient.java | 14 +++++-
.../solrj/impl/DelegationTokenHttpSolrClient.java | 18 ++++----
.../solr/client/solrj/impl/Http2SolrClient.java | 40 +++++++++++++---
.../solr/client/solrj/impl/HttpSolrClient.java | 40 ++++++++++++----
.../solr/client/solrj/impl/LBHttp2SolrClient.java | 52 +++++++++++++--------
.../solr/client/solrj/impl/LBHttpSolrClient.java | 31 +++++++++++--
.../solr/client/solrj/impl/LBSolrClient.java | 19 --------
.../solr/client/solrj/impl/SolrClientBuilder.java | 6 +--
.../client/solrj/impl/BasicHttpSolrClientTest.java | 28 +++++-------
.../client/solrj/impl/Http2SolrClientTest.java | 53 ++++++++++++----------
.../client/solrj/impl/LBHttp2SolrClientTest.java | 53 ++++++++++++----------
13 files changed, 224 insertions(+), 144 deletions(-)
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index c7366cda64e..5cb23c19109 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -74,6 +74,10 @@ Improvements
* SOLR-10462: Introduce Builder setter for pollQueueTime on
ConcurrentUpdateHttp2SolrClient. Deprecated
direct setter setPollQueueTime on ConcurrentUpdateHttp2SolrClient. (Eric
Pugh)
+
+* SOLR-10452: Introduce Builder setter withTheseParamNamesInTheUrl for
queryParams, renaming them to urlParamNames
+ to clarify they are parameter names, not the values. Deprecated direct
setter setQueryParams and addQueryParams
+ on SolrClients. (Eric Pugh, David Smiley, Alex Deparvu)
Optimizations
---------------------
diff --git a/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java
b/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java
index 38b17cc442f..4ce3d9d9e71 100644
--- a/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java
+++ b/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java
@@ -20,7 +20,6 @@ import static
org.apache.solr.util.stats.InstrumentedHttpRequestExecutor.KNOWN_M
import com.google.common.annotations.VisibleForTesting;
import java.lang.invoke.MethodHandles;
-import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ExecutorService;
@@ -138,6 +137,10 @@ public class UpdateShardHandler implements SolrInfoBean {
HttpClientUtil.createClient(
clientParams, defaultConnectionManager, false,
httpRequestExecutor);
+ Set<String> urlParamNames =
+ Set.of(
+ DistributedUpdateProcessor.DISTRIB_FROM,
+ DistributingUpdateProcessorFactory.DISTRIB_UPDATE_PARAM);
Http2SolrClient.Builder updateOnlyClientBuilder = new
Http2SolrClient.Builder();
if (cfg != null) {
updateOnlyClientBuilder
@@ -145,12 +148,9 @@ public class UpdateShardHandler implements SolrInfoBean {
.idleTimeout(cfg.getDistributedSocketTimeout())
.maxConnectionsPerHost(cfg.getMaxUpdateConnectionsPerHost());
}
+ updateOnlyClientBuilder.withTheseParamNamesInTheUrl(urlParamNames);
updateOnlyClient = updateOnlyClientBuilder.build();
updateOnlyClient.addListenerFactory(updateHttpListenerFactory);
- Set<String> queryParams = new HashSet<>(2);
- queryParams.add(DistributedUpdateProcessor.DISTRIB_FROM);
- queryParams.add(DistributingUpdateProcessorFactory.DISTRIB_UPDATE_PARAM);
- updateOnlyClient.setQueryParams(queryParams);
ThreadFactory recoveryThreadFactory = new
SolrNamedThreadFactory("recoveryExecutor");
if (cfg != null && cfg.getMaxRecoveryThreads() > 0) {
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateSolrClient.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateSolrClient.java
index 5150318b339..7680b6e7f62 100644
---
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateSolrClient.java
+++
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateSolrClient.java
@@ -108,6 +108,7 @@ public class ConcurrentUpdateSolrClient extends SolrClient {
.withConnectionTimeout(builder.connectionTimeoutMillis)
.withSocketTimeout(builder.socketTimeoutMillis)
.withFollowRedirects(false)
+ .withTheseParamNamesInTheUrl(builder.urlParamNames)
.build();
this.queue = new LinkedBlockingQueue<>(builder.queueSize);
this.threadCount = builder.threadCount;
@@ -140,15 +141,26 @@ public class ConcurrentUpdateSolrClient extends
SolrClient {
}
}
+ /**
+ * @deprecated use {@link #getUrlParamNames()}
+ */
+ @Deprecated
public Set<String> getQueryParams() {
- return this.client.getQueryParams();
+ return getUrlParamNames();
+ }
+
+ public Set<String> getUrlParamNames() {
+ return this.client.getUrlParamNames();
}
/**
* Expert Method.
*
* @param queryParams set of param keys to only send via the query string
+ * @deprecated use {@link
ConcurrentUpdateSolrClient.Builder#withTheseParamNamesInTheUrl(Set)}
+ * instead
*/
+ @Deprecated
public void setQueryParams(Set<String> queryParams) {
this.client.setQueryParams(queryParams);
}
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/DelegationTokenHttpSolrClient.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/DelegationTokenHttpSolrClient.java
index 72132c597d1..02f5ba2ece8 100644
---
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/DelegationTokenHttpSolrClient.java
+++
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/DelegationTokenHttpSolrClient.java
@@ -17,11 +17,9 @@
package org.apache.solr.client.solrj.impl;
import java.io.IOException;
-import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
-import java.util.TreeSet;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.solr.client.solrj.SolrRequest;
import org.apache.solr.client.solrj.SolrServerException;
@@ -37,7 +35,6 @@ public class DelegationTokenHttpSolrClient extends
HttpSolrClient {
*/
protected DelegationTokenHttpSolrClient(Builder builder) {
super(builder);
- setQueryParams(new TreeSet<>(Arrays.asList(DELEGATION_TOKEN_PARAM)));
}
@Override
@@ -50,14 +47,15 @@ public class DelegationTokenHttpSolrClient extends
HttpSolrClient {
return super.createMethod(request, collection);
}
+ @Deprecated
@Override
- public void setQueryParams(Set<String> queryParams) {
- queryParams = queryParams == null ? Set.of(DELEGATION_TOKEN_PARAM) :
queryParams;
- if (!queryParams.contains(DELEGATION_TOKEN_PARAM)) {
- queryParams = new HashSet<>(queryParams);
- queryParams.add(DELEGATION_TOKEN_PARAM);
- queryParams = Collections.unmodifiableSet(queryParams);
+ public void setQueryParams(Set<String> urlParamNames) {
+ urlParamNames = urlParamNames == null ? Set.of(DELEGATION_TOKEN_PARAM) :
urlParamNames;
+ if (!urlParamNames.contains(DELEGATION_TOKEN_PARAM)) {
+ urlParamNames = new HashSet<>(urlParamNames);
+ urlParamNames.add(DELEGATION_TOKEN_PARAM);
+ urlParamNames = Collections.unmodifiableSet(urlParamNames);
}
- super.setQueryParams(queryParams);
+ super.setQueryParams(urlParamNames);
}
}
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
index d5f821b7ba3..71553756a5b 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
@@ -128,7 +128,7 @@ public class Http2SolrClient extends SolrClient {
private static final List<String> errPath = Arrays.asList("metadata",
"error-class");
private HttpClient httpClient;
- private volatile Set<String> queryParams = Collections.emptySet();
+ private volatile Set<String> urlParamNames = Set.of();
private int idleTimeout;
private int requestTimeout;
@@ -186,6 +186,7 @@ public class Http2SolrClient extends SolrClient {
requestTimeout = builder.requestTimeout;
}
httpClient.setFollowRedirects(builder.followRedirects);
+ this.urlParamNames = builder.urlParamNames;
assert ObjectReleaseTracker.track(this);
}
@@ -679,7 +680,7 @@ public class Http2SolrClient extends SolrClient {
contentWriter.getContentType(), ByteBuffer.wrap(baos.getbuf(),
0, baos.size())));
} else if (streams == null || isMultipart) {
// send server list and request list as query string params
- ModifiableSolrParams queryParams =
calculateQueryParams(this.queryParams, wparams);
+ ModifiableSolrParams queryParams =
calculateQueryParams(this.urlParamNames, wparams);
queryParams.add(calculateQueryParams(solrRequest.getQueryParams(),
wparams));
Request req = httpClient.newRequest(url +
queryParams.toQueryString()).method(method);
return fillContentStream(req, streams, wparams, isMultipart);
@@ -991,6 +992,7 @@ public class Http2SolrClient extends SolrClient {
private ExecutorService executor;
protected RequestWriter requestWriter;
protected ResponseParser responseParser;
+ private Set<String> urlParamNames = Set.of();
public Builder() {}
@@ -1079,6 +1081,19 @@ public class Http2SolrClient extends SolrClient {
return this;
}
+ /**
+ * Expert Method
+ *
+ * @param urlParamNames set of param keys that are only sent via the query
string. Note that the
+ * param will be sent as a query string if the key is part of this Set
or the SolrRequest's
+ * query params.
+ * @see org.apache.solr.client.solrj.SolrRequest#getQueryParams
+ */
+ public Builder withTheseParamNamesInTheUrl(Set<String> urlParamNames) {
+ this.urlParamNames = urlParamNames;
+ return this;
+ }
+
/**
* Set maxConnectionsPerHost for http1 connections, maximum number http2
connections is limited
* by 4
@@ -1115,19 +1130,30 @@ public class Http2SolrClient extends SolrClient {
}
}
+ /**
+ * @deprecated use {@link #getUrlParamNames()}
+ */
+ @Deprecated
public Set<String> getQueryParams() {
- return queryParams;
+ return getUrlParamNames();
+ }
+
+ public Set<String> getUrlParamNames() {
+ return urlParamNames;
}
/**
* Expert Method
*
- * @param queryParams set of param keys to only send via the query string
Note that the param will
- * be sent as a query string if the key is part of this Set or the
SolrRequest's query params.
+ * @param urlParamNames set of param keys that are only sent via the query
string. Note that the
+ * param will be sent as a query string if the key is part of this Set
or the SolrRequest's
+ * query params.
* @see org.apache.solr.client.solrj.SolrRequest#getQueryParams
+ * @deprecated use {@link
Http2SolrClient.Builder#withTheseParamNamesInTheUrl(Set)} instead
*/
- public void setQueryParams(Set<String> queryParams) {
- this.queryParams = queryParams;
+ @Deprecated
+ public void setUrlParamNames(Set<String> urlParamNames) {
+ this.urlParamNames = urlParamNames;
}
private ModifiableSolrParams calculateQueryParams(
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClient.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClient.java
index 79d01a5c4f4..15015b4fcce 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClient.java
@@ -36,6 +36,7 @@ import java.util.Arrays;
import java.util.Base64;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
@@ -148,7 +149,7 @@ public class HttpSolrClient extends BaseHttpSolrClient {
private volatile boolean useMultiPartPost;
private final boolean internalClient;
- private volatile Set<String> queryParams = Collections.emptySet();
+ private volatile Set<String> urlParamNames = Set.of();
private volatile Integer connectionTimeout;
private volatile Integer soTimeout;
@@ -187,26 +188,36 @@ public class HttpSolrClient extends BaseHttpSolrClient {
this.connectionTimeout = builder.connectionTimeoutMillis;
this.soTimeout = builder.socketTimeoutMillis;
this.useMultiPartPost = builder.useMultiPartPost;
- this.queryParams = builder.queryParams;
+ this.urlParamNames = builder.urlParamNames;
}
+ /**
+ * @deprecated use {@link #getUrlParamNames()}
+ */
+ @Deprecated
public Set<String> getQueryParams() {
- return queryParams;
+ return getUrlParamNames();
+ }
+
+ public Set<String> getUrlParamNames() {
+ return urlParamNames;
}
/**
* Expert Method
*
- * @param queryParams set of param keys to only send via the query string
Note that the param will
- * be sent as a query string if the key is part of this Set or the
SolrRequest's query params.
+ * @param urlParamNames set of param keys to only send via the query string
Note that the param
+ * will be sent as a query string if the key is part of this Set or the
SolrRequest's query
+ * params.
* <p>{@link SolrClient} setters can be unsafe when the involved {@link
SolrClient} is used in
- * multiple threads simultaneously. To avoid this, use {@link
Builder#withQueryParams(Set)}.
+ * multiple threads simultaneously. To avoid this, use {@link
+ * Builder#withTheseParamNamesInTheUrl(Set)}.
* @see org.apache.solr.client.solrj.SolrRequest#getQueryParams
- * @deprecated use {@link Builder#withQueryParams(Set)} instead
+ * @deprecated use {@link Builder#withTheseParamNamesInTheUrl(Set)} instead
*/
@Deprecated
- public void setQueryParams(Set<String> queryParams) {
- this.queryParams = queryParams;
+ public void setQueryParams(Set<String> urlParamNames) {
+ this.urlParamNames = urlParamNames;
}
/**
@@ -435,7 +446,7 @@ public class HttpSolrClient extends BaseHttpSolrClient {
} else if (streams == null || isMultipart) {
// send server list and request list as query string params
- ModifiableSolrParams queryParams =
calculateQueryParams(this.queryParams, wparams);
+ ModifiableSolrParams queryParams =
calculateQueryParams(this.urlParamNames, wparams);
queryParams.add(calculateQueryParams(request.getQueryParams(),
wparams));
String fullQueryUrl = url + queryParams.toQueryString();
HttpEntityEnclosingRequestBase postOrPut =
@@ -1041,6 +1052,15 @@ public class HttpSolrClient extends BaseHttpSolrClient {
if
(this.invariantParams.get(DelegationTokenHttpSolrClient.DELEGATION_TOKEN_PARAM)
== null) {
return new HttpSolrClient(this);
} else {
+ urlParamNames =
+ urlParamNames == null
+ ? Set.of(DelegationTokenHttpSolrClient.DELEGATION_TOKEN_PARAM)
+ : urlParamNames;
+ if
(!urlParamNames.contains(DelegationTokenHttpSolrClient.DELEGATION_TOKEN_PARAM))
{
+ urlParamNames = new HashSet<>(urlParamNames);
+
urlParamNames.add(DelegationTokenHttpSolrClient.DELEGATION_TOKEN_PARAM);
+ }
+ urlParamNames = Set.copyOf(urlParamNames);
return new DelegationTokenHttpSolrClient(this);
}
}
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 04b1800ab94..a98ed89d73b 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
@@ -23,6 +23,7 @@ import java.net.ConnectException;
import java.net.SocketException;
import java.net.SocketTimeoutException;
import java.util.Arrays;
+import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -82,25 +83,25 @@ import org.slf4j.MDC;
* @since solr 8.0
*/
public class LBHttp2SolrClient extends LBSolrClient {
- private final Http2SolrClient httpClient;
+ private final Http2SolrClient solrClient;
/**
* @deprecated Use {@link LBHttp2SolrClient.Builder} instead
*/
@Deprecated
- public LBHttp2SolrClient(Http2SolrClient httpClient, String... baseSolrUrls)
{
+ public LBHttp2SolrClient(Http2SolrClient solrClient, String... baseSolrUrls)
{
super(Arrays.asList(baseSolrUrls));
- this.httpClient = httpClient;
+ this.solrClient = solrClient;
}
- private LBHttp2SolrClient(Http2SolrClient httpClient, List<String>
baseSolrUrls) {
+ private LBHttp2SolrClient(Http2SolrClient solrClient, List<String>
baseSolrUrls) {
super(baseSolrUrls);
- this.httpClient = httpClient;
+ this.solrClient = solrClient;
}
@Override
protected SolrClient getClient(String baseUrl) {
- return httpClient;
+ return solrClient;
}
/**
@@ -115,12 +116,12 @@ public class LBHttp2SolrClient extends LBSolrClient {
@Override
public void setParser(ResponseParser parser) {
super.setParser(parser);
- this.httpClient.setParser(parser);
+ this.solrClient.setParser(parser);
}
@Override
public ResponseParser getParser() {
- return httpClient.getParser();
+ return solrClient.getParser();
}
/**
@@ -136,24 +137,37 @@ public class LBHttp2SolrClient extends LBSolrClient {
@Override
public void setRequestWriter(RequestWriter writer) {
super.setRequestWriter(writer);
- this.httpClient.setRequestWriter(writer);
+ this.solrClient.setRequestWriter(writer);
}
@Override
public RequestWriter getRequestWriter() {
- return httpClient.getRequestWriter();
+ return solrClient.getRequestWriter();
}
- @Override
+ public Set<String> getUrlParamNames() {
+ return solrClient.getUrlParamNames();
+ }
+
+ /**
+ * @deprecated You should instead set this on the passed in Http2SolrClient
used by the Builder.
+ */
+ @Deprecated
public void setQueryParams(Set<String> queryParams) {
- super.setQueryParams(queryParams);
- this.httpClient.setQueryParams(queryParams);
+ this.solrClient.setUrlParamNames(queryParams);
}
- @Override
+ /**
+ * This method should be removed as being able to add a query parameter
isn't compatible with the
+ * idea that query params are an immutable property of a solr client.
+ *
+ * @deprecated you should instead set this on the passed in Http2SolrClient
used by the Builder.
+ */
+ @Deprecated
public void addQueryParams(String queryOnlyParam) {
- super.addQueryParams(queryOnlyParam);
- this.httpClient.setQueryParams(getQueryParams());
+ Set<String> urlParamNames = new
HashSet<>(this.solrClient.getUrlParamNames());
+ urlParamNames.add(queryOnlyParam);
+ this.solrClient.setUrlParamNames(urlParamNames);
}
public Cancellable asyncReq(Req req, AsyncListener<Rsp> asyncListener) {
@@ -301,12 +315,12 @@ public class LBHttp2SolrClient extends LBSolrClient {
public static class Builder {
public static final int CHECK_INTERVAL = 60 * 1000; // 1 minute between
checks
- private final Http2SolrClient http2Client;
+ private final Http2SolrClient http2SolrClient;
private final String[] baseSolrUrls;
private int aliveCheckInterval = CHECK_INTERVAL;
public Builder(Http2SolrClient http2Client, String... baseSolrUrls) {
- this.http2Client = http2Client;
+ this.http2SolrClient = http2Client;
this.baseSolrUrls = baseSolrUrls;
}
@@ -327,7 +341,7 @@ public class LBHttp2SolrClient extends LBSolrClient {
public LBHttp2SolrClient build() {
LBHttp2SolrClient solrClient =
- new LBHttp2SolrClient(this.http2Client,
Arrays.asList(this.baseSolrUrls));
+ new LBHttp2SolrClient(this.http2SolrClient,
Arrays.asList(this.baseSolrUrls));
solrClient.aliveCheckInterval = this.aliveCheckInterval;
return solrClient;
}
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttpSolrClient.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttpSolrClient.java
index 8b321f8e1f8..e89df0c1b93 100644
---
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttpSolrClient.java
+++
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttpSolrClient.java
@@ -17,7 +17,9 @@
package org.apache.solr.client.solrj.impl;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.http.client.HttpClient;
import org.apache.solr.client.solrj.SolrClient;
@@ -76,6 +78,7 @@ public class LBHttpSolrClient extends LBSolrClient {
private final boolean clientIsInternal;
private final ConcurrentHashMap<String, HttpSolrClient> urlToClient = new
ConcurrentHashMap<>();
private final HttpSolrClient.Builder httpSolrClientBuilder;
+ private volatile Set<String> urlParamNames = new HashSet<>();
private Integer connectionTimeout;
private volatile Integer soTimeout;
@@ -123,8 +126,8 @@ public class LBHttpSolrClient extends LBSolrClient {
if (requestWriter != null) {
httpSolrClientBuilder.withRequestWriter(requestWriter);
}
- if (queryParams != null) {
- httpSolrClientBuilder.withQueryParams(queryParams);
+ if (urlParamNames != null) {
+ httpSolrClientBuilder.withTheseParamNamesInTheUrl(urlParamNames);
}
client = httpSolrClientBuilder.build();
}
@@ -140,8 +143,8 @@ public class LBHttpSolrClient extends LBSolrClient {
if (requestWriter != null) {
clientBuilder.withRequestWriter(requestWriter);
}
- if (queryParams != null) {
- clientBuilder.withQueryParams(queryParams);
+ if (urlParamNames != null) {
+ clientBuilder.withTheseParamNamesInTheUrl(urlParamNames);
}
client = clientBuilder.build();
}
@@ -178,6 +181,26 @@ public class LBHttpSolrClient extends LBSolrClient {
return httpClient;
}
+ @Deprecated
+ public Set<String> getQueryParams() {
+ return urlParamNames;
+ }
+
+ /**
+ * Expert Method.
+ *
+ * @param urlParamNames set of param keys to only send via the query string
+ */
+ @Deprecated
+ public void setQueryParams(Set<String> urlParamNames) {
+ this.urlParamNames = urlParamNames;
+ }
+
+ @Deprecated
+ public void addQueryParams(String urlParamNames) {
+ this.urlParamNames.add(urlParamNames);
+ }
+
/** Constructs {@link LBHttpSolrClient} instances from provided
configuration. */
public static class Builder extends SolrClientBuilder<Builder> {
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 59141fb03f9..5e5f0c0e93a 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
@@ -84,8 +84,6 @@ public abstract class LBSolrClient extends SolrClient {
protected volatile ResponseParser parser;
protected volatile RequestWriter requestWriter;
- protected Set<String> queryParams = new HashSet<>();
-
static {
solrQuery.setRows(0);
/**
@@ -319,23 +317,6 @@ public abstract class LBSolrClient extends SolrClient {
return new ServerWrapper(baseUrl);
}
- public Set<String> getQueryParams() {
- return queryParams;
- }
-
- /**
- * Expert Method.
- *
- * @param queryParams set of param keys to only send via the query string
- */
- public void setQueryParams(Set<String> queryParams) {
- this.queryParams = queryParams;
- }
-
- public void addQueryParams(String queryOnlyParam) {
- this.queryParams.add(queryOnlyParam);
- }
-
public static String normalize(String server) {
if (server.endsWith("/")) server = server.substring(0, server.length() -
1);
return server;
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientBuilder.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientBuilder.java
index 43e6ba0e967..a54776c4e78 100644
---
a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientBuilder.java
+++
b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientBuilder.java
@@ -35,7 +35,7 @@ public abstract class SolrClientBuilder<B extends
SolrClientBuilder<B>> {
protected Integer connectionTimeoutMillis = 15000;
protected Integer socketTimeoutMillis = 120000;
protected boolean followRedirects = false;
- protected Set<String> queryParams;
+ protected Set<String> urlParamNames;
/** The solution for the unchecked cast warning. */
public abstract B getThis();
@@ -70,8 +70,8 @@ public abstract class SolrClientBuilder<B extends
SolrClientBuilder<B>> {
* @param queryParams set of param keys to only send via the query string
Note that the param will
* be sent as a query string if the key is part of this Set or the
SolrRequest's query params.
*/
- public B withQueryParams(Set<String> queryParams) {
- this.queryParams = queryParams;
+ public B withTheseParamNamesInTheUrl(Set<String> queryParams) {
+ this.urlParamNames = queryParams;
return getThis();
}
diff --git
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/BasicHttpSolrClientTest.java
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/BasicHttpSolrClientTest.java
index 11d59297d3d..79a22c29e6c 100644
---
a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/BasicHttpSolrClientTest.java
+++
b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/BasicHttpSolrClientTest.java
@@ -29,7 +29,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.TreeSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@@ -747,14 +746,6 @@ public class BasicHttpSolrClientTest extends
SolrJettyTestBase {
}
}
- private Set<String> setOf(String... keys) {
- Set<String> set = new TreeSet<>();
- if (keys != null) {
- Collections.addAll(set, keys);
- }
- return set;
- }
-
private void setReqParamsOf(UpdateRequest req, String... keys) {
if (keys != null) {
for (String k : keys) {
@@ -790,7 +781,8 @@ public class BasicHttpSolrClientTest extends
SolrJettyTestBase {
final String clientUrl = jetty.getBaseUrl().toString() + "/debug/foo";
HttpSolrClient.Builder builder = new HttpSolrClient.Builder(clientUrl);
- try (HttpSolrClient client =
builder.withQueryParams(setOf("serverOnly")).build()) {
+ try (HttpSolrClient client =
+ builder.withTheseParamNamesInTheUrl(Set.of("serverOnly")).build()) {
// test without request query params
DebugServlet.clear();
UpdateRequest req = new UpdateRequest();
@@ -798,36 +790,38 @@ public class BasicHttpSolrClientTest extends
SolrJettyTestBase {
expectThrows(BaseHttpSolrClient.RemoteSolrException.class, () ->
client.request(req));
verifyServletState(client, req);
}
- try (HttpSolrClient client = builder.withQueryParams(setOf()).build()) {
+ try (HttpSolrClient client =
builder.withTheseParamNamesInTheUrl(Set.of()).build()) {
// test without server query params
DebugServlet.clear();
UpdateRequest req2 = new UpdateRequest();
- req2.setQueryParams(setOf("requestOnly"));
+ req2.setQueryParams(Set.of("requestOnly"));
setReqParamsOf(req2, "requestOnly", "notRequest");
expectThrows(BaseHttpSolrClient.RemoteSolrException.class, () ->
client.request(req2));
verifyServletState(client, req2);
}
- try (HttpSolrClient client = builder.withQueryParams(setOf("serverOnly",
"both")).build()) {
+ try (HttpSolrClient client =
+ builder.withTheseParamNamesInTheUrl(Set.of("serverOnly",
"both")).build()) {
// test with both request and server query params
DebugServlet.clear();
UpdateRequest req3 = new UpdateRequest();
- req3.setQueryParams(setOf("requestOnly", "both"));
+ req3.setQueryParams(Set.of("requestOnly", "both"));
setReqParamsOf(req3, "serverOnly", "requestOnly", "both", "neither");
expectThrows(BaseHttpSolrClient.RemoteSolrException.class, () ->
client.request(req3));
verifyServletState(client, req3);
}
- try (HttpSolrClient client = builder.withQueryParams(setOf("serverOnly",
"both")).build()) {
+ try (HttpSolrClient client =
+ builder.withTheseParamNamesInTheUrl(Set.of("serverOnly",
"both")).build()) {
// test with both request and server query params with single stream
DebugServlet.clear();
UpdateRequest req4 = new UpdateRequest();
req4.add(new SolrInputDocument());
- req4.setQueryParams(setOf("requestOnly", "both"));
+ req4.setQueryParams(Set.of("requestOnly", "both"));
setReqParamsOf(req4, "serverOnly", "requestOnly", "both", "neither");
expectThrows(BaseHttpSolrClient.RemoteSolrException.class, () ->
client.request(req4));
// NOTE: single stream requests send all the params
// as part of the query string. So add "neither" to the request
// so it passes the verification step.
- req4.setQueryParams(setOf("requestOnly", "both", "neither"));
+ req4.setQueryParams(Set.of("requestOnly", "both", "neither"));
verifyServletState(client, req4);
}
}
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 e08b12f8a3f..57636345077 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,7 +30,6 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
-import java.util.TreeSet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
@@ -189,7 +188,7 @@ public class Http2SolrClientTest extends SolrJettyTestBase {
super.tearDown();
}
- private Http2SolrClient.Builder getHttp2SolrClient(
+ private Http2SolrClient.Builder getHttp2SolrClientBuilder(
String url, int connectionTimeOut, int socketTimeout) {
return new Http2SolrClient.Builder(url)
.connectionTimeout(connectionTimeOut)
@@ -200,7 +199,7 @@ public class Http2SolrClientTest extends SolrJettyTestBase {
public void testTimeout() throws Exception {
SolrQuery q = new SolrQuery("*:*");
try (Http2SolrClient client =
- getHttp2SolrClient(
+ getHttp2SolrClientBuilder(
jetty.getBaseUrl().toString() + "/slow/foo",
DEFAULT_CONNECTION_TIMEOUT, 2000)
.build()) {
client.query(q, SolrRequest.METHOD.GET);
@@ -214,7 +213,7 @@ public class Http2SolrClientTest extends SolrJettyTestBase {
public void test0IdleTimeout() throws Exception {
SolrQuery q = new SolrQuery("*:*");
try (Http2SolrClient client =
- getHttp2SolrClient(
+ getHttp2SolrClientBuilder(
jetty.getBaseUrl().toString() + "/debug/foo",
DEFAULT_CONNECTION_TIMEOUT, 0)
.build()) {
try {
@@ -228,7 +227,7 @@ public class Http2SolrClientTest extends SolrJettyTestBase {
public void testRequestTimeout() throws Exception {
SolrQuery q = new SolrQuery("*:*");
try (Http2SolrClient client =
- getHttp2SolrClient(
+ getHttp2SolrClientBuilder(
jetty.getBaseUrl().toString() + "/slow/foo",
DEFAULT_CONNECTION_TIMEOUT, 0)
.requestTimeout(500)
.build()) {
@@ -619,14 +618,6 @@ public class Http2SolrClientTest extends SolrJettyTestBase
{
}
}
- private Set<String> setOf(String... keys) {
- Set<String> set = new TreeSet<>();
- if (keys != null) {
- Collections.addAll(set, keys);
- }
- return set;
- }
-
private void setReqParamsOf(UpdateRequest req, String... keys) {
if (keys != null) {
for (String k : keys) {
@@ -644,7 +635,7 @@ public class Http2SolrClientTest extends SolrJettyTestBase {
if (values != null) {
for (String value : values) {
boolean shouldBeInQueryString =
- client.getQueryParams().contains(name)
+ client.getUrlParamNames().contains(name)
|| (request.getQueryParams() != null &&
request.getQueryParams().contains(name));
assertEquals(
shouldBeInQueryString, DebugServlet.queryString.contains(name +
"=" + value));
@@ -661,12 +652,16 @@ public class Http2SolrClientTest extends
SolrJettyTestBase {
public void testQueryString() throws Exception {
final String clientUrl = jetty.getBaseUrl().toString() + "/debug/foo";
- try (Http2SolrClient client = getHttp2SolrClient(clientUrl)) {
+ UpdateRequest req = new UpdateRequest();
+
+ try (Http2SolrClient client =
+ new Http2SolrClient.Builder(clientUrl)
+ .withTheseParamNamesInTheUrl(Set.of("serverOnly"))
+ .build()) {
// test without request query params
DebugServlet.clear();
- client.setQueryParams(setOf("serverOnly"));
- UpdateRequest req = new UpdateRequest();
setReqParamsOf(req, "serverOnly", "notServer");
+
try {
client.request(req);
} catch (BaseHttpSolrClient.RemoteSolrException ignored) {
@@ -675,9 +670,11 @@ public class Http2SolrClientTest extends SolrJettyTestBase
{
// test without server query params
DebugServlet.clear();
- client.setQueryParams(setOf());
+ }
+ try (Http2SolrClient client =
+ new
Http2SolrClient.Builder(clientUrl).withTheseParamNamesInTheUrl(Set.of()).build())
{
req = new UpdateRequest();
- req.setQueryParams(setOf("requestOnly"));
+ req.setQueryParams(Set.of("requestOnly"));
setReqParamsOf(req, "requestOnly", "notRequest");
try {
client.request(req);
@@ -687,22 +684,30 @@ public class Http2SolrClientTest extends
SolrJettyTestBase {
// test with both request and server query params
DebugServlet.clear();
+ }
+ try (Http2SolrClient client =
+ new Http2SolrClient.Builder(clientUrl)
+ .withTheseParamNamesInTheUrl(Set.of("serverOnly", "both"))
+ .build()) {
req = new UpdateRequest();
- client.setQueryParams(setOf("serverOnly", "both"));
- req.setQueryParams(setOf("requestOnly", "both"));
+ req.setQueryParams(Set.of("requestOnly", "both"));
setReqParamsOf(req, "serverOnly", "requestOnly", "both", "neither");
try {
client.request(req);
} catch (BaseHttpSolrClient.RemoteSolrException ignored) {
}
verifyServletState(client, req);
+ }
+ try (Http2SolrClient client =
+ new Http2SolrClient.Builder(clientUrl)
+ .withTheseParamNamesInTheUrl(Set.of("serverOnly", "both"))
+ .build()) {
// test with both request and server query params with single stream
DebugServlet.clear();
req = new UpdateRequest();
req.add(new SolrInputDocument());
- client.setQueryParams(setOf("serverOnly", "both"));
- req.setQueryParams(setOf("requestOnly", "both"));
+ req.setQueryParams(Set.of("requestOnly", "both"));
setReqParamsOf(req, "serverOnly", "requestOnly", "both", "neither");
try {
client.request(req);
@@ -711,7 +716,7 @@ public class Http2SolrClientTest extends SolrJettyTestBase {
// NOTE: single stream requests send all the params
// as part of the query string. So add "neither" to the request
// so it passes the verification step.
- req.setQueryParams(setOf("requestOnly", "both", "neither"));
+ req.setQueryParams(Set.of("requestOnly", "both", "neither"));
verifyServletState(client, req);
}
}
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 fa275250056..8e1018a66b6 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,7 +16,6 @@
*/
package org.apache.solr.client.solrj.impl;
-import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import org.apache.solr.SolrTestCase;
@@ -26,39 +25,43 @@ import org.junit.Test;
public class LBHttp2SolrClientTest extends SolrTestCase {
/**
- * Test method for {@link LBHttp2SolrClient#setQueryParams(Set)} and {@link
- * LBHttp2SolrClient#addQueryParams(String)}.
+ * Test method for {@link LBHttp2SolrClient.Builder} that validates that the
query param keys
+ * passed in by the base <code>Http2SolrClient
+ * </code> instance are used by the LBHttp2SolrClient.
*
- * <p>Validate that the query params passed in are used in the base
<code>Http2SolrClient</code>
- * instance.
+ * <p>TODO: Eliminate the addQueryParams aspect of test as it is not
compatible with goal of
+ * immutable SolrClient
*/
@Test
- public void testLBHttp2SolrClientSetQueryParams() throws IOException {
+ public void testLBHttp2SolrClientSetQueryParams() {
String url = "http://127.0.0.1:8080";
- try (Http2SolrClient http2Client = new
Http2SolrClient.Builder(url).build();
- LBHttp2SolrClient testClient = new
LBHttp2SolrClient.Builder(http2Client, url).build()) {
- Set<String> queryParams = new HashSet<>(2);
- queryParams.add("param1=this");
- testClient.setQueryParams(new HashSet<>(queryParams));
+ Set<String> urlParamNames = new HashSet<>(2);
+ urlParamNames.add("param1");
+
+ try (Http2SolrClient http2SolrClient =
+ new
Http2SolrClient.Builder(url).withTheseParamNamesInTheUrl(urlParamNames).build();
+ LBHttp2SolrClient testClient =
+ new LBHttp2SolrClient.Builder(http2SolrClient, url).build()) {
+
assertArrayEquals(
- "Wrong queryParams found in lb client.",
- queryParams.toArray(),
- testClient.getQueryParams().toArray());
+ "Wrong urlParamNames found in lb client.",
+ urlParamNames.toArray(),
+ testClient.getUrlParamNames().toArray());
assertArrayEquals(
- "Wrong queryParams found in base client.",
- queryParams.toArray(),
- http2Client.getQueryParams().toArray());
+ "Wrong urlParamNames found in base client.",
+ urlParamNames.toArray(),
+ http2SolrClient.getUrlParamNames().toArray());
- testClient.addQueryParams("param2=that");
- queryParams.add("param2=that");
+ testClient.addQueryParams("param2");
+ urlParamNames.add("param2");
assertArrayEquals(
- "Wrong queryParams found in lb client.",
- queryParams.toArray(),
- testClient.getQueryParams().toArray());
+ "Wrong urlParamNames found in lb client.",
+ urlParamNames.toArray(),
+ testClient.getUrlParamNames().toArray());
assertArrayEquals(
- "Wrong queryParams found in base client.",
- queryParams.toArray(),
- http2Client.getQueryParams().toArray());
+ "Wrong urlParamNames found in base client.",
+ urlParamNames.toArray(),
+ http2SolrClient.getUrlParamNames().toArray());
}
}
}