You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2020/08/22 18:42:25 UTC

[lucene-solr] 06/22: @586 Apache HttpClient almost knocked out.

This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch reference_impl
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit ebbcf132e4185960f3fb99d0121aab56e91f07df
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Thu Aug 20 13:19:45 2020 -0500

    @586 Apache HttpClient almost knocked out.
---
 .../OverseerCollectionMessageHandler.java          |  9 +++---
 .../api/collections/ReindexCollectionCmd.java      | 19 +++++++------
 .../java/org/apache/solr/core/BlobRepository.java  | 11 ++++----
 .../java/org/apache/solr/core/CoreContainer.java   |  5 ++--
 .../apache/solr/filestore/DistribPackageStore.java |  3 +-
 .../org/apache/solr/handler/SolrConfigHandler.java | 12 ++++----
 .../handler/admin/AutoscalingHistoryHandler.java   |  6 ++--
 .../handler/component/HttpShardHandlerFactory.java |  5 ----
 .../handler/component/ShardHandlerFactory.java     |  1 -
 .../src/java/org/apache/solr/pkg/PackageAPI.java   | 33 ++++++++++++++++------
 .../org/apache/solr/update/PeerSyncWithLeader.java | 10 ++++---
 .../solr/client/solrj/impl/Http2SolrClient.java    |  1 +
 12 files changed, 67 insertions(+), 48 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java
index e2abb17..4e5626c 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java
@@ -26,6 +26,7 @@ import org.apache.solr.client.solrj.cloud.SolrCloudManager;
 import org.apache.solr.client.solrj.cloud.autoscaling.AlreadyExistsException;
 import org.apache.solr.client.solrj.cloud.autoscaling.BadVersionException;
 import org.apache.solr.client.solrj.impl.BaseHttpSolrClient;
+import org.apache.solr.client.solrj.impl.Http2SolrClient;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
 import org.apache.solr.client.solrj.request.AbstractUpdateRequest;
 import org.apache.solr.client.solrj.request.UpdateRequest;
@@ -543,7 +544,7 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler,
     // and we force open a searcher so that we have documents to show upon switching states
     UpdateResponse updateResponse = null;
     try {
-      updateResponse = softCommit(coreUrl, overseer.getCoreContainer().getUpdateShardHandler().getDefaultHttpClient());
+      updateResponse = softCommit(coreUrl, overseer.getCoreContainer().getUpdateShardHandler().getUpdateOnlyHttpClient());
       processResponse(results, null, coreUrl, updateResponse, slice, Collections.emptySet());
     } catch (Exception e) {
       ParWork.propegateInterrupt(e);
@@ -553,11 +554,9 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler,
   }
 
 
