Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id F1EB5200C4F for ; Sat, 1 Apr 2017 19:11:27 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id F032E160B78; Sat, 1 Apr 2017 17:11:27 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 8E527160B9D for ; Sat, 1 Apr 2017 19:11:25 +0200 (CEST) Received: (qmail 5608 invoked by uid 500); 1 Apr 2017 17:11:24 -0000 Mailing-List: contact commits-help@hc.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "HttpComponents Project" Delivered-To: mailing list commits@hc.apache.org Received: (qmail 5581 invoked by uid 99); 1 Apr 2017 17:11:24 -0000 Received: from Unknown (HELO svn01-us-west.apache.org) (209.188.14.144) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 01 Apr 2017 17:11:24 +0000 Received: from svn01-us-west.apache.org (localhost [127.0.0.1]) by svn01-us-west.apache.org (ASF Mail Server at svn01-us-west.apache.org) with ESMTP id 0741F3A00A7 for ; Sat, 1 Apr 2017 17:11:24 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1789822 [1/2] - in /httpcomponents/httpcore/trunk: httpcore5-ab/src/main/java/org/apache/hc/core5/http/benchmark/ httpcore5-ab/src/test/java/org/apache/hc/core5/http/benchmark/ httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/ h... Date: Sat, 01 Apr 2017 17:11:23 -0000 To: commits@hc.apache.org From: olegk@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20170401171124.0741F3A00A7@svn01-us-west.apache.org> archived-at: Sat, 01 Apr 2017 17:11:28 -0000 Author: olegk Date: Sat Apr 1 17:11:22 2017 New Revision: 1789822 URL: http://svn.apache.org/viewvc?rev=1789822&view=rev Log: API for graceful shutdown of processes or endpoints Added: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/io/ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/io/GracefullyCloseable.java - copied, changed from r1789821, httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/command/ShutdownType.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/io/ShutdownType.java (contents, props changed) - copied, changed from r1789821, httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/command/ShutdownType.java Removed: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/command/ShutdownType.java Modified: httpcomponents/httpcore/trunk/httpcore5-ab/src/main/java/org/apache/hc/core5/http/benchmark/BenchmarkWorker.java httpcomponents/httpcore/trunk/httpcore5-ab/src/test/java/org/apache/hc/core5/http/benchmark/HttpServer.java httpcomponents/httpcore/trunk/httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/Http2FileServerExample.java httpcomponents/httpcore/trunk/httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/Http2MultiStreamExecutionExample.java httpcomponents/httpcore/trunk/httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/Http2RequestExecutionExample.java httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractHttp2IOEventHandler.java httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractHttp2StreamMultiplexer.java httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientHttpProtocolNegotiator.java httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ServerHttpProtocolNegotiator.java httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/ClassicTestServer.java httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpClientConnection.java httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpServerConnection.java httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/TestingFramework.java httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOEventHandler.java httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSession.java httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/http/ClientSessionEndpoint.java httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/http/IOReactorExecutor.java httpcomponents/httpcore/trunk/httpcore5-testing/src/test/java/org/apache/hc/core5/testing/nio/TestDefaultListeningIOReactor.java httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/AsyncFileServerExample.java httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/AsyncPipelinedRequestExecutionExample.java httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/AsyncRequestExecutionExample.java httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/AsyncReverseProxyExample.java httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/ClassicFileServerExample.java httpcomponents/httpcore/trunk/httpcore5/src/examples/org/apache/hc/core5/http/examples/ClassicReverseProxyExample.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/HttpConnection.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncRequester.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncServer.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpRequester.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/IOReactorExecutor.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/PoolEntryHolder.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/Worker.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/BHttpConnectionBase.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1IOEventHandler.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1StreamDuplexer.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1StreamDuplexer.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ServerHttp1StreamDuplexer.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/command/ShutdownCommand.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/ConnPool.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/ControlledConnPool.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/LeaseRequest.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/PoolEntry.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/RoutePool.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/AbstractMultiworkerIOReactor.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOReactor.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOReactorImpl.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOSession.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/IOSessionImpl.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/ManagedIOSession.java httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/reactor/ssl/SSLIOSession.java httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestBHttpConnectionBase.java httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/pool/TestPoolEntry.java httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/pool/TestRouteSpecificPool.java httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/pool/TestStrictConnPool.java Modified: httpcomponents/httpcore/trunk/httpcore5-ab/src/main/java/org/apache/hc/core5/http/benchmark/BenchmarkWorker.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-ab/src/main/java/org/apache/hc/core5/http/benchmark/BenchmarkWorker.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-ab/src/main/java/org/apache/hc/core5/http/benchmark/BenchmarkWorker.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-ab/src/main/java/org/apache/hc/core5/http/benchmark/BenchmarkWorker.java Sat Apr 1 17:11:22 2017 @@ -58,6 +58,7 @@ import org.apache.hc.core5.http.protocol import org.apache.hc.core5.http.protocol.RequestExpectContinue; import org.apache.hc.core5.http.protocol.RequestTargetHost; import org.apache.hc.core5.http.protocol.RequestUserAgent; +import org.apache.hc.core5.io.ShutdownType; /** * Worker thread for the {@link HttpBenchmark HttpBenchmark}. @@ -161,7 +162,7 @@ class BenchmarkWorker implements Runnabl if (config.getVerbosity() >= 2) { System.err.println("Failed HTTP request : " + e.getMessage()); } - conn.shutdown(); + conn.shutdown(ShutdownType.IMMEDIATE); continue; } Modified: httpcomponents/httpcore/trunk/httpcore5-ab/src/test/java/org/apache/hc/core5/http/benchmark/HttpServer.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-ab/src/test/java/org/apache/hc/core5/http/benchmark/HttpServer.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-ab/src/test/java/org/apache/hc/core5/http/benchmark/HttpServer.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-ab/src/test/java/org/apache/hc/core5/http/benchmark/HttpServer.java Sat Apr 1 17:11:22 2017 @@ -51,6 +51,7 @@ import org.apache.hc.core5.http.protocol import org.apache.hc.core5.http.protocol.ResponseContent; import org.apache.hc.core5.http.protocol.ResponseDate; import org.apache.hc.core5.http.protocol.ResponseServer; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.util.Asserts; public class HttpServer { @@ -162,15 +163,14 @@ public class HttpServer { while (!Thread.interrupted() && this.conn.isOpen()) { this.httpservice.handleRequest(this.conn, context); } + this.conn.shutdown(ShutdownType.GRACEFUL); } catch (final ConnectionClosedException ex) { } catch (final IOException ex) { System.err.println("I/O error: " + ex.getMessage()); } catch (final HttpException ex) { System.err.println("Unrecoverable HTTP protocol violation: " + ex.getMessage()); } finally { - try { - this.conn.shutdown(); - } catch (final IOException ignore) {} + this.conn.shutdown(ShutdownType.IMMEDIATE); } } Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/Http2FileServerExample.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/Http2FileServerExample.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/Http2FileServerExample.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/Http2FileServerExample.java Sat Apr 1 17:11:22 2017 @@ -62,6 +62,7 @@ import org.apache.hc.core5.http.protocol import org.apache.hc.core5.http2.frame.RawFrame; import org.apache.hc.core5.http2.impl.nio.Http2StreamListener; import org.apache.hc.core5.http2.impl.nio.bootstrap.H2ServerBootstrap; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.reactor.IOReactorConfig; import org.apache.hc.core5.reactor.ListenerEndpoint; @@ -227,7 +228,7 @@ public class Http2FileServerExample { @Override public void run() { System.out.println("HTTP server shutting down"); - server.shutdown(5, TimeUnit.SECONDS); + server.shutdown(ShutdownType.GRACEFUL); } }); Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/Http2MultiStreamExecutionExample.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/Http2MultiStreamExecutionExample.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/Http2MultiStreamExecutionExample.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/Http2MultiStreamExecutionExample.java Sat Apr 1 17:11:22 2017 @@ -46,6 +46,7 @@ import org.apache.hc.core5.http2.config. import org.apache.hc.core5.http2.frame.RawFrame; import org.apache.hc.core5.http2.impl.nio.Http2StreamListener; import org.apache.hc.core5.http2.impl.nio.bootstrap.H2RequesterBootstrap; +import org.apache.hc.core5.io.ShutdownType; /** * Example of HTTP/2 concurrent request execution using multiple streams. @@ -99,7 +100,7 @@ public class Http2MultiStreamExecutionEx @Override public void run() { System.out.println("HTTP requester shutting down"); - requester.shutdown(3, TimeUnit.SECONDS); + requester.shutdown(ShutdownType.GRACEFUL); } }); requester.start(); Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/Http2RequestExecutionExample.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/Http2RequestExecutionExample.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/Http2RequestExecutionExample.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/examples/org/apache/hc/core5/http/examples/Http2RequestExecutionExample.java Sat Apr 1 17:11:22 2017 @@ -46,6 +46,7 @@ import org.apache.hc.core5.http2.config. import org.apache.hc.core5.http2.frame.RawFrame; import org.apache.hc.core5.http2.impl.nio.Http2StreamListener; import org.apache.hc.core5.http2.impl.nio.bootstrap.H2RequesterBootstrap; +import org.apache.hc.core5.io.ShutdownType; /** * Example of HTTP/2 request execution. @@ -99,7 +100,7 @@ public class Http2RequestExecutionExampl @Override public void run() { System.out.println("HTTP requester shutting down"); - requester.shutdown(3, TimeUnit.SECONDS); + requester.shutdown(ShutdownType.GRACEFUL); } }); requester.start(); Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractHttp2IOEventHandler.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractHttp2IOEventHandler.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractHttp2IOEventHandler.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractHttp2IOEventHandler.java Sat Apr 1 17:11:22 2017 @@ -33,6 +33,7 @@ import java.net.SocketAddress; import org.apache.hc.core5.http.EndpointDetails; import org.apache.hc.core5.http.ProtocolVersion; import org.apache.hc.core5.http.impl.nio.HttpConnectionEventHandler; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.reactor.IOSession; import org.apache.hc.core5.util.Args; @@ -96,8 +97,8 @@ class AbstractHttp2IOEventHandler implem } @Override - public void shutdown() throws IOException { - streamMultiplexer.shutdown(); + public void shutdown(final ShutdownType shutdownType) { + streamMultiplexer.shutdown(shutdownType); } @Override Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractHttp2StreamMultiplexer.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractHttp2StreamMultiplexer.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractHttp2StreamMultiplexer.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractHttp2StreamMultiplexer.java Sat Apr 1 17:11:22 2017 @@ -60,7 +60,6 @@ import org.apache.hc.core5.http.nio.Asyn import org.apache.hc.core5.http.nio.AsyncPushProducer; import org.apache.hc.core5.http.nio.command.ExecutionCommand; import org.apache.hc.core5.http.nio.command.ShutdownCommand; -import org.apache.hc.core5.http.nio.command.ShutdownType; import org.apache.hc.core5.http.protocol.HttpCoreContext; import org.apache.hc.core5.http.protocol.HttpProcessor; import org.apache.hc.core5.http2.H2ConnectionException; @@ -79,6 +78,7 @@ import org.apache.hc.core5.http2.hpack.H import org.apache.hc.core5.http2.impl.BasicH2TransportMetrics; import org.apache.hc.core5.http2.nio.AsyncPingHandler; import org.apache.hc.core5.http2.nio.command.PingCommand; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.net.InetAddressUtils; import org.apache.hc.core5.reactor.Command; import org.apache.hc.core5.reactor.IOSession; @@ -664,7 +664,7 @@ abstract class AbstractHttp2StreamMultip connState = ConnectionHandshake.SHUTDOWN; } catch (final IOException ignore) { } finally { - ioSession.shutdown(); + ioSession.shutdown(ShutdownType.IMMEDIATE); } } @@ -1164,8 +1164,8 @@ abstract class AbstractHttp2StreamMultip } @Override - public void shutdown() throws IOException { - ioSession.shutdown(); + public void shutdown(final ShutdownType shutdownType) { + ioSession.shutdown(shutdownType); } @Override Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientHttpProtocolNegotiator.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientHttpProtocolNegotiator.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientHttpProtocolNegotiator.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ClientHttpProtocolNegotiator.java Sat Apr 1 17:11:22 2017 @@ -47,6 +47,7 @@ import org.apache.hc.core5.http.nio.comm import org.apache.hc.core5.http.protocol.HttpProcessor; import org.apache.hc.core5.http2.config.H2Config; import org.apache.hc.core5.http2.frame.DefaultFrameFactory; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.reactor.Command; import org.apache.hc.core5.reactor.IOEventHandler; import org.apache.hc.core5.reactor.IOSession; @@ -112,7 +113,7 @@ public class ClientHttpProtocolNegotiato final ByteChannel channel = ioSession.channel(); channel.write(preface); } catch (final IOException ex) { - ioSession.shutdown(); + ioSession.shutdown(ShutdownType.IMMEDIATE); if (connectionListener != null) { connectionListener.onError(this, ex); } @@ -157,7 +158,7 @@ public class ClientHttpProtocolNegotiato try { failPendingCommands(cause); } finally { - session.shutdown(); + session.shutdown(ShutdownType.IMMEDIATE); } } @@ -206,8 +207,8 @@ public class ClientHttpProtocolNegotiato } @Override - public void shutdown() throws IOException { - ioSession.shutdown(); + public void shutdown(final ShutdownType shutdownType) { + ioSession.shutdown(shutdownType); } } Modified: httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ServerHttpProtocolNegotiator.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ServerHttpProtocolNegotiator.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ServerHttpProtocolNegotiator.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/ServerHttpProtocolNegotiator.java Sat Apr 1 17:11:22 2017 @@ -46,6 +46,7 @@ import org.apache.hc.core5.http2.H2Conne import org.apache.hc.core5.http2.H2Error; import org.apache.hc.core5.http2.config.H2Config; import org.apache.hc.core5.http2.frame.DefaultFrameFactory; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.reactor.IOSession; import org.apache.hc.core5.util.Args; @@ -181,8 +182,8 @@ public class ServerHttpProtocolNegotiato } @Override - public void shutdown() throws IOException { - ioSession.shutdown(); + public void shutdown(final ShutdownType shutdownType) { + ioSession.shutdown(shutdownType); } } Modified: httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/ClassicTestServer.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/ClassicTestServer.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/ClassicTestServer.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/ClassicTestServer.java Sat Apr 1 17:11:22 2017 @@ -43,6 +43,7 @@ import org.apache.hc.core5.http.io.HttpC import org.apache.hc.core5.http.io.HttpExpectationVerifier; import org.apache.hc.core5.http.io.HttpRequestHandler; import org.apache.hc.core5.http.io.UriHttpRequestHandlerMapper; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.util.Asserts; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -117,7 +118,13 @@ public class ClassicTestServer { final HttpServer local = this.server; this.server = null; if (local != null) { - local.shutdown(gracePeriod, timeUnit); + local.initiateShutdown(); + try { + local.awaitTermination(gracePeriod, timeUnit); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + local.shutdown(ShutdownType.IMMEDIATE); } } Modified: httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpClientConnection.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpClientConnection.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpClientConnection.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpClientConnection.java Sat Apr 1 17:11:22 2017 @@ -44,6 +44,7 @@ import org.apache.hc.core5.http.io.HttpM import org.apache.hc.core5.http.io.HttpMessageWriterFactory; import org.apache.hc.core5.http.message.RequestLine; import org.apache.hc.core5.http.message.StatusLine; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.util.Identifiable; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -92,11 +93,11 @@ public class LoggingBHttpClientConnectio } @Override - public void shutdown() throws IOException { + public void shutdown(final ShutdownType shutdownType) { if (this.log.isDebugEnabled()) { this.log.debug(this.id + ": Shutdown connection"); } - super.shutdown(); + super.shutdown(shutdownType); } @Override Modified: httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpServerConnection.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpServerConnection.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpServerConnection.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/classic/LoggingBHttpServerConnection.java Sat Apr 1 17:11:22 2017 @@ -44,6 +44,7 @@ import org.apache.hc.core5.http.io.HttpM import org.apache.hc.core5.http.io.HttpMessageWriterFactory; import org.apache.hc.core5.http.message.RequestLine; import org.apache.hc.core5.http.message.StatusLine; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.util.Identifiable; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -91,11 +92,11 @@ public class LoggingBHttpServerConnectio } @Override - public void shutdown() throws IOException { + public void shutdown(final ShutdownType shutdownType) { if (this.log.isDebugEnabled()) { this.log.debug(this.id + ": Shutdown connection"); } - super.shutdown(); + super.shutdown(shutdownType); } @Override Modified: httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/TestingFramework.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/TestingFramework.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/TestingFramework.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/framework/TestingFramework.java Sat Apr 1 17:11:22 2017 @@ -53,6 +53,7 @@ import org.apache.hc.core5.http.Protocol import org.apache.hc.core5.http.config.SocketConfig; import org.apache.hc.core5.http.impl.bootstrap.HttpServer; import org.apache.hc.core5.http.impl.bootstrap.ServerBootstrap; +import org.apache.hc.core5.io.ShutdownType; public class TestingFramework { /** @@ -243,9 +244,10 @@ public class TestingFramework { } private void stopServer() { - if (server != null) { - server.shutdown(0, TimeUnit.SECONDS); - server = null; + final HttpServer local = this.server; + this.server = null; + if (local != null) { + local.shutdown(ShutdownType.IMMEDIATE); } } Modified: httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOEventHandler.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOEventHandler.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOEventHandler.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOEventHandler.java Sat Apr 1 17:11:22 2017 @@ -33,6 +33,7 @@ import java.net.SocketAddress; import org.apache.hc.core5.http.EndpointDetails; import org.apache.hc.core5.http.ProtocolVersion; import org.apache.hc.core5.http.impl.nio.HttpConnectionEventHandler; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.reactor.IOSession; import org.apache.logging.log4j.Logger; public class LoggingIOEventHandler implements HttpConnectionEventHandler { @@ -143,11 +144,11 @@ public class LoggingIOEventHandler imple } @Override - public void shutdown() throws IOException { + public void shutdown(final ShutdownType shutdownType) { if (log.isDebugEnabled()) { log.debug(id + " shutdown"); } - handler.shutdown(); + handler.shutdown(shutdownType); } } Modified: httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSession.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSession.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSession.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/LoggingIOSession.java Sat Apr 1 17:11:22 2017 @@ -36,6 +36,7 @@ import java.nio.channels.SelectionKey; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.reactor.Command; import org.apache.hc.core5.reactor.IOEventHandler; import org.apache.hc.core5.reactor.IOSession; @@ -166,11 +167,11 @@ public class LoggingIOSession implements } @Override - public void shutdown() { + public void shutdown(final ShutdownType shutdownType) { if (this.log.isDebugEnabled()) { this.log.debug(this.session + " Shutdown"); } - this.session.shutdown(); + this.session.shutdown(shutdownType); } @Override Modified: httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/http/ClientSessionEndpoint.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/http/ClientSessionEndpoint.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/http/ClientSessionEndpoint.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/http/ClientSessionEndpoint.java Sat Apr 1 17:11:22 2017 @@ -27,7 +27,6 @@ package org.apache.hc.core5.testing.nio.http; -import java.io.Closeable; import java.io.IOException; import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicBoolean; @@ -41,9 +40,10 @@ import org.apache.hc.core5.http.nio.Asyn import org.apache.hc.core5.http.nio.AsyncResponseConsumer; import org.apache.hc.core5.http.nio.command.ExecutionCommand; import org.apache.hc.core5.http.nio.command.ShutdownCommand; -import org.apache.hc.core5.http.nio.command.ShutdownType; import org.apache.hc.core5.http.nio.support.BasicClientExchangeHandler; import org.apache.hc.core5.http.protocol.HttpContext; +import org.apache.hc.core5.io.GracefullyCloseable; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.reactor.Command; import org.apache.hc.core5.reactor.IOSession; import org.apache.hc.core5.util.Asserts; @@ -54,7 +54,7 @@ import org.apache.hc.core5.util.Asserts; * @since 5.0 */ @Contract(threading = ThreadingBehavior.SAFE_CONDITIONAL) -public final class ClientSessionEndpoint implements Closeable { +public final class ClientSessionEndpoint implements GracefullyCloseable { private final IOSession ioSession; private final AtomicBoolean closed; @@ -121,9 +121,14 @@ public final class ClientSessionEndpoint return !closed.get() && !ioSession.isClosed(); } - public void shutdown() { + @Override + public void shutdown(final ShutdownType shutdownType) { if (closed.compareAndSet(false, true)) { - ioSession.shutdown(); + if (shutdownType == ShutdownType.GRACEFUL) { + ioSession.addFirst(new ShutdownCommand(ShutdownType.GRACEFUL)); + } else { + ioSession.shutdown(shutdownType); + } } } Modified: httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/http/IOReactorExecutor.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/http/IOReactorExecutor.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/http/IOReactorExecutor.java (original) +++ httpcomponents/httpcore/trunk/httpcore5-testing/src/main/java/org/apache/hc/core5/testing/nio/http/IOReactorExecutor.java Sat Apr 1 17:11:22 2017 @@ -38,7 +38,7 @@ import java.util.concurrent.atomic.Atomi import org.apache.hc.core5.function.Callback; import org.apache.hc.core5.http.ExceptionListener; import org.apache.hc.core5.http.nio.command.ShutdownCommand; -import org.apache.hc.core5.http.nio.command.ShutdownType; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.reactor.AbstractMultiworkerIOReactor; import org.apache.hc.core5.reactor.ExceptionEvent; import org.apache.hc.core5.reactor.IOEventHandlerFactory; @@ -150,24 +150,27 @@ abstract class IOReactorExecutor poolEntry) { - final PoolEntryHolder poolEntryHolder = new PoolEntryHolder<>( - connPool, - poolEntry, - new Callback() { - - @Override - public void execute(final IOSession clientEndpoint) { - clientEndpoint.shutdown(); - } - - }); + final PoolEntryHolder poolEntryHolder = new PoolEntryHolder<>(connPool, poolEntry); final IOSession ioSession = poolEntry.getConnection(); if (ioSession != null && ioSession.isClosed()) { - poolEntry.discardConnection(); + poolEntry.discardConnection(ShutdownType.IMMEDIATE); } if (poolEntry.hasConnection()) { resultFuture.completed(new InternalAsyncClientEndpoint(poolEntryHolder)); Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncServer.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncServer.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncServer.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpAsyncServer.java Sat Apr 1 17:11:22 2017 @@ -31,7 +31,7 @@ import java.io.IOException; import org.apache.hc.core5.function.Callback; import org.apache.hc.core5.http.ExceptionListener; import org.apache.hc.core5.http.nio.command.ShutdownCommand; -import org.apache.hc.core5.http.nio.command.ShutdownType; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.reactor.IOEventHandlerFactory; import org.apache.hc.core5.reactor.IOReactorConfig; import org.apache.hc.core5.reactor.IOReactorException; Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpRequester.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpRequester.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpRequester.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpRequester.java Sat Apr 1 17:11:22 2017 @@ -41,7 +41,6 @@ import java.util.concurrent.TimeoutExcep import javax.net.ssl.SSLSocketFactory; -import org.apache.hc.core5.function.Callback; import org.apache.hc.core5.http.ClassicHttpRequest; import org.apache.hc.core5.http.ClassicHttpResponse; import org.apache.hc.core5.http.ConnectionClosedException; @@ -61,6 +60,8 @@ import org.apache.hc.core5.http.io.entit import org.apache.hc.core5.http.io.entity.HttpEntityWrapper; import org.apache.hc.core5.http.protocol.HttpContext; import org.apache.hc.core5.http.protocol.HttpProcessor; +import org.apache.hc.core5.io.GracefullyCloseable; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.pool.ConnPoolControl; import org.apache.hc.core5.pool.ControlledConnPool; import org.apache.hc.core5.pool.PoolEntry; @@ -69,7 +70,7 @@ import org.apache.hc.core5.util.Args; /** * @since 5.0 */ -public class HttpRequester implements AutoCloseable { +public class HttpRequester implements GracefullyCloseable { private final HttpRequestExecutor requestExecutor; private final HttpProcessor httpProcessor; @@ -132,7 +133,7 @@ public class HttpRequester implements Au } return result; } catch (HttpException | IOException | RuntimeException ex) { - connection.shutdown(); + connection.shutdown(ShutdownType.IMMEDIATE); throw ex; } } @@ -183,19 +184,7 @@ public class HttpRequester implements Au } catch (final TimeoutException ex) { throw new ConnectionRequestTimeoutException("Connection request timeout"); } - final PoolEntryHolder connectionHolder = new PoolEntryHolder<>( - connPool, - poolEntry, - new Callback() { - - @Override - public void execute(final HttpClientConnection conn) { - try { - conn.shutdown(); - } catch (final IOException ignore) { - } - } - }); + final PoolEntryHolder connectionHolder = new PoolEntryHolder<>(connPool, poolEntry); try { HttpClientConnection connection = poolEntry.getConnection(); if (connection == null) { @@ -308,12 +297,13 @@ public class HttpRequester implements Au return connPool; } - public void shutdown() { - connPool.shutdown(); + @Override + public void shutdown(final ShutdownType shutdownType) { + connPool.shutdown(shutdownType); } @Override - public void close() throws Exception { + public void close() throws IOException { connPool.close(); } Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/HttpServer.java Sat Apr 1 17:11:22 2017 @@ -44,11 +44,13 @@ import org.apache.hc.core5.http.impl.io. import org.apache.hc.core5.http.impl.io.HttpService; import org.apache.hc.core5.http.io.HttpConnectionFactory; import org.apache.hc.core5.http.io.HttpServerConnection; +import org.apache.hc.core5.io.GracefullyCloseable; +import org.apache.hc.core5.io.ShutdownType; /** * @since 4.4 */ -public class HttpServer implements AutoCloseable { +public class HttpServer implements GracefullyCloseable { enum Status { READY, ACTIVE, STOPPING } @@ -137,7 +139,7 @@ public class HttpServer implements AutoC public void stop() { if (this.status.compareAndSet(Status.ACTIVE, Status.STOPPING)) { - this.listenerExecutorService.shutdown(); + this.listenerExecutorService.shutdownNow(); this.workerExecutorService.shutdown(); final RequestListener local = this.requestListener; if (local != null) { @@ -151,15 +153,20 @@ public class HttpServer implements AutoC } } + public void initiateShutdown() { + stop(); + } + public void awaitTermination(final long timeout, final TimeUnit timeUnit) throws InterruptedException { this.workerExecutorService.awaitTermination(timeout, timeUnit); } - public void shutdown(final long gracePeriod, final TimeUnit timeUnit) { - stop(); - if (gracePeriod > 0) { + @Override + public void shutdown(final ShutdownType shutdownType) { + initiateShutdown(); + if (shutdownType == ShutdownType.GRACEFUL) { try { - awaitTermination(gracePeriod, timeUnit); + awaitTermination(2, TimeUnit.SECONDS); } catch (final InterruptedException ex) { Thread.currentThread().interrupt(); } @@ -167,17 +174,13 @@ public class HttpServer implements AutoC final Set workers = this.workerExecutorService.getWorkers(); for (final Worker worker: workers) { final HttpServerConnection conn = worker.getConnection(); - try { - conn.shutdown(); - } catch (final IOException ex) { - this.exceptionListener.onError(ex); - } + conn.shutdown(ShutdownType.GRACEFUL); } } @Override - public void close() throws Exception { - shutdown(5, TimeUnit.SECONDS); + public void close() { + shutdown(ShutdownType.GRACEFUL); } } Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/IOReactorExecutor.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/IOReactorExecutor.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/IOReactorExecutor.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/IOReactorExecutor.java Sat Apr 1 17:11:22 2017 @@ -35,11 +35,13 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; import org.apache.hc.core5.http.ExceptionListener; +import org.apache.hc.core5.io.GracefullyCloseable; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.reactor.AbstractMultiworkerIOReactor; import org.apache.hc.core5.reactor.ExceptionEvent; import org.apache.hc.core5.reactor.IOReactorStatus; -abstract class IOReactorExecutor implements AutoCloseable { +abstract class IOReactorExecutor implements GracefullyCloseable { enum Status { READY, RUNNING, TERMINATED } @@ -97,14 +99,14 @@ abstract class IOReactorExecutor { +final class PoolEntryHolder { private final ConnPool connPool; - private final Callback shutdownCallback; private final AtomicBoolean reusable; private final AtomicReference> poolEntryRef; public PoolEntryHolder( final ConnPool connPool, - final PoolEntry poolEntry, - final Callback shutdownCallback) { + final PoolEntry poolEntry) { this.connPool = connPool; this.poolEntryRef = new AtomicReference<>(poolEntry); - this.shutdownCallback = shutdownCallback; this.reusable = new AtomicBoolean(false); } @@ -77,7 +74,7 @@ final class PoolEntryHolder poolEntry = poolEntryRef.getAndSet(null); if (poolEntry != null) { - poolEntry.discardConnection(shutdownCallback); + poolEntry.discardConnection(ShutdownType.IMMEDIATE); connPool.release(poolEntry, false); } } Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/Worker.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/Worker.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/Worker.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/bootstrap/Worker.java Sat Apr 1 17:11:22 2017 @@ -26,13 +26,12 @@ */ package org.apache.hc.core5.http.impl.bootstrap; -import java.io.IOException; - import org.apache.hc.core5.http.ExceptionListener; import org.apache.hc.core5.http.impl.io.HttpService; import org.apache.hc.core5.http.io.HttpServerConnection; import org.apache.hc.core5.http.protocol.BasicHttpContext; import org.apache.hc.core5.http.protocol.HttpCoreContext; +import org.apache.hc.core5.io.ShutdownType; /** * @since 4.4 @@ -70,11 +69,7 @@ class Worker implements Runnable { } catch (final Exception ex) { this.exceptionListener.onError(ex); } finally { - try { - this.conn.shutdown(); - } catch (final IOException ex) { - this.exceptionListener.onError(ex); - } + this.conn.shutdown(ShutdownType.IMMEDIATE); } } Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/BHttpConnectionBase.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/BHttpConnectionBase.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/BHttpConnectionBase.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/BHttpConnectionBase.java Sat Apr 1 17:11:22 2017 @@ -55,6 +55,7 @@ import org.apache.hc.core5.http.impl.Bas import org.apache.hc.core5.http.io.BHttpConnection; import org.apache.hc.core5.http.io.SessionInputBuffer; import org.apache.hc.core5.http.io.SessionOutputBuffer; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.net.InetAddressUtils; import org.apache.hc.core5.util.Args; @@ -212,13 +213,21 @@ class BHttpConnectionBase implements BHt } @Override - public void shutdown() throws IOException { + public void shutdown(final ShutdownType shutdownType) { final SocketHolder socketHolder = this.socketHolderRef.getAndSet(null); if (socketHolder != null) { - // force abortive close (RST) - try (final Socket socket = socketHolder.getSocket()) { - socket.setSoLinger(true, 0); - } catch (final IOException ex) { + final Socket socket = socketHolder.getSocket(); + try { + if (shutdownType == ShutdownType.IMMEDIATE) { + // force abortive close (RST) + socket.setSoLinger(true, 0); + } + } catch (final IOException ignore) { + } finally { + try { + socket.close(); + } catch (IOException ignore) { + } } } } Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1IOEventHandler.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1IOEventHandler.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1IOEventHandler.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1IOEventHandler.java Sat Apr 1 17:11:22 2017 @@ -32,6 +32,7 @@ import java.net.SocketAddress; import org.apache.hc.core5.http.EndpointDetails; import org.apache.hc.core5.http.ProtocolVersion; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.reactor.IOSession; import org.apache.hc.core5.util.Args; @@ -95,8 +96,8 @@ class AbstractHttp1IOEventHandler implem } @Override - public void shutdown() throws IOException { - streamDuplexer.shutdown(); + public void shutdown(final ShutdownType shutdownType) { + streamDuplexer.shutdown(shutdownType); } @Override Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1StreamDuplexer.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1StreamDuplexer.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1StreamDuplexer.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1StreamDuplexer.java Sat Apr 1 17:11:22 2017 @@ -66,7 +66,7 @@ import org.apache.hc.core5.http.nio.Sess import org.apache.hc.core5.http.nio.SessionOutputBuffer; import org.apache.hc.core5.http.nio.command.ExecutionCommand; import org.apache.hc.core5.http.nio.command.ShutdownCommand; -import org.apache.hc.core5.http.nio.command.ShutdownType; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.net.InetAddressUtils; import org.apache.hc.core5.reactor.Command; import org.apache.hc.core5.reactor.EventMask; @@ -128,7 +128,7 @@ abstract class AbstractHttp1StreamDuplex this.connState = ConnectionState.READY; } - void doTerminate(final Exception exception) { + void doTerminate(final Exception exception) throws IOException { connState = ConnectionState.SHUTDOWN; try { terminate(exception); @@ -332,10 +332,16 @@ abstract class AbstractHttp1StreamDuplex } public final void onException(final Exception ex) { - doTerminate(ex); if (connectionListener != null) { connectionListener.onError(this, ex); } + try { + doTerminate(ex); + } catch (IOException ex2) { + if (connectionListener != null) { + connectionListener.onError(this, ex2); + } + } } public final void onDisconnect() { @@ -472,8 +478,8 @@ abstract class AbstractHttp1StreamDuplex } @Override - public void shutdown() throws IOException { - ioSession.addFirst(new ShutdownCommand(ShutdownType.IMMEDIATE)); + public void shutdown(final ShutdownType shutdownType) { + ioSession.addFirst(new ShutdownCommand(shutdownType)); } @Override Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1StreamDuplexer.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1StreamDuplexer.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1StreamDuplexer.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ClientHttp1StreamDuplexer.java Sat Apr 1 17:11:22 2017 @@ -60,7 +60,7 @@ import org.apache.hc.core5.http.nio.NHtt import org.apache.hc.core5.http.nio.SessionInputBuffer; import org.apache.hc.core5.http.nio.SessionOutputBuffer; import org.apache.hc.core5.http.nio.command.ExecutionCommand; -import org.apache.hc.core5.http.nio.command.ShutdownType; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.http.protocol.HttpCoreContext; import org.apache.hc.core5.http.protocol.HttpProcessor; import org.apache.hc.core5.reactor.IOSession; Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ServerHttp1StreamDuplexer.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ServerHttp1StreamDuplexer.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ServerHttp1StreamDuplexer.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/ServerHttp1StreamDuplexer.java Sat Apr 1 17:11:22 2017 @@ -59,7 +59,7 @@ import org.apache.hc.core5.http.nio.NHtt import org.apache.hc.core5.http.nio.SessionInputBuffer; import org.apache.hc.core5.http.nio.SessionOutputBuffer; import org.apache.hc.core5.http.nio.command.ExecutionCommand; -import org.apache.hc.core5.http.nio.command.ShutdownType; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.http.protocol.HttpCoreContext; import org.apache.hc.core5.http.protocol.HttpProcessor; import org.apache.hc.core5.reactor.IOSession; Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/command/ShutdownCommand.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/command/ShutdownCommand.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/command/ShutdownCommand.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/command/ShutdownCommand.java Sat Apr 1 17:11:22 2017 @@ -27,6 +27,7 @@ package org.apache.hc.core5.http.nio.command; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.reactor.Command; /** Copied: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/io/GracefullyCloseable.java (from r1789821, httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/command/ShutdownType.java) URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/io/GracefullyCloseable.java?p2=httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/io/GracefullyCloseable.java&p1=httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/command/ShutdownType.java&r1=1789821&r2=1789822&rev=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/command/ShutdownType.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/io/GracefullyCloseable.java Sat Apr 1 17:11:22 2017 @@ -25,15 +25,22 @@ * */ -package org.apache.hc.core5.http.nio.command; +package org.apache.hc.core5.io; + +import java.io.Closeable; /** - * Shutdown type. + * Process or endpoint that can be gracefully closed. * * @since 5.0 */ -public enum ShutdownType { +public interface GracefullyCloseable extends Closeable { - IMMEDIATE, GRACEFUL + /** + * Closes this endpoint and releases any system resources associated + * with it. If the endpoint is already closed then invoking this + * method has no effect. + */ + void shutdown(ShutdownType shutdownType); } Copied: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/io/ShutdownType.java (from r1789821, httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/command/ShutdownType.java) URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/io/ShutdownType.java?p2=httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/io/ShutdownType.java&p1=httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/command/ShutdownType.java&r1=1789821&r2=1789822&rev=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/command/ShutdownType.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/io/ShutdownType.java Sat Apr 1 17:11:22 2017 @@ -25,7 +25,7 @@ * */ -package org.apache.hc.core5.http.nio.command; +package org.apache.hc.core5.io; /** * Shutdown type. Propchange: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/io/ShutdownType.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/io/ShutdownType.java ------------------------------------------------------------------------------ svn:keywords = Date Revision Propchange: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/io/ShutdownType.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/ConnPool.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/ConnPool.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/ConnPool.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/ConnPool.java Sat Apr 1 17:11:22 2017 @@ -26,10 +26,10 @@ */ package org.apache.hc.core5.pool; -import java.io.Closeable; import java.util.concurrent.Future; import org.apache.hc.core5.concurrent.FutureCallback; +import org.apache.hc.core5.io.GracefullyCloseable; /** * {@code ConnPool} represents a shared pool connections can be leased from @@ -40,7 +40,7 @@ import org.apache.hc.core5.concurrent.Fu * @param the type of pooled connections. * @since 4.2 */ -public interface ConnPool { +public interface ConnPool { /** * Attempts to lease a connection for the given route and with the given Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/ControlledConnPool.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/ControlledConnPool.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/ControlledConnPool.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/ControlledConnPool.java Sat Apr 1 17:11:22 2017 @@ -26,7 +26,7 @@ */ package org.apache.hc.core5.pool; -import java.io.Closeable; +import org.apache.hc.core5.io.GracefullyCloseable; /** * {@link ConnPool} that also implements {@link ConnPoolControl} and {@link AutoCloseable}. @@ -36,8 +36,6 @@ import java.io.Closeable; * @param the type of pooled connections. * @since 4.2 */ -public interface ControlledConnPool extends ConnPool, ConnPoolControl, AutoCloseable { - - void shutdown(); +public interface ControlledConnPool extends ConnPool, ConnPoolControl, GracefullyCloseable { } Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/LeaseRequest.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/LeaseRequest.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/LeaseRequest.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/LeaseRequest.java Sat Apr 1 17:11:22 2017 @@ -26,15 +26,15 @@ */ package org.apache.hc.core5.pool; -import java.io.Closeable; import java.util.concurrent.atomic.AtomicBoolean; import org.apache.hc.core5.annotation.Contract; import org.apache.hc.core5.annotation.ThreadingBehavior; import org.apache.hc.core5.concurrent.BasicFuture; +import org.apache.hc.core5.io.GracefullyCloseable; @Contract(threading = ThreadingBehavior.SAFE_CONDITIONAL) -class LeaseRequest { +class LeaseRequest { private final T route; private final Object state; Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/PoolEntry.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/PoolEntry.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/PoolEntry.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/PoolEntry.java Sat Apr 1 17:11:22 2017 @@ -28,12 +28,11 @@ package org.apache.hc.core5.pool; import static java.lang.System.currentTimeMillis; -import java.io.Closeable; -import java.io.IOException; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; -import org.apache.hc.core5.function.Callback; +import org.apache.hc.core5.io.GracefullyCloseable; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.util.Args; /** @@ -48,7 +47,7 @@ import org.apache.hc.core5.util.Args; * @param the connection type. * @since 4.2 */ -public final class PoolEntry { +public final class PoolEntry { private final T route; private final long timeToLive; @@ -138,33 +137,19 @@ public final class PoolEntry shutdownCallback) { + public void discardConnection(final ShutdownType shutdownType) { final C connection = this.connRef.getAndSet(null); if (connection != null) { - if (shutdownCallback != null) { - shutdownCallback.execute(connection); - } else { - try { - connection.close(); - } catch (final IOException ignore) { - } - } this.state = null; this.created = 0; this.updated = 0; this.expiry = 0; this.validityDeadline = 0; + connection.shutdown(shutdownType); } } /** - * @since 5.0 - */ - public void discardConnection() { - discardConnection(null); - } - - /** * @since 5.0 */ public void updateExpiry(final long keepAlive, final TimeUnit timeUnit) { Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/RoutePool.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/RoutePool.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/RoutePool.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/RoutePool.java Sat Apr 1 17:11:22 2017 @@ -26,17 +26,18 @@ */ package org.apache.hc.core5.pool; -import java.io.Closeable; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.Set; import java.util.concurrent.TimeUnit; +import org.apache.hc.core5.io.GracefullyCloseable; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.util.Args; import org.apache.hc.core5.util.Asserts; -final class RoutePool { +final class RoutePool { private final T route; private final Set> leased; @@ -121,13 +122,13 @@ final class RoutePool entry: this.available) { - entry.discardConnection(); + entry.discardConnection(shutdownType); } this.available.clear(); for (final PoolEntry entry: this.leased) { - entry.discardConnection(); + entry.discardConnection(shutdownType); } this.leased.clear(); } Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java?rev=1789822&r1=1789821&r2=1789822&view=diff ============================================================================== --- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java (original) +++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/pool/StrictConnPool.java Sat Apr 1 17:11:22 2017 @@ -26,7 +26,6 @@ */ package org.apache.hc.core5.pool; -import java.io.Closeable; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -47,6 +46,8 @@ import org.apache.hc.core5.annotation.Th import org.apache.hc.core5.concurrent.BasicFuture; import org.apache.hc.core5.concurrent.FutureCallback; import org.apache.hc.core5.function.Callback; +import org.apache.hc.core5.io.GracefullyCloseable; +import org.apache.hc.core5.io.ShutdownType; import org.apache.hc.core5.util.Args; import org.apache.hc.core5.util.Asserts; import org.apache.hc.core5.util.LangUtils; @@ -60,7 +61,7 @@ import org.apache.hc.core5.util.LangUtil * @since 4.2 */ @Contract(threading = ThreadingBehavior.SAFE_CONDITIONAL) -public class StrictConnPool implements ControlledConnPool { +public class StrictConnPool implements ControlledConnPool { private final long timeToLive; private final TimeUnit timeUnit; @@ -116,13 +117,13 @@ public class StrictConnPool pool: this.routeToPool.values()) { - pool.shutdown(); + pool.shutdown(shutdownType); } this.routeToPool.clear(); this.leased.clear(); @@ -135,8 +136,8 @@ public class StrictConnPool getPool(final T route) { @@ -191,7 +192,7 @@ public class StrictConnPool freeCapacity - 1) { if (!this.available.isEmpty()) { final PoolEntry lastUsed = this.available.removeLast(); - lastUsed.discardConnection(); + lastUsed.discardConnection(ShutdownType.GRACEFUL); final RoutePool otherpool = getPool(lastUsed.getRoute()); otherpool.remove(lastUsed); } @@ -583,7 +584,7 @@ public class StrictConnPool entry) { if (entry.getUpdated() <= deadline) { - entry.discardConnection(); + entry.discardConnection(ShutdownType.GRACEFUL); } } @@ -598,7 +599,7 @@ public class StrictConnPool entry) { if (entry.getExpiry() < now) { - entry.discardConnection(); + entry.discardConnection(ShutdownType.GRACEFUL); } }