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/06/16 09:42:08 UTC

[2/2] httpcomponents-client git commit: Pooling connection managers to implement graceful and immediate shut down

Pooling connection managers to implement graceful and immediate shut down


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

Branch: refs/heads/master
Commit: 65702281181e684082ce38b6c62ea6b60b66fbf1
Parents: 60571ae
Author: Oleg Kalnichevski <ol...@apache.org>
Authored: Sat Jun 16 11:26:35 2018 +0200
Committer: Oleg Kalnichevski <ol...@apache.org>
Committed: Sat Jun 16 11:39:24 2018 +0200

----------------------------------------------------------------------
 .../io/BasicHttpClientConnectionManager.java    | 33 +++++++-------------
 .../io/PoolingHttpClientConnectionManager.java  | 13 ++++++--
 .../PoolingAsyncClientConnectionManager.java    | 15 ++++++---
 .../http/io/HttpClientConnectionManager.java    |  4 +--
 .../http/nio/AsyncClientConnectionManager.java  |  4 +--
 .../TestBasicHttpClientConnectionManager.java   |  8 ++---
 6 files changed, 41 insertions(+), 36 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/65702281/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/BasicHttpClientConnectionManager.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/BasicHttpClientConnectionManager.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/BasicHttpClientConnectionManager.java
index d6f1f6f..924ec3c 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/BasicHttpClientConnectionManager.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/BasicHttpClientConnectionManager.java
@@ -152,8 +152,13 @@ public class BasicHttpClientConnectionManager implements HttpClientConnectionMan
 
     @Override
     public void close() {
+        shutdown(ShutdownType.GRACEFUL);
+    }
+
+    @Override
+    public void shutdown(final ShutdownType shutdownType) {
         if (this.closed.compareAndSet(false, true)) {
-            shutdownConnection();
+            closeConnection(shutdownType);
         }
     }
 
@@ -200,24 +205,10 @@ public class BasicHttpClientConnectionManager implements HttpClientConnectionMan
         };
     }
 
-    private synchronized void closeConnection() {
-        if (this.conn != null) {
-            this.log.debug("Closing connection");
-            try {
-                this.conn.close();
-            } catch (final IOException iox) {
-                if (this.log.isDebugEnabled()) {
-                    this.log.debug("I/O exception closing connection", iox);
-                }
-            }
-            this.conn = null;
-        }
-    }
-
-    private synchronized void shutdownConnection() {
+    private synchronized void closeConnection(final ShutdownType shutdownType) {
         if (this.conn != null) {
-            this.log.debug("Shutting down connection");
-            this.conn.shutdown(ShutdownType.GRACEFUL);
+            this.log.debug("Shutting down connection " + shutdownType);
+            this.conn.shutdown(shutdownType);
             this.conn = null;
         }
     }
@@ -227,7 +218,7 @@ public class BasicHttpClientConnectionManager implements HttpClientConnectionMan
             if (this.log.isDebugEnabled()) {
                 this.log.debug("Connection expired @ " + new Date(this.expiry));
             }
-            closeConnection();
+            closeConnection(ShutdownType.GRACEFUL);
         }
     }
 
@@ -238,7 +229,7 @@ public class BasicHttpClientConnectionManager implements HttpClientConnectionMan
         }
         Asserts.check(!this.leased, "Connection is still allocated");
         if (!LangUtils.equals(this.route, route) || !LangUtils.equals(this.state, state)) {
-            closeConnection();
+            closeConnection(ShutdownType.GRACEFUL);
         }
         this.route = route;
         this.state = state;
