You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ab...@apache.org on 2017/07/07 13:42:49 UTC
[08/32] lucene-solr:jira/solr-10996: SOLR-11004: Consolidate
SolrClient builder code into an abstract base class to reduce duplication.
SOLR-11004: Consolidate SolrClient builder code into an abstract base class to reduce duplication.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/30e9b51a
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/30e9b51a
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/30e9b51a
Branch: refs/heads/jira/solr-10996
Commit: 30e9b51af71161d2e775ec438e0d14295537cf34
Parents: 6e36ad7
Author: Anshum Gupta <an...@apple.com>
Authored: Wed Jul 5 11:46:22 2017 -0700
Committer: Anshum Gupta <an...@apple.com>
Committed: Wed Jul 5 11:47:01 2017 -0700
----------------------------------------------------------------------
solr/CHANGES.txt | 3 +
.../solr/client/solrj/impl/CloudSolrClient.java | 43 ++----------
.../solrj/impl/ConcurrentUpdateSolrClient.java | 43 ++----------
.../solr/client/solrj/impl/HttpSolrClient.java | 51 ++------------
.../client/solrj/impl/LBHttpSolrClient.java | 52 ++------------
.../client/solrj/impl/SolrClientBuilder.java | 72 ++++++++++++++++++++
6 files changed, 99 insertions(+), 165 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30e9b51a/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 8d90b02..296f470 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -449,6 +449,9 @@ Other Changes
* SOLR-10456: Deprecate timeout related setters from SolrClients, and replace with Builder based implementation
(Jason Gerlowski, Anshum Gupta)
+* SOLR-11004: Consolidate SolrClient builder code in an abstract base class (Jason Gerlowski,
+ Anshum Gupta)
+
================== 6.7.0 ==================
Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30e9b51a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
index e660fd5..9948857 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
@@ -1367,18 +1367,15 @@ public class CloudSolrClient extends SolrClient {
/**
* Constructs {@link CloudSolrClient} instances from provided configuration.
*/
- public static class Builder {
+ public static class Builder extends SolrClientBuilder<Builder> {
protected Collection<String> zkHosts;
protected List<String> solrUrls;
- protected HttpClient httpClient;
protected String zkChroot;
protected LBHttpSolrClient loadBalancedSolrClient;
protected LBHttpSolrClient.Builder lbClientBuilder;
protected boolean shardLeadersOnly;
protected boolean directUpdatesToLeadersOnly;
protected ClusterStateProvider stateProvider;
- protected Integer connectionTimeoutMillis;
- protected Integer socketTimeoutMillis;
public Builder() {
@@ -1437,15 +1434,6 @@ public class CloudSolrClient extends SolrClient {
}
/**
- * Provides a {@link HttpClient} for the builder to use when creating clients.
- */
- public Builder withHttpClient(HttpClient httpClient) {
- this.httpClient = httpClient;
- return this;
- }
-
-
- /**
* Provide a series of ZooKeeper client endpoints for the builder to use when creating clients.
*
* Method may be called multiple times. All provided values will be used.
@@ -1516,30 +1504,6 @@ public class CloudSolrClient extends SolrClient {
}
/**
- * Tells {@link Builder} that created clients should obey the following timeout when connecting to Solr servers.
- */
- public Builder withConnectionTimeout(int connectionTimeoutMillis) {
- if (connectionTimeoutMillis <= 0) {
- throw new IllegalArgumentException("connectionTimeoutMillis must be a positive integer.");
- }
-
- this.connectionTimeoutMillis = connectionTimeoutMillis;
- return this;
- }
-
- /**
- * Tells {@link Builder} that created clients should set the following read timeout on all sockets.
- */
- public Builder withSocketTimeout(int socketTimeoutMillis) {
- if (socketTimeoutMillis <= 0) {
- throw new IllegalArgumentException("socketTimeoutMillis must be a positive integer.");
- }
-
- this.socketTimeoutMillis = socketTimeoutMillis;
- return this;
- }
-
- /**
* Create a {@link CloudSolrClient} based on the provided configuration.
*/
public CloudSolrClient build() {
@@ -1560,5 +1524,10 @@ public class CloudSolrClient extends SolrClient {
}
return new CloudSolrClient(this);
}
+
+ @Override
+ public Builder getThis() {
+ return this;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30e9b51a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateSolrClient.java
----------------------------------------------------------------------
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 2d9bfb1..f14d953 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
@@ -770,15 +770,12 @@ public class ConcurrentUpdateSolrClient extends SolrClient {
/**
* Constructs {@link ConcurrentUpdateSolrClient} instances from provided configuration.
*/
- public static class Builder {
+ public static class Builder extends SolrClientBuilder<Builder> {
protected String baseSolrUrl;
- protected HttpClient httpClient;
protected int queueSize;
protected int threadCount;
protected ExecutorService executorService;
protected boolean streamDeletes;
- protected Integer connectionTimeoutMillis;
- protected Integer socketTimeoutMillis;
/**
* Create a Builder object, based on the provided Solr URL.
@@ -804,14 +801,6 @@ public class ConcurrentUpdateSolrClient extends SolrClient {
public Builder(String baseSolrUrl) {
this.baseSolrUrl = baseSolrUrl;
}
-
- /**
- * Provides a {@link HttpClient} for the builder to use when creating clients.
- */
- public Builder withHttpClient(HttpClient httpClient) {
- this.httpClient = httpClient;
- return this;
- }
/**
* The number of documents to batch together before sending to Solr.
@@ -861,31 +850,6 @@ public class ConcurrentUpdateSolrClient extends SolrClient {
}
/**
- * Tells {@link Builder} that created clients should obey the following timeout when connecting to Solr servers.
- */
- public Builder withConnectionTimeout(int connectionTimeoutMillis) {
- if (connectionTimeoutMillis <= 0) {
- throw new IllegalArgumentException("connectionTimeoutMillis must be a positive integer.");
- }
-
- this.connectionTimeoutMillis = connectionTimeoutMillis;
- return this;
- }
-
- /**
- * Tells {@link Builder} that created clients should set the following read timeout on all sockets.
- */
- public Builder withSocketTimeout(int socketTimeoutMillis) {
- if (socketTimeoutMillis <= 0) {
- throw new IllegalArgumentException("socketTimeoutMillis must be a positive integer.");
- }
-
- this.socketTimeoutMillis = socketTimeoutMillis;
- return this;
- }
-
-
- /**
* Create a {@link ConcurrentUpdateSolrClient} based on the provided configuration options.
*/
public ConcurrentUpdateSolrClient build() {
@@ -895,5 +859,10 @@ public class ConcurrentUpdateSolrClient extends SolrClient {
return new ConcurrentUpdateSolrClient(this);
}
+
+ @Override
+ public Builder getThis() {
+ return this;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30e9b51a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/HttpSolrClient.java
----------------------------------------------------------------------
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 1b0354f..7566ba0 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
@@ -827,14 +827,10 @@ s * @deprecated since 7.0 Use {@link Builder} methods instead.
/**
* Constructs {@link HttpSolrClient} instances from provided configuration.
*/
- public static class Builder {
+ public static class Builder extends SolrClientBuilder<Builder> {
protected String baseSolrUrl;
- protected HttpClient httpClient;
- protected ResponseParser responseParser;
protected boolean compression;
protected ModifiableSolrParams invariantParams = new ModifiableSolrParams();
- protected Integer connectionTimeoutMillis;
- protected Integer socketTimeoutMillis;
public Builder() {
this.responseParser = new BinaryResponseParser();
@@ -895,22 +891,6 @@ s * @deprecated since 7.0 Use {@link Builder} methods instead.
}
/**
- * Provides a {@link HttpClient} for the builder to use when creating clients.
- */
- public Builder withHttpClient(HttpClient httpClient) {
- this.httpClient = httpClient;
- return this;
- }
-
- /**
- * Provides a {@link ResponseParser} for created clients to use when handling requests.
- */
- public Builder withResponseParser(ResponseParser responseParser) {
- this.responseParser = responseParser;
- return this;
- }
-
- /**
* Chooses whether created {@link HttpSolrClient}s use compression by default.
*/
public Builder allowCompression(boolean compression) {
@@ -941,30 +921,6 @@ s * @deprecated since 7.0 Use {@link Builder} methods instead.
this.invariantParams.add(params);
return this;
}
-
- /**
- * Tells {@link Builder} that created clients should obey the following timeout when connecting to Solr servers.
- */
- public Builder withConnectionTimeout(int connectionTimeoutMillis) {
- if (connectionTimeoutMillis <= 0) {
- throw new IllegalArgumentException("connectionTimeoutMillis must be a positive integer.");
- }
-
- this.connectionTimeoutMillis = connectionTimeoutMillis;
- return this;
- }
-
- /**
- * Tells {@link Builder} that created clients should set the following read timeout on all sockets.
- */
- public Builder withSocketTimeout(int socketTimeoutMillis) {
- if (socketTimeoutMillis <= 0) {
- throw new IllegalArgumentException("socketTimeoutMillis must be a positive integer.");
- }
-
- this.socketTimeoutMillis = socketTimeoutMillis;
- return this;
- }
/**
* Create a {@link HttpSolrClient} based on provided configuration.
@@ -980,5 +936,10 @@ s * @deprecated since 7.0 Use {@link Builder} methods instead.
return new DelegationTokenHttpSolrClient(this);
}
}
+
+ @Override
+ public Builder getThis() {
+ return this;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30e9b51a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/LBHttpSolrClient.java
----------------------------------------------------------------------
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 2dfd4b4..6c2737d 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
@@ -881,13 +881,9 @@ public class LBHttpSolrClient extends SolrClient {
/**
* Constructs {@link LBHttpSolrClient} instances from provided configuration.
*/
- public static class Builder {
+ public static class Builder extends SolrClientBuilder<Builder> {
protected final List<String> baseSolrUrls;
- protected HttpClient httpClient;
- protected ResponseParser responseParser;
protected HttpSolrClient.Builder httpSolrClientBuilder;
- protected Integer connectionTimeoutMillis;
- protected Integer socketTimeoutMillis;
public Builder() {
this.baseSolrUrls = new ArrayList<>();
@@ -955,23 +951,6 @@ public class LBHttpSolrClient extends SolrClient {
}
return this;
}
-
-
- /**
- * Provides a {@link HttpClient} for the builder to use when creating clients.
- */
- public Builder withHttpClient(HttpClient httpClient) {
- this.httpClient = httpClient;
- return this;
- }
-
- /**
- * Provides a {@link ResponseParser} for created clients to use when handling requests.
- */
- public Builder withResponseParser(ResponseParser responseParser) {
- this.responseParser = responseParser;
- return this;
- }
/**
* Provides a {@link HttpSolrClient.Builder} to be used for building the internally used clients.
@@ -980,30 +959,6 @@ public class LBHttpSolrClient extends SolrClient {
this.httpSolrClientBuilder = builder;
return this;
}
-
- /**
- * Tells {@link Builder} that created clients should obey the following timeout when connecting to Solr servers.
- */
- public Builder withConnectionTimeout(int connectionTimeoutMillis) {
- if (connectionTimeoutMillis <= 0) {
- throw new IllegalArgumentException("connectionTimeoutMillis must be a positive integer.");
- }
-
- this.connectionTimeoutMillis = connectionTimeoutMillis;
- return this;
- }
-
- /**
- * Tells {@link Builder} that created clients should set the following read timeout on all sockets.
- */
- public Builder withSocketTimeout(int socketTimeoutMillis) {
- if (socketTimeoutMillis <= 0) {
- throw new IllegalArgumentException("socketTimeoutMillis must be a positive integer.");
- }
-
- this.socketTimeoutMillis = socketTimeoutMillis;
- return this;
- }
/**
* Create a {@link HttpSolrClient} based on provided configuration.
@@ -1011,5 +966,10 @@ public class LBHttpSolrClient extends SolrClient {
public LBHttpSolrClient build() {
return new LBHttpSolrClient(this);
}
+
+ @Override
+ public Builder getThis() {
+ return this;
+ }
}
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30e9b51a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientBuilder.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..ec149bd
--- /dev/null
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/SolrClientBuilder.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.solr.client.solrj.impl;
+
+import org.apache.http.client.HttpClient;
+import org.apache.solr.client.solrj.ResponseParser;
+import org.apache.solr.client.solrj.impl.HttpSolrClient.Builder;
+
+public abstract class SolrClientBuilder<B extends SolrClientBuilder<B>> {
+
+ protected HttpClient httpClient;
+ protected ResponseParser responseParser;
+ protected Integer connectionTimeoutMillis;
+ protected Integer socketTimeoutMillis;
+
+ /** The solution for the unchecked cast warning. */
+ public abstract B getThis();
+
+ /**
+ * Provides a {@link HttpClient} for the builder to use when creating clients.
+ */
+ public B withHttpClient(HttpClient httpClient) {
+ this.httpClient = httpClient;
+ return getThis();
+ }
+
+ /**
+ * Provides a {@link ResponseParser} for created clients to use when handling requests.
+ */
+ public B withResponseParser(ResponseParser responseParser) {
+ this.responseParser = responseParser;
+ return getThis();
+ }
+
+ /**
+ * Tells {@link Builder} that created clients should obey the following timeout when connecting to Solr servers.
+ */
+ public B withConnectionTimeout(int connectionTimeoutMillis) {
+ if (connectionTimeoutMillis <= 0) {
+ throw new IllegalArgumentException("connectionTimeoutMillis must be a positive integer.");
+ }
+
+ this.connectionTimeoutMillis = connectionTimeoutMillis;
+ return getThis();
+ }
+
+ /**
+ * Tells {@link Builder} that created clients should set the following read timeout on all sockets.
+ */
+ public B withSocketTimeout(int socketTimeoutMillis) {
+ if (socketTimeoutMillis <= 0) {
+ throw new IllegalArgumentException("socketTimeoutMillis must be a positive integer.");
+ }
+
+ this.socketTimeoutMillis = socketTimeoutMillis;
+ return getThis();
+ }
+}