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 09:24:05 UTC

lucene-solr:jira/http2: Revert back to BUfferingResposeListener

Repository: lucene-solr
Updated Branches:
  refs/heads/jira/http2 e9a12a878 -> a7f54c1d2


Revert back to BUfferingResposeListener


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

Branch: refs/heads/jira/http2
Commit: a7f54c1d2835e2a82577e67064e856fa62bdce25
Parents: e9a12a8
Author: Cao Manh Dat <da...@apache.org>
Authored: Fri Oct 26 16:23:57 2018 +0700
Committer: Cao Manh Dat <da...@apache.org>
Committed: Fri Oct 26 16:23:57 2018 +0700

----------------------------------------------------------------------
 .../solr/client/solrj/impl/Http2SolrClient.java | 37 ++++++++++++--------
 1 file changed, 23 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/a7f54c1d/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 2001493..9a68de6 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
@@ -61,7 +61,9 @@ import org.eclipse.jetty.client.HttpClientTransport;
 import org.eclipse.jetty.client.ProtocolHandlers;
 import org.eclipse.jetty.client.api.Request;
 import org.eclipse.jetty.client.api.Response;
+import org.eclipse.jetty.client.api.Result;
 import org.eclipse.jetty.client.http.HttpClientTransportOverHTTP;
+import org.eclipse.jetty.client.util.BufferingResponseListener;
 import org.eclipse.jetty.client.util.BytesContentProvider;
 import org.eclipse.jetty.client.util.FormContentProvider;
 import org.eclipse.jetty.client.util.InputStreamContentProvider;
@@ -222,26 +224,33 @@ public class Http2SolrClient extends SolrClient {
       req.onComplete(listener);
     }
 
-    InputStreamResponseListener listener = new InputStreamResponseListener();
-    req.onRequestQueued(asyncTracker.queuedListener)
-        .onComplete(asyncTracker.completeListener).send(listener);
     if (onComplete != null) {
-      httpClient.getExecutor().execute(() -> {
-        try {
-          Response response = listener.get(idleTimeout, TimeUnit.SECONDS);
-          onComplete.onSuccess(
-              processErrorsAndResponse(response, parser, listener.getInputStream(), getEncoding(response), isV2ApiRequest(solrRequest))
-          );
-        } catch (InterruptedException e) {
-          Thread.currentThread().interrupt();
-          onComplete.onFailure(new RuntimeException(e));
-        } catch (Exception e) {
-          onComplete.onFailure(e);
+      // This async call only suitable for indexing since the response size is limited by 3MB
+      req.onRequestQueued(asyncTracker.queuedListener)
+          .onComplete(asyncTracker.completeListener).send(new BufferingResponseListener(3 * 1024 * 1024) {
+
+        @Override
+        public void onComplete(Result result) {
+          if (result.isFailed()) {
+            onComplete.onFailure(result.getFailure());
+            return;
+          }
+
+          NamedList<Object> rsp;
+          try {
+            rsp = processErrorsAndResponse(result.getResponse(),
+                parser, getContentAsInputStream(), getEncoding(), isV2ApiRequest(solrRequest));
+            onComplete.onSuccess(rsp);
+          } catch (Exception e) {
+            onComplete.onFailure(e);
+          }
         }
       });
       return null;
     } else {
       try {
+        InputStreamResponseListener listener = new InputStreamResponseListener();
+        req.send(listener);
         Response response = listener.get(idleTimeout, TimeUnit.SECONDS);
         return processErrorsAndResponse(response, parser, listener.getInputStream(), getEncoding(response), isV2ApiRequest(solrRequest));
       } catch (InterruptedException e) {