You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2018/10/17 12:31:28 UTC

httpcomponents-client git commit: AsyncConnectionEndpoint to support graceful and immediate close modes [Forced Update!]

Repository: httpcomponents-client
Updated Branches:
  refs/heads/master e2c8b7437 -> c44663982 (forced update)


AsyncConnectionEndpoint to support graceful and immediate close modes


Project: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/repo
Commit: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/commit/c4466398
Tree: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/tree/c4466398
Diff: http://git-wip-us.apache.org/repos/asf/httpcomponents-client/diff/c4466398

Branch: refs/heads/master
Commit: c4466398201f3b1baca31a3b8ef451ca0616407f
Parents: a1d6db5
Author: Oleg Kalnichevski <ol...@apache.org>
Authored: Wed Oct 17 14:25:20 2018 +0200
Committer: Oleg Kalnichevski <ol...@apache.org>
Committed: Wed Oct 17 14:31:12 2018 +0200

----------------------------------------------------------------------
 .../async/InternalHttpAsyncExecRuntime.java     |  8 ++----
 .../PoolingAsyncClientConnectionManager.java    | 18 ++----------
 .../http/nio/AsyncConnectionEndpoint.java       | 30 +++++++++++---------
 3 files changed, 22 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/c4466398/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/InternalHttpAsyncExecRuntime.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/InternalHttpAsyncExecRuntime.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/InternalHttpAsyncExecRuntime.java
index 5f513da..93340f8 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/InternalHttpAsyncExecRuntime.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/async/InternalHttpAsyncExecRuntime.java
@@ -27,7 +27,6 @@
 
 package org.apache.hc.client5.http.impl.async;
 
-import java.io.IOException;
 import java.io.InterruptedIOException;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -45,6 +44,7 @@ import org.apache.hc.core5.http.nio.AsyncClientExchangeHandler;
 import org.apache.hc.core5.http.nio.AsyncPushConsumer;
 import org.apache.hc.core5.http.nio.HandlerFactory;
 import org.apache.hc.core5.http2.HttpVersionPolicy;
+import org.apache.hc.core5.io.CloseMode;
 import org.apache.hc.core5.reactor.ConnectionInitiator;
 import org.apache.hc.core5.util.TimeValue;
 import org.slf4j.Logger;