-  static UpdateResponse softCommit(String url, HttpClient httpClient) throws SolrServerException, IOException {
+  static UpdateResponse softCommit(String url, Http2SolrClient httpClient) throws SolrServerException, IOException {
 
-    try (HttpSolrClient client = new HttpSolrClient.Builder(url)
-        .withConnectionTimeout(Integer.getInteger("solr.connect_timeout.default", 15000))
-        .withSocketTimeout(Integer.getInteger("solr.so_commit_timeout.default", 30000))
+    try (Http2SolrClient client = new Http2SolrClient.Builder(url)
         .withHttpClient(httpClient)
         .markInternalRequest()
         .build()) {
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
index 4f12a64..1fe78cb 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
@@ -38,6 +38,7 @@ import org.apache.solr.client.solrj.cloud.DistribStateManager;
 import org.apache.solr.client.solrj.cloud.autoscaling.Policy;
 import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
+import org.apache.solr.client.solrj.impl.Http2SolrClient;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
 import org.apache.solr.client.solrj.request.CollectionAdminRequest;
 import org.apache.solr.client.solrj.request.QueryRequest;
@@ -636,10 +637,11 @@ public class ReindexCollectionCmd implements OverseerCollectionMessageHandler.Cm
   // XXX SolrCore where the daemon is running
   @SuppressWarnings({"unchecked"})
   private void waitForDaemon(String daemonName, String daemonUrl, String sourceCollection, String targetCollection, Map<String, Object> reindexingState) throws Exception {
-    HttpClient client = ocmh.overseer.getCoreContainer().getUpdateShardHandler().getDefaultHttpClient();
-    try (HttpSolrClient solrClient = new HttpSolrClient.Builder()
-        .withHttpClient(client)
-        .withBaseSolrUrl(daemonUrl).markInternalRequest().build()) {
+    Http2SolrClient client = ocmh.overseer.getCoreContainer()
+        .getUpdateShardHandler().getUpdateOnlyHttpClient();
+    try (Http2SolrClient solrClient = new Http2SolrClient.Builder()
+        .withHttpClient(client).markInternalRequest().build()) {
+      solrClient.setBaseUrl(daemonUrl);
       ModifiableSolrParams q = new ModifiableSolrParams();
       q.set(CommonParams.QT, "/stream");
       q.set("action", "list");
@@ -690,11 +692,12 @@ public class ReindexCollectionCmd implements OverseerCollectionMessageHandler.Cm
   @SuppressWarnings({"unchecked"})
   private void killDaemon(String daemonName, String daemonUrl) throws Exception {
     log.debug("-- killing daemon {} at {}", daemonName, daemonUrl);
-    HttpClient client = ocmh.overseer.getCoreContainer().getUpdateShardHandler().getDefaultHttpClient();
-    try (HttpSolrClient solrClient = new HttpSolrClient.Builder()
+    Http2SolrClient client = ocmh.overseer.getCoreContainer()
+        .getUpdateShardHandler().getUpdateOnlyHttpClient();
+    try (Http2SolrClient solrClient = new Http2SolrClient.Builder()
         .withHttpClient(client)
-        .markInternalRequest()
-        .withBaseSolrUrl(daemonUrl).build()) {
+        .markInternalRequest().build()) {
+      client.setBaseUrl(daemonUrl);
       ModifiableSolrParams q = new ModifiableSolrParams();
       q.set(CommonParams.QT, "/stream");
       // we should really use 'kill' here, but then we will never
diff --git a/solr/core/src/java/org/apache/solr/core/BlobRepository.java b/solr/core/src/java/org/apache/solr/core/BlobRepository.java
index 6a26373..8333a47 100644
--- a/solr/core/src/java/org/apache/solr/core/BlobRepository.java
+++ b/solr/core/src/java/org/apache/solr/core/BlobRepository.java
@@ -38,6 +38,7 @@ import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpGet;
+import org.apache.solr.client.solrj.impl.Http2SolrClient;
 import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.ClusterState;
@@ -212,22 +213,20 @@ public class BlobRepository {
   }
 
   ByteBuffer fetchFromUrl(String key, String url) {
-    HttpClient httpClient = coreContainer.getUpdateShardHandler().getDefaultHttpClient();
+    Http2SolrClient httpClient = coreContainer
+        .getUpdateShardHandler().getUpdateOnlyHttpClient();
     HttpGet httpGet = new HttpGet(url);
     ByteBuffer b;
     HttpResponse response = null;
     HttpEntity entity = null;
     try {
-      response = httpClient.execute(httpGet);
+
+      b = ByteBuffer.wrap(Http2SolrClient.GET(url, httpClient).bytes);
       entity = response.getEntity();
       int statusCode = response.getStatusLine().getStatusCode();
       if (statusCode != 200) {
         throw new SolrException(SolrException.ErrorCode.NOT_FOUND, "no such blob or version available: " + key);
       }
-
-      try (InputStream is = entity.getContent()) {
-        b = SimplePostTool.inputStreamToByteArray(is, MAX_JAR_SIZE);
-      }
     } catch (Exception e) {
       ParWork.propegateInterrupt(e);
       if (e instanceof SolrException) {
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index f8660c7..f35b675 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -59,6 +59,7 @@ import org.apache.lucene.store.Directory;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.cloud.SolrCloudManager;
 import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer;
+import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.impl.HttpClientUtil;
 import org.apache.solr.client.solrj.impl.SolrHttpClientBuilder;
@@ -979,8 +980,8 @@ public class CoreContainer implements Closeable {
     if (isZooKeeperAware()) {
       name = getZkController().getNodeName();
       cloudManager = getZkController().getSolrCloudManager();
-      client = new CloudSolrClient.Builder(getZkController().getZkStateReader())
-          .withHttpClient(updateShardHandler.getDefaultHttpClient()).build();
+      client = new CloudHttp2SolrClient.Builder(getZkController().getZkStateReader())
+          .withHttpClient(updateShardHandler.getUpdateOnlyHttpClient()).build();
     } else {
       name = getNodeConfig().getNodeName();
       if (name == null || name.isEmpty()) {
diff --git a/solr/core/src/java/org/apache/solr/filestore/DistribPackageStore.java b/solr/core/src/java/org/apache/solr/filestore/DistribPackageStore.java
index be9987c..be2e231 100644
--- a/solr/core/src/java/org/apache/solr/filestore/DistribPackageStore.java
+++ b/solr/core/src/java/org/apache/solr/filestore/DistribPackageStore.java
@@ -40,6 +40,7 @@ import java.util.function.Predicate;
 
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.lucene.util.IOUtils;
+import org.apache.solr.client.solrj.impl.Http2SolrClient;
 import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.ZkStateReader;
@@ -372,7 +373,7 @@ public class DistribPackageStore implements PackageStore {
         }
         try {
           //fire and forget
-          Utils.executeGET(coreContainer.getUpdateShardHandler().getDefaultHttpClient(), url, null);
+          Http2SolrClient.GET(url, coreContainer.getUpdateShardHandler().getUpdateOnlyHttpClient());
         } catch (Exception e) {
           ParWork.propegateInterrupt(e);
           log.info("Node: {} failed to respond for file fetch notification",  node, e);
diff --git a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
index b5c2cf9..f420f5f 100644
--- a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
@@ -24,6 +24,7 @@ import org.apache.solr.api.ApiBag;
 import org.apache.solr.client.solrj.SolrClient;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.SolrResponse;
+import org.apache.solr.client.solrj.impl.Http2SolrClient;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
 import org.apache.solr.client.solrj.io.stream.expr.Expressible;
 import org.apache.solr.cloud.ZkController;
@@ -819,7 +820,7 @@ public class SolrConfigHandler extends RequestHandlerBase implements SolrCoreAwa
 
     for (String coreUrl : getActiveReplicaCoreUrls(zkController, collection)) {
       PerReplicaCallable e = new PerReplicaCallable(
-              zkController.getCoreContainer().getUpdateShardHandler().getDefaultHttpClient()
+              zkController.getCoreContainer().getUpdateShardHandler().getUpdateOnlyHttpClient()
               , coreUrl, prop, expectedVersion, maxWaitSecs);
       concurrentTasks.add(e);
     }
@@ -914,14 +915,14 @@ public class SolrConfigHandler extends RequestHandlerBase implements SolrCoreAwa
 
   @SuppressWarnings({"rawtypes"})
   private static class PerReplicaCallable extends SolrRequest implements Callable<Boolean> {
-    private final HttpClient httpClient;
+    private final Http2SolrClient httpClient;
     String coreUrl;
     String prop;
     int expectedZkVersion;
     Number remoteVersion = null;
     int maxWait;
 
-    PerReplicaCallable(HttpClient defaultHttpClient, String coreUrl, String prop, int expectedZkVersion, int maxWait) {
+    PerReplicaCallable(Http2SolrClient defaultHttpClient, String coreUrl, String prop, int expectedZkVersion, int maxWait) {
       super(METHOD.GET, "/config/" + ZNODEVER);
       this.coreUrl = coreUrl;
       this.expectedZkVersion = expectedZkVersion;
@@ -942,7 +943,7 @@ public class SolrConfigHandler extends RequestHandlerBase implements SolrCoreAwa
       final RTimer timer = new RTimer();
       long timeElapsed = (long) timer.getTime() / 1000;
       int attempts = 0;
-      try (HttpSolrClient solr = new HttpSolrClient.Builder(coreUrl).withHttpClient(httpClient).markInternalRequest().build()) {
+      try (Http2SolrClient solr = new Http2SolrClient.Builder(coreUrl).withHttpClient(httpClient).markInternalRequest().build()) {
         // eventually, this loop will get killed by the ExecutorService's timeout
         while (true) {
           try {
@@ -950,8 +951,7 @@ public class SolrConfigHandler extends RequestHandlerBase implements SolrCoreAwa
             if (timeElapsed >= maxWait) {
               return false;
             }
-
-            NamedList<Object> resp = solr.httpUriRequest(this).future.get();
+            NamedList<Object> resp = solr.request(this);
             if (resp != null) {
               @SuppressWarnings({"rawtypes"})
               Map m = (Map) resp.get(ZNODEVER);
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/AutoscalingHistoryHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/AutoscalingHistoryHandler.java
index c65ac31..3b2c60a 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/AutoscalingHistoryHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/AutoscalingHistoryHandler.java
@@ -26,6 +26,8 @@ import java.util.Optional;
 
 import org.apache.solr.api.Api;
 import org.apache.solr.api.ApiBag;
+import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.impl.CloudHttp2SolrClient;
 import org.apache.solr.client.solrj.impl.CloudSolrClient;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.cloud.autoscaling.SystemLogListener;
@@ -127,8 +129,8 @@ public class AutoscalingHistoryHandler extends RequestHandlerBase implements Per
         }
       }
     }
-    try (CloudSolrClient cloudSolrClient = new CloudSolrClient.Builder(req.getCore().getCoreContainer().getZkController().getZkStateReader())
-        .withHttpClient(coreContainer.getUpdateShardHandler().getDefaultHttpClient())
+    try (CloudHttp2SolrClient cloudSolrClient = new CloudHttp2SolrClient.Builder(req.getCore().getCoreContainer().getZkController().getZkStateReader())
+        .withHttpClient(coreContainer.getUpdateShardHandler().getUpdateOnlyHttpClient())
         .build()) {
       QueryResponse qr = cloudSolrClient.query(collection, params);
       rsp.setAllValues(qr.getResponse());
diff --git a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
index 5d096c5..56825f2 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
@@ -160,7 +160,6 @@ public class HttpShardHandlerFactory extends ShardHandlerFactory implements org.
   static final String SET_SOLR_DISABLE_SHARDS_WHITELIST_CLUE = " set -D"+INIT_SOLR_DISABLE_SHARDS_WHITELIST+"=true to disable shards whitelist checks";
 
   private volatile Http2SolrClient solrClient;
-  private volatile HttpClient httpClient;
 
 
   public HttpShardHandlerFactory() {
@@ -386,10 +385,6 @@ public class HttpShardHandlerFactory extends ShardHandlerFactory implements org.
     this.solrClient = solrClient;
   }
 
-  public void setHttpClient(HttpClient httpClient) {
-    this.httpClient = httpClient;
-  }
-
   /**
    * Makes a request to one or more of the given urls, using the configured load balancer.
    *
diff --git a/solr/core/src/java/org/apache/solr/handler/component/ShardHandlerFactory.java b/solr/core/src/java/org/apache/solr/handler/component/ShardHandlerFactory.java
index 945056c..75c9459 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/ShardHandlerFactory.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/ShardHandlerFactory.java
@@ -51,7 +51,6 @@ public abstract class ShardHandlerFactory implements Closeable {
     try {
       ShardHandlerFactory shf = loader.findClass(info.className, ShardHandlerFactory.class, "handler.component.").getConstructor().newInstance();
       if (shf instanceof HttpShardHandlerFactory) {
-        ((HttpShardHandlerFactory) shf).setHttpClient(ush.getDefaultHttpClient());
         ((HttpShardHandlerFactory) shf).setHttp2Client(ush.getUpdateOnlyHttpClient());
       }
       if (PluginInfoInitialized.class.isAssignableFrom(shf.getClass()))
diff --git a/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java b/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
index c93a171..63e6722 100644
--- a/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
+++ b/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
@@ -26,14 +26,18 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeoutException;
 
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.solr.api.Command;
 import org.apache.solr.api.EndPoint;
 import org.apache.solr.api.PayloadObj;
 import org.apache.solr.client.solrj.SolrRequest;
+import org.apache.solr.client.solrj.impl.Http2SolrClient;
 import org.apache.solr.client.solrj.request.beans.Package;
 import org.apache.solr.common.ParWork;
+import org.apache.solr.common.ParWorkExecService;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.annotation.JsonProperty;
 import org.apache.solr.common.cloud.SolrZkClient;
@@ -236,12 +240,17 @@ public class PackageAPI {
       //first refresh my own
       packageLoader.notifyListeners(p);
       for (String s : coreContainer.getPackageStoreAPI().shuffledNodes()) {
-        Utils.executeGET(coreContainer.getUpdateShardHandler().getDefaultHttpClient(),
-            coreContainer.getZkController().zkStateReader.getBaseUrlForNodeName(s).replace("/solr", "/api") + "/cluster/package?wt=javabin&omitHeader=true&refreshPackage=" + p,
-            Utils.JAVABINCONSUMER);
+        try {
+          Http2SolrClient.GET(coreContainer.getZkController().
+              zkStateReader.getBaseUrlForNodeName(s).replace("/solr", "/api") + "/cluster/package?wt=javabin&omitHeader=true&refreshPackage=" + p, coreContainer.getUpdateShardHandler().getUpdateOnlyHttpClient());
+        } catch (InterruptedException e) {
+          ParWork.propegateInterrupt(e);
+        } catch (ExecutionException e) {
+          throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
+        } catch (TimeoutException e) {
+          throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
+        }
       }
-
-
     }
 
 
@@ -409,9 +418,17 @@ public class PackageAPI {
 
   void notifyAllNodesToSync(int expected) {
     for (String s : coreContainer.getPackageStoreAPI().shuffledNodes()) {
-      Utils.executeGET(coreContainer.getUpdateShardHandler().getDefaultHttpClient(),
-          coreContainer.getZkController().zkStateReader.getBaseUrlForNodeName(s).replace("/solr", "/api") + "/cluster/package?wt=javabin&omitHeader=true&expectedVersion" + expected,
-          Utils.JAVABINCONSUMER);
+      try {
+        Http2SolrClient.GET(coreContainer.getZkController().zkStateReader.
+            getBaseUrlForNodeName(s).replace("/solr", "/api") +
+            "/cluster/package?wt=javabin&omitHeader=true&expectedVersion" + expected, coreContainer.getUpdateShardHandler().getUpdateOnlyHttpClient());
+      } catch (InterruptedException e) {
+        ParWork.propegateInterrupt(e);
+      } catch (ExecutionException e) {
+        throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
+      } catch (TimeoutException e) {
+        throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
+      }
     }
   }
 
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 1cbc1bf..00613e4 100644
--- a/solr/core/src/java/org/apache/solr/update/PeerSyncWithLeader.java
+++ b/solr/core/src/java/org/apache/solr/update/PeerSyncWithLeader.java
@@ -28,6 +28,7 @@ import com.codahale.metrics.Timer;
 import org.apache.http.client.HttpClient;
 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.impl.HttpSolrClient;
 import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.client.solrj.response.QueryResponse;
@@ -56,7 +57,7 @@ public class PeerSyncWithLeader implements SolrMetricProducer {
 
   private UpdateHandler uhandler;
   private UpdateLog ulog;
-  private HttpSolrClient clientToLeader;
+  private Http2SolrClient clientToLeader;
 
   private final boolean doFingerprint;
 
@@ -79,8 +80,9 @@ public class PeerSyncWithLeader implements SolrMetricProducer {
     this.doFingerprint = !"true".equals(System.getProperty("solr.disableFingerprint"));
     this.uhandler = core.getUpdateHandler();
     this.ulog = uhandler.getUpdateLog();
-    HttpClient httpClient = core.getCoreContainer().getUpdateShardHandler().getDefaultHttpClient();
-    this.clientToLeader = new HttpSolrClient.Builder(leaderUrl).withHttpClient(httpClient).markInternalRequest().build();
+    Http2SolrClient httpClient = core
+        .getCoreContainer().getUpdateShardHandler().getUpdateOnlyHttpClient();
+    this.clientToLeader = new Http2SolrClient.Builder(leaderUrl).withHttpClient(httpClient).markInternalRequest().build();
 
     this.updater = new PeerSync.Updater(msg(), core);
 
@@ -192,7 +194,7 @@ public class PeerSyncWithLeader implements SolrMetricProducer {
       }
       try {
         clientToLeader.close();
-      } catch (IOException e) {
+      } catch (Exception e) {
         log.warn("{} unable to close client to leader", msg(), e);
       }
     }
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 323c97c..44a93ac 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
@@ -1185,6 +1185,7 @@ public class Http2SolrClient extends SolrClient {
     sResponse.contentType = response.getEncoding();
     sResponse.size = response.getContent().length;
     sResponse.status = response.getStatus();
+    sResponse.bytes = response.getContent();
     return sResponse;
   }