You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by da...@apache.org on 2018/11/20 15:54:36 UTC

lucene-solr:jira/http2: Cleanup

Repository: lucene-solr
Updated Branches:
  refs/heads/jira/http2 dbd1005ac -> 22b10a56b


Cleanup


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/22b10a56
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/22b10a56
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/22b10a56

Branch: refs/heads/jira/http2
Commit: 22b10a56b759f7cbdb5cd3f4fc63039c468451a3
Parents: dbd1005
Author: Cao Manh Dat <da...@apache.org>
Authored: Tue Nov 20 15:54:29 2018 +0000
Committer: Cao Manh Dat <da...@apache.org>
Committed: Tue Nov 20 15:54:29 2018 +0000

----------------------------------------------------------------------
 .../apache/solr/update/SolrCmdDistributor.java  |  19 +--
 .../solr/update/StreamingSolrClients.java       |   2 +-
 .../processor/DistributedUpdateProcessor.java   |  22 ++--
 .../processor/TolerantUpdateProcessor.java      |  14 +--
 .../solr/client/solrj/impl/CloudSolrClient.java |   2 +-
 .../impl/ConcurrentUpdateHttp2SolrClient.java   | 115 +++++--------------
 .../solrj/impl/ConcurrentUpdateSolrClient.java  |   2 +-
 .../solr/client/solrj/impl/HttpSolrClient.java  |   2 +-
 .../client/solrj/impl/LBHttpSolrClient.java     |   2 +-
 .../client/solrj/impl/SolrClientBuilder.java    |   8 +-
 10 files changed, 64 insertions(+), 124 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/22b10a56/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
----------------------------------------------------------------------
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 5ab4c84..207a0ed 100644
--- a/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
+++ b/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
@@ -50,8 +50,6 @@ import org.apache.solr.core.Diagnostics;
 import org.apache.solr.update.processor.DistributedUpdateProcessor;
 import org.apache.solr.update.processor.DistributedUpdateProcessor.LeaderRequestReplicationTracker;
 import org.apache.solr.update.processor.DistributedUpdateProcessor.RollupRequestReplicationTracker;
