From 0c2a91db07a72804a8fc65a527edae62a87cafbf Mon Sep 17 00:00:00 2001 From: Simone Bordet Date: Mon, 1 Jun 2020 12:04:42 +0200 Subject: [PATCH] Fixes #4904 - WebsocketClient creates more connections than needed. Updates after review. Signed-off-by: Simone Bordet --- .../java/org/eclipse/jetty/client/HttpDestination.java | 5 +++++ .../org/eclipse/jetty/client/RoundRobinConnectionPool.java | 7 +++++++ .../eclipse/jetty/client/http/HttpConnectionOverHTTP.java | 2 +- .../jetty/fcgi/client/http/HttpConnectionOverFCGI.java | 2 +- .../jetty/http2/client/http/HttpConnectionOverHTTP2.java | 2 +- 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpDestination.java b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpDestination.java index 1dee3b576904..a2768d841ce5 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpDestination.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpDestination.java @@ -475,6 +475,11 @@ else if (removed) return removed; } + /** + * @param connection the connection to remove + * @deprecated use {@link #remove(Connection)} instead + */ + @Deprecated public void close(Connection connection) { remove(connection); diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/RoundRobinConnectionPool.java b/jetty-client/src/main/java/org/eclipse/jetty/client/RoundRobinConnectionPool.java index dfcc8a34552b..1a9564b2af7b 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/RoundRobinConnectionPool.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/RoundRobinConnectionPool.java @@ -69,6 +69,13 @@ public void setMaxMultiplex(int maxMultiplex) } } + /** + *

Returns an idle connection, if available, following a round robin algorithm; + * otherwise it always tries to create a new connection, up until the max connection count.

+ * + * @param create this parameter is ignored and assumed to be always {@code true} + * @return an idle connection or {@code null} if no idle connections are available + */ @Override protected Connection acquire(boolean create) { diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpConnectionOverHTTP.java b/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpConnectionOverHTTP.java index 31aff168e3e4..c0e02dfaa632 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpConnectionOverHTTP.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpConnectionOverHTTP.java @@ -180,7 +180,7 @@ protected void close(Throwable failure) { if (closed.compareAndSet(false, true)) { - getHttpDestination().close(this); + getHttpDestination().remove(this); abort(failure); channel.destroy(); getEndPoint().shutdownOutput(); diff --git a/jetty-fcgi/fcgi-client/src/main/java/org/eclipse/jetty/fcgi/client/http/HttpConnectionOverFCGI.java b/jetty-fcgi/fcgi-client/src/main/java/org/eclipse/jetty/fcgi/client/http/HttpConnectionOverFCGI.java index 2adc10c67123..52a0916936d9 100644 --- a/jetty-fcgi/fcgi-client/src/main/java/org/eclipse/jetty/fcgi/client/http/HttpConnectionOverFCGI.java +++ b/jetty-fcgi/fcgi-client/src/main/java/org/eclipse/jetty/fcgi/client/http/HttpConnectionOverFCGI.java @@ -248,7 +248,7 @@ protected void close(Throwable failure) { if (closed.compareAndSet(false, true)) { - getHttpDestination().close(this); + getHttpDestination().remove(this); abort(failure); diff --git a/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpConnectionOverHTTP2.java b/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpConnectionOverHTTP2.java index c8f99648517d..2258aea802ec 100644 --- a/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpConnectionOverHTTP2.java +++ b/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpConnectionOverHTTP2.java @@ -148,7 +148,7 @@ protected void close(Throwable failure) { if (closed.compareAndSet(false, true)) { - getHttpDestination().close(this); + getHttpDestination().remove(this); abort(failure);