@@ -362,7 +353,7 @@ public class BasicHttpClientConnectionManager implements HttpClientConnectionMan
             }
             final long deadline = System.currentTimeMillis() - time;
             if (this.updated <= deadline) {
-                closeConnection();
+                closeConnection(ShutdownType.GRACEFUL);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/65702281/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/PoolingHttpClientConnectionManager.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/PoolingHttpClientConnectionManager.java b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/PoolingHttpClientConnectionManager.java
index d077dee..fb5ae45 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/PoolingHttpClientConnectionManager.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/PoolingHttpClientConnectionManager.java
@@ -222,10 +222,17 @@ public class PoolingHttpClientConnectionManager
 
     @Override
     public void close() {
+        shutdown(ShutdownType.GRACEFUL);
+    }
+
+    @Override
+    public void shutdown(final ShutdownType shutdownType) {
         if (this.closed.compareAndSet(false, true)) {
-            this.log.debug("Connection manager is shutting down");
-            this.pool.shutdown(ShutdownType.GRACEFUL);
-            this.log.debug("Connection manager shut down");
+            if (this.log.isDebugEnabled()) {
+                this.log.debug("Shutdown connection pool " + shutdownType);
+            }
+            this.pool.shutdown(shutdownType);
+            this.log.debug("Connection pool shut down");
         }
     }
 

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/65702281/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 2550df9..2080813 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
@@ -188,10 +188,17 @@ public class PoolingAsyncClientConnectionManager implements AsyncClientConnectio
 
     @Override
     public void close() {
-        if (closed.compareAndSet(false, true)) {
-            log.debug("Connection manager is shutting down");
-            pool.shutdown(ShutdownType.GRACEFUL);
-            log.debug("Connection manager shut down");
+        shutdown(ShutdownType.GRACEFUL);
+    }
+
+    @Override
+    public void shutdown(final ShutdownType shutdownType) {
+        if (this.closed.compareAndSet(false, true)) {
+            if (this.log.isDebugEnabled()) {
+                this.log.debug("Shutdown connection pool " + shutdownType);
+            }
+            this.pool.shutdown(shutdownType);
+            this.log.debug("Connection pool shut down");
         }
     }
 

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/65702281/httpclient5/src/main/java/org/apache/hc/client5/http/io/HttpClientConnectionManager.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/io/HttpClientConnectionManager.java b/httpclient5/src/main/java/org/apache/hc/client5/http/io/HttpClientConnectionManager.java
index f689101..8826258 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/io/HttpClientConnectionManager.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/io/HttpClientConnectionManager.java
@@ -26,11 +26,11 @@
  */
 package org.apache.hc.client5.http.io;
 
-import java.io.Closeable;
 import java.io.IOException;
 
 import org.apache.hc.client5.http.HttpRoute;
 import org.apache.hc.core5.http.protocol.HttpContext;
+import org.apache.hc.core5.io.GracefullyCloseable;
 import org.apache.hc.core5.util.TimeValue;
 import org.apache.hc.core5.util.Timeout;
 
@@ -48,7 +48,7 @@ import org.apache.hc.core5.util.Timeout;
  *
  * @since 4.3
  */
-public interface HttpClientConnectionManager extends Closeable {
+public interface HttpClientConnectionManager extends GracefullyCloseable {
 
     /**
      * Returns a {@link LeaseRequest} object which can be used to obtain

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/65702281/httpclient5/src/main/java/org/apache/hc/client5/http/nio/AsyncClientConnectionManager.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/nio/AsyncClientConnectionManager.java b/httpclient5/src/main/java/org/apache/hc/client5/http/nio/AsyncClientConnectionManager.java
index 55b878b..1211d86 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/nio/AsyncClientConnectionManager.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/nio/AsyncClientConnectionManager.java
@@ -26,12 +26,12 @@
  */
 package org.apache.hc.client5.http.nio;
 
-import java.io.Closeable;
 import java.util.concurrent.Future;
 
 import org.apache.hc.client5.http.HttpRoute;
 import org.apache.hc.core5.concurrent.FutureCallback;
 import org.apache.hc.core5.http.protocol.HttpContext;
+import org.apache.hc.core5.io.GracefullyCloseable;
 import org.apache.hc.core5.reactor.ConnectionInitiator;
 import org.apache.hc.core5.util.TimeValue;
 import org.apache.hc.core5.util.Timeout;
@@ -50,7 +50,7 @@ import org.apache.hc.core5.util.Timeout;
  *
  * @since 5.0
  */
-public interface AsyncClientConnectionManager extends Closeable {
+public interface AsyncClientConnectionManager extends GracefullyCloseable {
 
     /**
      * Returns a {@link Future} object which can be used to obtain

http://git-wip-us.apache.org/repos/asf/httpcomponents-client/blob/65702281/httpclient5/src/test/java/org/apache/hc/client5/http/impl/io/TestBasicHttpClientConnectionManager.java
----------------------------------------------------------------------
diff --git a/httpclient5/src/test/java/org/apache/hc/client5/http/impl/io/TestBasicHttpClientConnectionManager.java b/httpclient5/src/test/java/org/apache/hc/client5/http/impl/io/TestBasicHttpClientConnectionManager.java
index 1ff63ac..cf6d85f 100644
--- a/httpclient5/src/test/java/org/apache/hc/client5/http/impl/io/TestBasicHttpClientConnectionManager.java
+++ b/httpclient5/src/test/java/org/apache/hc/client5/http/impl/io/TestBasicHttpClientConnectionManager.java
@@ -192,7 +192,7 @@ public class TestBasicHttpClientConnectionManager {
         Assert.assertNotNull(conn2);
         Assert.assertFalse(conn2.isConnected());
 
-        Mockito.verify(conn).close();
+        Mockito.verify(conn).shutdown(ShutdownType.GRACEFUL);
         Mockito.verify(connFactory, Mockito.times(2)).createConnection(Mockito.<Socket>any());
     }
 
@@ -223,7 +223,7 @@ public class TestBasicHttpClientConnectionManager {
         Assert.assertNotNull(conn2);
         Assert.assertFalse(conn2.isConnected());
 
-        Mockito.verify(conn).close();
+        Mockito.verify(conn).shutdown(ShutdownType.GRACEFUL);
         Mockito.verify(connFactory, Mockito.times(2)).createConnection(Mockito.<Socket>any());
     }
 
@@ -298,7 +298,7 @@ public class TestBasicHttpClientConnectionManager {
 
         mgr.closeExpired();
 
-        Mockito.verify(conn).close();
+        Mockito.verify(conn).shutdown(ShutdownType.GRACEFUL);
     }
 
     @Test
@@ -325,7 +325,7 @@ public class TestBasicHttpClientConnectionManager {
 
         mgr.closeIdle(50, TimeUnit.MILLISECONDS);
 
-        Mockito.verify(conn).close();
+        Mockito.verify(conn).shutdown(ShutdownType.GRACEFUL);
     }
 
     @Test(expected=IllegalStateException.class)