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 2026/09/29 19:01:34 UTC
(httpcomponents-core) 03/03: Added #isIdle method to async HTTP/1.1 and HTTP/2 protocol handlers to test if there are ongoing messages exchanges or the handlers can be considered idle
This is an automated email from the ASF dual-hosted git repository.
ok2c pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/httpcomponents-core.git
commit c0363887e166e7ba959a929dafa2d875f29eb117
Author: Oleg Kalnichevski <ol...@apache.org>
AuthorDate: Tue Sep 29 15:52:40 2026 +0200
Added #isIdle method to async HTTP/1.1 and HTTP/2 protocol handlers to test if there are ongoing messages exchanges or the handlers can be considered idle
---
.../hc/core5/http2/impl/nio/AbstractH2IOEventHandler.java | 5 +++++
.../hc/core5/http2/impl/nio/AbstractH2StreamMultiplexer.java | 11 +++++++++--
.../java/org/apache/hc/core5/http2/impl/nio/H2Streams.java | 4 ++++
.../hc/core5/http/impl/nio/AbstractHttp1IOEventHandler.java | 5 +++++
.../hc/core5/http/impl/nio/HttpConnectionEventHandler.java | 8 ++++++++
5 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2IOEventHandler.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2IOEventHandler.java
index 9dcd38e39..d97c08428 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2IOEventHandler.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2IOEventHandler.java
@@ -86,6 +86,11 @@ public void timeout(final IOSession session, final Timeout timeout) throws IOExc
}
}
+ @Override
+ public boolean isIdle() {
+ return streamMultiplexer.streamCount() > 0;
+ }
+
@Override
public void exception(final IOSession session, final Exception cause) {
streamMultiplexer.onException(cause);
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2StreamMultiplexer.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2StreamMultiplexer.java
index dadbf2799..53d200c29 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2StreamMultiplexer.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/AbstractH2StreamMultiplexer.java
@@ -37,8 +37,8 @@
import java.util.List;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedDeque;
-import java.util.concurrent.TimeUnit;
import java.util.concurrent.ConcurrentLinkedQueue;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
@@ -1381,6 +1381,13 @@ private void applyLocalSettings() throws H2ConnectionException {
lowMark = initInputWinSize / 2;
}
+ /**
+ * @since 5.5
+ */
+ public int streamCount() {
+ return streams.getCount();
+ }
+
@Override
public void close() throws IOException {
ioSession.enqueue(ShutdownCommand.GRACEFUL, Command.Priority.IMMEDIATE);
@@ -1444,7 +1451,7 @@ void appendState(final StringBuilder buf) {
.append(", connInputWindow=").append(connInputWindow)
.append(", connOutputWindow=").append(connOutputWindow)
.append(", outputQueue=").append(outputQueue.size())
- .append(", streams.localCoubt=").append(streams.getLocalCount())
+ .append(", streams.localCount=").append(streams.getLocalCount())
.append(", streams.remoteCount=").append(streams.getRemoteCount())
.append(", streams.lastLocal=").append(streams.getLastLocalId())
.append(", streams.lastRemote=").append(streams.getLastRemoteId());
diff --git a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/H2Streams.java b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/H2Streams.java
index 4882295cc..09847a7d0 100644
--- a/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/H2Streams.java
+++ b/httpcore5-h2/src/main/java/org/apache/hc/core5/http2/impl/nio/H2Streams.java
@@ -66,6 +66,10 @@ public boolean isEmpty() {
return streams.isEmpty();
}
+ public int getCount() {
+ return streams.size();
+ }
+
public Iterator<H2Stream> iterator() {
return streams.iterator();
}
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1IOEventHandler.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1IOEventHandler.java
index 8f89d8020..c3a3c40e0 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1IOEventHandler.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/AbstractHttp1IOEventHandler.java
@@ -85,6 +85,11 @@ public void timeout(final IOSession session, final Timeout timeout) throws IOExc
}
}
+ @Override
+ public boolean isIdle() {
+ return streamDuplexer.inputIdle() && streamDuplexer.outputIdle();
+ }
+
@Override
public void exception(final IOSession session, final Exception cause) {
streamDuplexer.onException(cause);
diff --git a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/HttpConnectionEventHandler.java b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/HttpConnectionEventHandler.java
index e378781e0..0eb7c8bd8 100644
--- a/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/HttpConnectionEventHandler.java
+++ b/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/HttpConnectionEventHandler.java
@@ -37,4 +37,12 @@
*/
@Internal
public interface HttpConnectionEventHandler extends IOEventHandler, HttpConnection {
+
+ /**
+ * @since 5.5
+ */
+ default boolean isIdle() {
+ return false;
+ }
+
}