From bffd6a2c0ff4aa72e3dbbd845ec3ed522bff7f35 Mon Sep 17 00:00:00 2001 From: Oleg Mozzhechkov Date: Thu, 13 Aug 2020 16:34:06 +0300 Subject: [PATCH 1/2] #5150 - Infinite connection timeout support in ManagedSelector Signed-off-by: Oleg Mozzhechkov --- .../main/java/org/eclipse/jetty/io/ManagedSelector.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java b/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java index 960ccc66717..e57d74e002b 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java @@ -888,7 +888,11 @@ public class ManagedSelector extends ContainerLifeCycle implements Dumpable { this.channel = channel; this.attachment = attachment; - this.timeout = ManagedSelector.this._selectorManager.getScheduler().schedule(this, ManagedSelector.this._selectorManager.getConnectTimeout(), TimeUnit.MILLISECONDS); + final long timeout = ManagedSelector.this._selectorManager.getConnectTimeout(); + if (timeout > 0) + this.timeout = ManagedSelector.this._selectorManager.getScheduler().schedule(this, timeout, TimeUnit.MILLISECONDS); + else + this.timeout = null; } @Override @@ -919,7 +923,8 @@ public class ManagedSelector extends ContainerLifeCycle implements Dumpable { if (failed.compareAndSet(false, true)) { - timeout.cancel(); + if (timeout != null) + timeout.cancel(); IO.close(channel); ManagedSelector.this._selectorManager.connectionFailed(channel, failure, attachment); } From 32fe19a5e090c0ee46e112fc2a48a9bf48c3d529 Mon Sep 17 00:00:00 2001 From: Oleg Mozzhechkov Date: Thu, 13 Aug 2020 21:15:30 +0300 Subject: [PATCH 2/2] #5150 - Code style fix and connect timeout docs update Signed-off-by: Oleg Mozzhechkov --- .../src/main/java/org/eclipse/jetty/client/HttpClient.java | 4 ++-- .../src/main/java/org/eclipse/jetty/io/ManagedSelector.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java index 7a5903a46ee..942bf7a683e 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpClient.java @@ -690,7 +690,7 @@ public class HttpClient extends ContainerLifeCycle } /** - * @return the max time, in milliseconds, a connection can take to connect to destinations + * @return the max time, in milliseconds, a connection can take to connect to destinations. Zero value means infinite timeout. */ @ManagedAttribute("The timeout, in milliseconds, for connect() operations") public long getConnectTimeout() @@ -699,7 +699,7 @@ public class HttpClient extends ContainerLifeCycle } /** - * @param connectTimeout the max time, in milliseconds, a connection can take to connect to destinations + * @param connectTimeout the max time, in milliseconds, a connection can take to connect to destinations. Zero value means infinite timeout. * @see java.net.Socket#connect(SocketAddress, int) */ public void setConnectTimeout(long connectTimeout) diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java b/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java index e57d74e002b..9ba92720b73 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java @@ -888,7 +888,7 @@ public class ManagedSelector extends ContainerLifeCycle implements Dumpable { this.channel = channel; this.attachment = attachment; - final long timeout = ManagedSelector.this._selectorManager.getConnectTimeout(); + long timeout = ManagedSelector.this._selectorManager.getConnectTimeout(); if (timeout > 0) this.timeout = ManagedSelector.this._selectorManager.getScheduler().schedule(this, timeout, TimeUnit.MILLISECONDS); else