Hi,
The Spring Boot team has pinged me regarding this issue:
https://github.com/spring-projects/spring-boot/issues/29266
I've done some debugging and what it comes down is that when a
Connector/Endpoint is paused, we also pause checking the async timeout
for requests associated with that Connector/Endpoint.
The code has been like this since it was first implemented some 12 years
ago.
I am wondering if this makes sense. I've always thought of "pause" as
pausing new incoming connections, disabling keep-alive (i.e. existing
connections terminate when the current request completes) and disabling
new streams on multiplexed connections but that existing requests would
continue.
Is my understanding / expectation of pause (and resume) correct?
Looking at the code there are a few things happening when a connection
is paused that don't immediately make sense to me.
Assuming my understanding/expectation is correct then I'm thinking of a
patch (or possible patches) along the following lines:
- keep the async timeout task active when the associated
connector/endpoint is paused
- don't pause sendfile when the associated connector/endpoint is paused
- continue to return recycled objects to caches when the associated
connector/endpoint is paused
- review use of SocketWrapperBase.getSocket().free() to ensure it is
called when necessary - for example the embedded case where a
connector is repeatedly started and stopped. This may be a separate
patch as it isn't really related to the original issue.
Thoughts?
Mark
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org