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
}