Skip to content

Commit dcbe704

Browse files
authored
Properly handle HTTP/2 idle timeout (#11726)
Match behavior of HTTP/1 PipeliningServerHandler. I tried making a test, but IdleStateHandler does not have a hook for time, so it's not possible without extending test runtime further than I want.
1 parent 1f609a5 commit dcbe704

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

http-server-netty/src/main/java/io/micronaut/http/server/netty/handler/Http2ServerHandler.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
import io.micronaut.core.annotation.Internal;
1919
import io.micronaut.core.annotation.Nullable;
2020
import io.micronaut.http.body.ByteBody;
21-
import io.micronaut.http.server.netty.HttpCompressionStrategy;
2221
import io.micronaut.http.netty.body.BodySizeLimits;
22+
import io.micronaut.http.server.netty.HttpCompressionStrategy;
2323
import io.micronaut.http.server.netty.handler.accesslog.Http2AccessLogConnectionEncoder;
2424
import io.micronaut.http.server.netty.handler.accesslog.Http2AccessLogFrameListener;
2525
import io.micronaut.http.server.netty.handler.accesslog.Http2AccessLogManager;
@@ -45,6 +45,8 @@
4545
import io.netty.handler.codec.http2.Http2Headers;
4646
import io.netty.handler.codec.http2.Http2Settings;
4747
import io.netty.handler.codec.http2.HttpConversionUtil;
48+
import io.netty.handler.timeout.IdleState;
49+
import io.netty.handler.timeout.IdleStateEvent;
4850

4951
import java.nio.channels.ClosedChannelException;
5052
import java.util.EnumMap;
@@ -251,6 +253,10 @@ public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exc
251253
}
252254
io.netty.handler.codec.http2.Http2Stream cs = connection().stream(1);
253255
handleFakeRequest(cs, fhr);
256+
} else if (evt instanceof IdleStateEvent idle) {
257+
if (idle.state() == IdleState.ALL_IDLE) {
258+
ctx.close();
259+
}
254260
}
255261
super.userEventTriggered(ctx, evt);
256262
}

0 commit comments

Comments
 (0)