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)