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/10/26 10:35:53 UTC

[2/2] lucene-solr:jira/http2: Hardness resource management

Hardness resource management


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

Branch: refs/heads/jira/http2
Commit: 41db97304957d68aa7b9c17213651e52f5dffe3d
Parents: a97ba1d
Author: Cao Manh Dat <da...@apache.org>
Authored: Fri Oct 26 17:35:43 2018 +0700
Committer: Cao Manh Dat <da...@apache.org>
Committed: Fri Oct 26 17:35:43 2018 +0700

----------------------------------------------------------------------
 .../solr/client/solrj/impl/Http2SolrClient.java  | 19 +++++++++++++++----
 1 file changed, 15 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/41db9730/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
----------------------------------------------------------------------
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 2e4c0f9..08db9d1 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
@@ -75,6 +75,7 @@ import org.eclipse.jetty.http.HttpHeader;
 import org.eclipse.jetty.http.HttpMethod;
 import org.eclipse.jetty.http2.client.HTTP2Client;
 import org.eclipse.jetty.http2.client.http.HttpClientTransportOverHTTP2;
+import org.eclipse.jetty.util.BlockingArrayQueue;
 import org.eclipse.jetty.util.Fields;
 import org.eclipse.jetty.util.ssl.SslContextFactory;
 import org.eclipse.jetty.util.thread.QueuedThreadPool;
@@ -157,7 +158,8 @@ public class Http2SolrClient extends SolrClient {
   private HttpClient createHttpClient(Builder builder) {
     HttpClient httpClient;
 
-    QueuedThreadPool httpClientExecutor = new QueuedThreadPool(150, 4);
+    BlockingArrayQueue<Runnable> queue = new BlockingArrayQueue<>(128, 128);
+    QueuedThreadPool httpClientExecutor = new QueuedThreadPool(128, 4, 60000, queue);
     httpClientExecutor.setDaemon(true);
 
     SslContextFactory sslContextFactory;
@@ -238,8 +240,10 @@ public class Http2SolrClient extends SolrClient {
 
           NamedList<Object> rsp;
           try {
+            InputStream is = getContentAsInputStream();
+            assert ObjectReleaseTracker.track(is);
             rsp = processErrorsAndResponse(result.getResponse(),
-                parser, getContentAsInputStream(), getEncoding(), isV2ApiRequest(solrRequest));
+                parser, is, getEncoding(), isV2ApiRequest(solrRequest));
             onComplete.onSuccess(rsp);
           } catch (Exception e) {
             onComplete.onFailure(e);
@@ -252,7 +256,9 @@ public class Http2SolrClient extends SolrClient {
         InputStreamResponseListener listener = new InputStreamResponseListener();
         req.send(listener);
         Response response = listener.get(idleTimeout, TimeUnit.SECONDS);
-        return processErrorsAndResponse(response, parser, listener.getInputStream(), getEncoding(response), isV2ApiRequest(solrRequest));
+        InputStream is = listener.getInputStream();
+        assert ObjectReleaseTracker.track(is);
+        return processErrorsAndResponse(response, parser, is, getEncoding(response), isV2ApiRequest(solrRequest));
       } catch (InterruptedException e) {
         Thread.currentThread().interrupt();
         throw new RuntimeException(e);
@@ -447,6 +453,10 @@ public class Http2SolrClient extends SolrClient {
     return req;
   }
 
+  private boolean wantStream(final ResponseParser processor) {
+    return processor == null || processor instanceof InputStreamResponseParser;
+  }
+
   private NamedList<Object> processErrorsAndResponse(Response response,
                                                      final ResponseParser processor,
                                                      InputStream is,
@@ -482,7 +492,7 @@ public class Http2SolrClient extends SolrClient {
           }
       }
 
-      if (processor == null || processor instanceof InputStreamResponseParser) {
+      if (wantStream(parser)) {
         // no processor specified, return raw stream
         NamedList<Object> rsp = new NamedList<>();
         rsp.add("stream", is);
@@ -551,6 +561,7 @@ public class Http2SolrClient extends SolrClient {
       if (shouldClose) {
         try {
           is.close();
+          assert ObjectReleaseTracker.release(is);
         } catch (IOException e) {
           // quitely
         }