@@ -121,14 +121,10 @@ class InternalHttpAsyncExecRuntime implements AsyncExecRuntime {
 
     private void discardEndpoint(final AsyncConnectionEndpoint endpoint) {
         try {
-            endpoint.shutdown();
+            endpoint.close(CloseMode.IMMEDIATE);
             if (log.isDebugEnabled()) {
                 log.debug(ConnPoolSupport.getId(endpoint) + ": discarding endpoint");
             }
-        } catch (final IOException ex) {
-            if (log.isDebugEnabled()) {
-                log.debug(ConnPoolSupport.getId(endpoint) + ": " + ex.getMessage(), ex);
-            }
         } finally {
             manager.release(endpoint, null, TimeValue.ZERO_MILLISECONDS);
         }

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/c4466398/httpclient5/src/main/java/org/apache/hc/client5/http/impl/nio/PoolingAsyncClientConnectionManager.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/nio/PoolingAsyncClientConnectionManager.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/nio/PoolingAsyncClientConnectionManager.java
index 94570c2..49acdd1 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/nio/PoolingAsyncClientConnectionManager.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/nio/PoolingAsyncClientConnectionManager.java
@@ -27,7 +27,6 @@
 
 package org.apache.hc.client5.http.impl.nio;
 
-import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.util.Set;
 import java.util.concurrent.Future;
@@ -512,24 +511,13 @@ public class PoolingAsyncClientConnectionManager implements AsyncClientConnectio
         }
 
         @Override
-        public void shutdown() throws IOException {
+        public void close(final CloseMode closeMode) {
             final PoolEntry<HttpRoute, ManagedAsyncClientConnection> poolEntry = poolEntryRef.get();
             if (poolEntry != null) {
                 if (log.isDebugEnabled()) {
-                    log.debug(id + ": shutdown " + CloseMode.IMMEDIATE);
+                    log.debug(id + ": shutdown " + closeMode);
                 }
-                poolEntry.discardConnection(CloseMode.IMMEDIATE);
-            }
-        }
-
-        @Override
-        public void close() throws IOException {
-            final PoolEntry<HttpRoute, ManagedAsyncClientConnection> poolEntry = poolEntryRef.get();
-            if (poolEntry != null) {
-                if (log.isDebugEnabled()) {
-                    log.debug(id + ": shutdown " + CloseMode.GRACEFUL);
-                }
-                poolEntry.discardConnection(CloseMode.GRACEFUL);
+                poolEntry.discardConnection(closeMode);
             }
         }
 

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/c4466398/httpclient5/src/main/java/org/apache/hc/client5/http/nio/AsyncConnectionEndpoint.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/nio/AsyncConnectionEndpoint.java b/httpclient5/src/main/java/org/apache/hc/client5/http/nio/AsyncConnectionEndpoint.java
index 692863d..3acf72f 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/nio/AsyncConnectionEndpoint.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/nio/AsyncConnectionEndpoint.java
@@ -27,7 +27,6 @@
 
 package org.apache.hc.client5.http.nio;
 
-import java.io.Closeable;
 import java.io.IOException;
 import java.util.concurrent.Future;
 
@@ -43,6 +42,8 @@ import org.apache.hc.core5.http.nio.HandlerFactory;
 import org.apache.hc.core5.http.nio.support.BasicClientExchangeHandler;
 import org.apache.hc.core5.http.protocol.HttpContext;
 import org.apache.hc.core5.http.protocol.HttpCoreContext;
+import org.apache.hc.core5.io.CloseMode;
+import org.apache.hc.core5.io.ModalCloseable;
 
 /**
  * Client connection endpoint that can be used to execute message exchanges.
@@ -50,20 +51,29 @@ import org.apache.hc.core5.http.protocol.HttpCoreContext;
  * @since 5.0
  */
 @Contract(threading = ThreadingBehavior.SAFE)
-public abstract class AsyncConnectionEndpoint implements Closeable {
+public abstract class AsyncConnectionEndpoint implements ModalCloseable {
 
     public abstract void execute(
             AsyncClientExchangeHandler exchangeHandler,
             HandlerFactory<AsyncPushConsumer> pushHandlerFactory,
             HttpContext context);
 
-    public void execute(
+    public abstract boolean isConnected();
+
+    public abstract void setSocketTimeout(int timeout);
+
+    @Override
+    public final void close() throws IOException {
+        close(CloseMode.GRACEFUL);
+    }
+
+    public final void execute(
             final AsyncClientExchangeHandler exchangeHandler,
             final HttpContext context) {
         execute(exchangeHandler, null, context);
     }
 
-    public <T> Future<T> execute(
+    public final <T> Future<T> execute(
             final AsyncRequestProducer requestProducer,
             final AsyncResponseConsumer<T> responseConsumer,
             final HandlerFactory<AsyncPushConsumer> pushHandlerFactory,
@@ -94,7 +104,7 @@ public abstract class AsyncConnectionEndpoint implements Closeable {
         return future;
     }
 
-    public <T> Future<T> execute(
+    public final <T> Future<T> execute(
             final AsyncRequestProducer requestProducer,
             final AsyncResponseConsumer<T> responseConsumer,
             final HttpContext context,
@@ -102,7 +112,7 @@ public abstract class AsyncConnectionEndpoint implements Closeable {
         return execute(requestProducer, responseConsumer, null, context, callback);
     }
 
-    public <T> Future<T> execute(
+    public final <T> Future<T> execute(
             final AsyncRequestProducer requestProducer,
             final AsyncResponseConsumer<T> responseConsumer,
             final HandlerFactory<AsyncPushConsumer> pushHandlerFactory,
@@ -110,17 +120,11 @@ public abstract class AsyncConnectionEndpoint implements Closeable {
         return execute(requestProducer, responseConsumer, pushHandlerFactory, null, callback);
     }
 
-    public <T> Future<T> execute(
+    public final <T> Future<T> execute(
             final AsyncRequestProducer requestProducer,
             final AsyncResponseConsumer<T> responseConsumer,
             final FutureCallback<T> callback) {
         return execute(requestProducer, responseConsumer, null, null, callback);
     }
 
-    public abstract boolean isConnected();
-
-    public abstract void setSocketTimeout(int timeout);
-
-    public abstract void shutdown() throws IOException;
-
 }