-import org.eclipse.jetty.client.api.Response;
-import org.eclipse.jetty.io.EofException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -240,11 +238,10 @@ public class SolrCmdDistributor implements Closeable {
   }
 
   public void distribCommit(CommitUpdateCommand cmd, List<Node> nodes,
-                            ModifiableSolrParams params) throws IOException {
+      ModifiableSolrParams params) throws IOException {
 
     // we need to do any retries before commit...
     blockAndDoRetries();
-
     log.debug("Distrib commit to: {} params: {}", nodes, params);
 
     for (Node node : nodes) {
@@ -325,7 +322,7 @@ public class SolrCmdDistributor implements Closeable {
   private void doRequest(final Req req) {
     try {
       SolrClient solrClient = clients.getSolrClient(req);
-      NamedList rs = solrClient.request(req.uReq);
+      solrClient.request(req.uReq);
     } catch (Exception e) {
       SolrException.log(log, e);
       Error error = new Error();
@@ -420,11 +417,9 @@ public class SolrCmdDistributor implements Closeable {
         } catch (Exception e) {
           log.warn("Failed to parse response from {} during replication factor accounting", node, e);
         } finally {
-          if (inputStream != null) {
-            try {
-              inputStream.close();
-            } catch (Exception ignore) {
-            }
+          try {
+            inputStream.close();
+          } catch (Exception ignore) {
           }
         }
       }
@@ -538,9 +533,7 @@ public class SolrCmdDistributor implements Closeable {
      *         false otherwise
      */
     private boolean isRetriableException(Throwable t) {
-      return t instanceof SocketException
-          || t instanceof NoHttpResponseException
-          || t instanceof SocketTimeoutException;
+      return t instanceof SocketException || t instanceof NoHttpResponseException || t instanceof SocketTimeoutException;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/22b10a56/solr/core/src/java/org/apache/solr/update/StreamingSolrClients.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/update/StreamingSolrClients.java b/solr/core/src/java/org/apache/solr/update/StreamingSolrClients.java
index ef91064..f46c744 100644
--- a/solr/core/src/java/org/apache/solr/update/StreamingSolrClients.java
+++ b/solr/core/src/java/org/apache/solr/update/StreamingSolrClients.java
@@ -73,7 +73,7 @@ public class StreamingSolrClients {
       // on a greater scale since the current behavior is to only increase the number of connections/Runners when
       // the queue is more than half full.
       client = new ErrorReportingConcurrentUpdateSolrClient.Builder(url, req, errors)
-          .withHttpClient(httpClient)
+          .withHttp2SolrClient(httpClient)
           .withQueueSize(100)
           .withThreadCount(runnerCount)
           .withExecutorService(updateExecutor)

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/22b10a56/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
----------------------------------------------------------------------
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 5c8b029..1b92a02 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
@@ -140,8 +140,8 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
         return valueOf(param);
       } catch (IllegalArgumentException e) {
         throw new SolrException
-            (SolrException.ErrorCode.BAD_REQUEST, "Illegal value for " +
-                DISTRIB_UPDATE_PARAM + ": " + param, e);
+          (SolrException.ErrorCode.BAD_REQUEST, "Illegal value for " +
+           DISTRIB_UPDATE_PARAM + ": " + param, e);
       }
     }
   }
@@ -215,7 +215,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
    * @lucene.experimental
    */
   public DistributedUpdateProcessor(SolrQueryRequest req,
-                                    SolrQueryResponse rsp, AtomicUpdateDocumentMerger docMerger, UpdateRequestProcessor next) {
+      SolrQueryResponse rsp, AtomicUpdateDocumentMerger docMerger, UpdateRequestProcessor next) {
     super(next);
     this.rsp = rsp;
     this.next = next;
@@ -235,7 +235,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
 
     // this should always be used - see filterParams
     DistributedUpdateProcessorFactory.addParamToDistributedRequestWhitelist
-        (this.req, UpdateParams.UPDATE_CHAIN, TEST_DISTRIB_SKIP_SERVERS, CommonParams.VERSION_FIELD);
+      (this.req, UpdateParams.UPDATE_CHAIN, TEST_DISTRIB_SKIP_SERVERS, CommonParams.VERSION_FIELD);
 
     CoreContainer cc = req.getCore().getCoreContainer();
 
@@ -446,7 +446,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
         boolean isSubset = aslice.getRange() != null && aslice.getRange().isSubsetOf(myRange);
         if (isSubset &&
             (docId == null // in case of deletes
-                || coll.getRouter().isTargetSlice(docId, doc, req.getParams(), aslice.getName(), coll))) {
+            || coll.getRouter().isTargetSlice(docId, doc, req.getParams(), aslice.getName(), coll))) {
           Replica sliceLeader = aslice.getLeader();
           // slice leader can be null because node/shard is created zk before leader election
           if (sliceLeader != null && zkController.getClusterState().liveNodesContain(sliceLeader.getNodeName()))  {
@@ -837,7 +837,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
         Exception getLeaderExc = null;
         Replica leaderProps = null;
         try {
-          leaderProps = zkController.getZkStateReader().getLeader(collection, shardId);
+            leaderProps = zkController.getZkStateReader().getLeader(collection, shardId);
           if (leaderProps != null) {
             leaderCoreNodeName = leaderProps.getName();
           }
@@ -970,8 +970,8 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
     if (vinfo == null) {
       if (AtomicUpdateDocumentMerger.isAtomicUpdate(cmd)) {
         throw new SolrException
-            (SolrException.ErrorCode.BAD_REQUEST,
-                "Atomic document updates are not supported unless <updateLog/> is configured");
+          (SolrException.ErrorCode.BAD_REQUEST,
+           "Atomic document updates are not supported unless <updateLog/> is configured");
       } else {
         super.processAdd(cmd);
         return false;
@@ -1190,7 +1190,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
    * @return -1 if the current in-place should be dropped, or last found version if previous update has been indexed.
    */
   private long waitForDependentUpdates(AddUpdateCommand cmd, long versionOnUpdate,
-                                       boolean isReplayOrPeersync, VersionBucket bucket) throws IOException {
+                               boolean isReplayOrPeersync, VersionBucket bucket) throws IOException {
     long lastFoundVersion = 0;
     TimeOut waitTimeout = new TimeOut(5, TimeUnit.SECONDS, TimeSource.NANO_TIME);
 
@@ -1491,7 +1491,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
     DistribPhase phase = DistribPhase.parseParam(req.getParams().get(DISTRIB_UPDATE_PARAM));
 
     DocCollection coll = zkEnabled
-        ? zkController.getClusterState().getCollection(collection) : null;
+      ? zkController.getClusterState().getCollection(collection) : null;
 
     if (zkEnabled && DistribPhase.NONE == phase) {
       if (rollupReplicationTracker == null) {
@@ -1988,7 +1988,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
    */
   public static boolean getNonZkLeaderAssumption(SolrQueryRequest req) {
     DistribPhase phase =
-        DistribPhase.parseParam(req.getParams().get(DISTRIB_UPDATE_PARAM));
+      DistribPhase.parseParam(req.getParams().get(DISTRIB_UPDATE_PARAM));
 
     // if we have been told we are coming from a leader, then we are
     // definitely not the leader.  Otherwise assume we are.

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/22b10a56/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java
index e8827c3..24f0335 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessor.java
@@ -152,9 +152,9 @@ public class TolerantUpdateProcessor extends UpdateRequestProcessor {
     } catch (Throwable t) {
       firstErrTracker.caught(t);
       knownErrors.add(new ToleratedUpdateError
-          (CmdType.ADD,
-              getPrintableId(id),
-              t.getMessage()));
+                      (CmdType.ADD,
+                       getPrintableId(id),
+                       t.getMessage()));
 
       if (knownErrors.size() > maxErrors) {
         firstErrTracker.throwFirst();
@@ -173,8 +173,8 @@ public class TolerantUpdateProcessor extends UpdateRequestProcessor {
       firstErrTracker.caught(t);
 
       ToleratedUpdateError err = new ToleratedUpdateError(cmd.isDeleteById() ? CmdType.DELID : CmdType.DELQ,
-          cmd.isDeleteById() ? cmd.id : cmd.query,
-          t.getMessage());
+                                                          cmd.isDeleteById() ? cmd.id : cmd.query,
+                                                          t.getMessage());
       knownErrors.add(err);
 
       // NOTE: we're not using this to dedup before adding to knownErrors.
@@ -261,8 +261,8 @@ public class TolerantUpdateProcessor extends UpdateRequestProcessor {
 
         for (int i = 0; i < remoteErrMetadata.size(); i++) {
           ToleratedUpdateError err =
-              ToleratedUpdateError.parseMetadataIfToleratedUpdateError(remoteErrMetadata.getName(i),
-                  remoteErrMetadata.getVal(i));
+            ToleratedUpdateError.parseMetadataIfToleratedUpdateError(remoteErrMetadata.getName(i),
+                                                                     remoteErrMetadata.getVal(i));
           if (null == err) {
             // some metadata unrelated to this update processor
             continue;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/22b10a56/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 90a52ec..193555a 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
@@ -1349,7 +1349,7 @@ public class CloudSolrClient extends SolrClient {
   /**
    * Constructs {@link CloudSolrClient} instances from provided configuration.
    */
-  public static class Builder extends SolrClientBuilder<HttpClient, Builder> {
+  public static class Builder extends SolrClientBuilder<Builder> {
     protected Collection<String> zkHosts = new ArrayList<>();
     protected List<String> solrUrls = new ArrayList<>();
     protected String zkChroot;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/22b10a56/solr/solrj/src/java/org/apache/solr/client/solrj/impl/ConcurrentUpdateHttp2SolrClient.java
----------------------------------------------------------------------
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 c27eba3..58abd0a 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
@@ -22,18 +22,16 @@ import java.io.InputStream;
 import java.lang.invoke.MethodHandles;
 import java.util.LinkedList;
 import java.util.Queue;
-import java.util.Set;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.solr.client.solrj.ResponseParser;
 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.request.RequestWriter;
+import org.apache.solr.client.solrj.impl.ConcurrentUpdateSolrClient.Update;
 import org.apache.solr.client.solrj.request.UpdateRequest;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.SolrParams;
@@ -48,25 +46,30 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.MDC;
 
+/**
+ * @lucene.experimental
+ */
 public class ConcurrentUpdateHttp2SolrClient extends SolrClient {
   private static final long serialVersionUID = 1L;
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   private static final Update END_UPDATE = new Update(null, null);
+
   private Http2SolrClient client;
   private final String basePath;
-  final BlockingQueue<Update> queue;
-  final ExecutorService scheduler;
-  final Queue<Runner> runners;
-  volatile CountDownLatch lock = null; // used to block everything
-  final int threadCount;
-  boolean shutdownExecutor = false;
-  int pollQueueTime = 250;
+  private final BlockingQueue<Update> queue;
+  private final ExecutorService scheduler;
+  private final Queue<Runner> runners;
+  private final int threadCount;
+
+  private boolean shutdownExecutor;
+  private int pollQueueTime = 250;
   private final boolean streamDeletes;
   private volatile boolean closed;
+  private volatile CountDownLatch lock = null; // used to block everything
 
 
   protected ConcurrentUpdateHttp2SolrClient(Builder builder) {
-    this.client = builder.httpClient;
+    this.client = builder.client;
     this.queue = new LinkedBlockingQueue<>(builder.queueSize);
     this.threadCount = builder.threadCount;
     this.runners = new LinkedList<>();
@@ -83,20 +86,6 @@ public class ConcurrentUpdateHttp2SolrClient extends SolrClient {
 
   }
 
-
-  public Set<String> getQueryParams() {
-    return this.client.getQueryParams();
-  }
-
-  /**
-   * Expert Method.
-   * @param queryParams set of param keys to only send via the query string
-   */
-  public void setQueryParams(Set<String> queryParams) {
-    this.client.setQueryParams(queryParams);
-  }
-
-
   /**
    * Opens a connection and sends everything...
    */
@@ -251,7 +240,7 @@ public class ConcurrentUpdateHttp2SolrClient extends SolrClient {
 
   // *must* be called with runners monitor held, e.g. synchronized(runners){ addRunner() }
   private void addRunner() {
-    MDC.put("ConcurrentUpdateSolrClient.url", client.getBaseURL());
+    MDC.put("ConcurrentUpdateHttp2SolrClient.url", client.getBaseURL());
     try {
       Runner r = new Runner();
       runners.add(r);
@@ -262,42 +251,7 @@ public class ConcurrentUpdateHttp2SolrClient extends SolrClient {
         throw e;
       }
     } finally {
-      MDC.remove("ConcurrentUpdateSolrClient.url");
-    }
-  }
-
-  /**
-   * Class representing an UpdateRequest and an optional collection.
-   */
-  static class Update {
-    UpdateRequest request;
-    String collection;
-    /**
-     *
-     * @param request the update request.
-     * @param collection The collection, can be null.
-     */
-    public Update(UpdateRequest request, String collection) {
-      this.request = request;
-      this.collection = collection;
-    }
-    /**
-     * @return the update request.
-     */
-    public UpdateRequest getRequest() {
-      return request;
-    }
-    public void setRequest(UpdateRequest request) {
-      this.request = request;
-    }
-    /**
-     * @return the collection, can be null.
-     */
-    public String getCollection() {
-      return collection;
-    }
-    public void setCollection(String collection) {
-      this.collection = collection;
+      MDC.remove("ConcurrentUpdateHttp2SolrClient.url");
     }
   }
 
@@ -553,11 +507,6 @@ public class ConcurrentUpdateHttp2SolrClient extends SolrClient {
     }
   }
 
-  public void setParser(ResponseParser responseParser) {
-    client.setParser(responseParser);
-  }
-
-
   /**
    * @param pollQueueTime time for an open connection to wait for updates when
    * the queue is empty.
@@ -566,14 +515,11 @@ public class ConcurrentUpdateHttp2SolrClient extends SolrClient {
     this.pollQueueTime = pollQueueTime;
   }
 
-  public void setRequestWriter(RequestWriter requestWriter) {
-    client.setRequestWriter(requestWriter);
-  }
-
   /**
-   * Constructs {@link ConcurrentUpdateSolrClient} instances from provided configuration.
+   * Constructs {@link ConcurrentUpdateHttp2SolrClient} instances from provided configuration.
    */
-  public static class Builder extends SolrClientBuilder<Http2SolrClient, Builder> {
+  public static class Builder {
+    protected Http2SolrClient client;
     protected String baseSolrUrl;
     protected int queueSize = 10;
     protected int threadCount;
@@ -587,7 +533,7 @@ public class ConcurrentUpdateHttp2SolrClient extends SolrClient {
      *
      * 1) A path pointing directly at a particular core
      * <pre>
-     *   SolrClient client = new ConcurrentUpdateSolrClient.Builder("http://my-solr-server:8983/solr/core1").build();
+     *   SolrClient client = new ConcurrentUpdateHttp2SolrClient.Builder("http://my-solr-server:8983/solr/core1").build();
      *   QueryResponse resp = client.query(new SolrQuery("*:*"));
      * </pre>
      * Note that when a core is provided in the base URL, queries and other requests can be made without mentioning the
@@ -595,7 +541,7 @@ public class ConcurrentUpdateHttp2SolrClient extends SolrClient {
      *
      * 2) The path of the root Solr path ("/solr")
      * <pre>
-     *   SolrClient client = new ConcurrentUpdateSolrClient.Builder("http://my-solr-server:8983/solr").build();
+     *   SolrClient client = new ConcurrentUpdateHttp2SolrClient.Builder("http://my-solr-server:8983/solr").build();
      *   QueryResponse resp = client.query("core1", new SolrQuery("*:*"));
      * </pre>
      * In this case the client is more flexible and can be used to send requests to any cores.  This flexibility though
@@ -605,12 +551,17 @@ public class ConcurrentUpdateHttp2SolrClient extends SolrClient {
       this.baseSolrUrl = baseSolrUrl;
     }
 
+    public Builder withHttp2SolrClient(Http2SolrClient solrClient) {
+      this.client = solrClient;
+      return this;
+    }
+
     /**
      * The maximum number of requests buffered by the SolrClient's internal queue before being processed by background threads.
      *
      * This value should be carefully paired with the number of queue-consumer threads.  A queue with a maximum size
      * set too high may require more memory.  A queue with a maximum size set too low may suffer decreased throughput
-     * as {@link ConcurrentUpdateSolrClient#request(SolrRequest)} calls block waiting to add requests to the queue.
+     * as {@link ConcurrentUpdateHttp2SolrClient#request(SolrRequest)} calls block waiting to add requests to the queue.
      *
      * If not set, this defaults to 10.
      *
@@ -625,13 +576,13 @@ public class ConcurrentUpdateHttp2SolrClient extends SolrClient {
     }
 
     /**
-     * The maximum number of threads used to empty {@link ConcurrentUpdateSolrClient}s queue.
+     * The maximum number of threads used to empty {@link ConcurrentUpdateHttp2SolrClient}s queue.
      *
      * Threads are created when documents are added to the client's internal queue and exit when no updates remain in
      * the queue.
      * <p>
      * This value should be carefully paired with the maximum queue capacity.  A client with too few threads may suffer
-     * decreased throughput as the queue fills up and {@link ConcurrentUpdateSolrClient#request(SolrRequest)} calls
+     * decreased throughput as the queue fills up and {@link ConcurrentUpdateHttp2SolrClient#request(SolrRequest)} calls
      * block waiting to add requests to the queue.
      */
     public Builder withThreadCount(int threadCount) {
@@ -664,7 +615,7 @@ public class ConcurrentUpdateHttp2SolrClient extends SolrClient {
     /**
      * Configures created clients to not stream delete requests.
      *
-     * With this option set when the created ConcurrentUpdateSolrClient sents a delete request it will first will lock
+     * With this option set when the created ConcurrentUpdateHttp2SolrClient sents a delete request it will first will lock
      * the queue and block until all queued updates have been sent, and then send the delete request.
      */
     public Builder neverStreamDeletes() {
@@ -673,7 +624,7 @@ public class ConcurrentUpdateHttp2SolrClient extends SolrClient {
     }
 
     /**
-     * Create a {@link ConcurrentUpdateSolrClient} based on the provided configuration options.
+     * Create a {@link ConcurrentUpdateHttp2SolrClient} based on the provided configuration options.
      */
     public ConcurrentUpdateHttp2SolrClient build() {
       if (baseSolrUrl == null) {
@@ -683,9 +634,5 @@ public class ConcurrentUpdateHttp2SolrClient extends SolrClient {
       return new ConcurrentUpdateHttp2SolrClient(this);
     }
 
-    @Override
-    public Builder getThis() {
-      return this;
-    }
   }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/22b10a56/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 e55da3e..e19d278 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
@@ -772,7 +772,7 @@ public class ConcurrentUpdateSolrClient extends SolrClient {
   /**
    * Constructs {@link ConcurrentUpdateSolrClient} instances from provided configuration.
    */
-  public static class Builder extends SolrClientBuilder<HttpClient, Builder> {
+  public static class Builder extends SolrClientBuilder<Builder> {
     protected String baseSolrUrl;
     protected int queueSize = 10;
     protected int threadCount;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/22b10a56/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 8b92131..ad845e8 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
@@ -844,7 +844,7 @@ s   * @deprecated since 7.0  Use {@link Builder} methods instead.
   /**
    * Constructs {@link HttpSolrClient} instances from provided configuration.
    */
-  public static class Builder extends SolrClientBuilder<HttpClient, Builder> {
+  public static class Builder extends SolrClientBuilder<Builder> {
     protected String baseSolrUrl;
     protected boolean compression;
     protected ModifiableSolrParams invariantParams = new ModifiableSolrParams();

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/22b10a56/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 b5482d6..e18d761 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
@@ -252,7 +252,7 @@ public class LBHttpSolrClient extends LBSolrClient {
   /**
    * Constructs {@link LBHttpSolrClient} instances from provided configuration.
    */
-  public static class Builder extends SolrClientBuilder<HttpClient, Builder> {
+  public static class Builder extends SolrClientBuilder<Builder> {
     protected final List<String> baseSolrUrls;
     protected HttpSolrClient.Builder httpSolrClientBuilder;
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/22b10a56/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
index b7b0d55..f9d24d9 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
@@ -20,20 +20,20 @@ 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<C, B extends SolrClientBuilder<C, B>> {
+public abstract class SolrClientBuilder<B extends SolrClientBuilder<B>> {
 
-  protected C httpClient;
+  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(C httpClient) {
+  public B withHttpClient(HttpClient httpClient) {
     this.httpClient = httpClient;
     return getThis();
   }