I realize this is probably a Jetty question and the answer isn't
Dropwizard-specific, but I'm hoping someone on this list can and won't mind
answering it for me regardless...
What does an http connector's idleTimeout do? I thought I understood the
documentation, but I'm not seeing the behavior I expected from a simple
test. I enabled some debug logging and see that Jetty is deciding to ignore
the timeout when it expires.
I'm using Dropwizard 0.9.2. Here's my config:
server:
applicationConnectors:
- type: http
port: 8700
idleTimeout: 1 second
adminConnectors:
- type: http
port: 8701
logging:
loggers:
"org.eclipse.jetty.io.IdleTimeout": DEBUG
"org.eclipse.jetty.io.AbstractEndPoint": DEBUG
"org.eclipse.jetty.io.SelectChannelEndPoint": DEBUG
Here's the resource I'm testing with (this is Groovy):
@Path("/sleep")
class SleepResource {
private AtomicInteger count = new AtomicInteger(1)
@GET
@Path('/{duration}')
@CacheControl(noStore = true)
String test(@PathParam('duration') Long durationSeconds) {
def duration = Duration.seconds(durationSeconds)
println "sleeping for ${duration} ${count.getAndIncrement()}"
sleep(duration.toMilliseconds())
return "done sleeping for ${duration}!"
}
}
And my request:
➜ ~ curl -X GET http://localhost:8700/sleep/60
done sleeping for 60 seconds!
The following is logged repeatedly during the sleep, apparently once per
second:
DEBUG [2016-05-10 14:12:25,686] org.eclipse.jetty.io.IdleTimeout:
SelectChannelEndPoint@7323a6aa{/0:0:0:0:0:0:0:1:52049<->8700,Open,in,out,-,-,1005/1000,HttpConnection}{io=0,kio=0,kro=1}
idle timeout check, elapsed: 1005 ms, remaining: -5 ms
DEBUG [2016-05-10 14:12:25,686] org.eclipse.jetty.io.IdleTimeout:
SelectChannelEndPoint@7323a6aa{/0:0:0:0:0:0:0:1:52049<->8700,Open,in,out,-,-,1005/1000,HttpConnection}{io=0,kio=0,kro=1}
idle timeout expired
DEBUG [2016-05-10 14:12:25,686] org.eclipse.jetty.io.AbstractEndPoint:
Ignored idle endpoint
SelectChannelEndPoint@7323a6aa{/0:0:0:0:0:0:0:1:52049<->8700,Open,in,out,-,-,1005/1000,HttpConnection}{io=0,kio=0,kro=1}
Given the fact that my resource method didn't write anything to the
connection while it was sleeping, I expected the idleTimeout to kick in
somehow...with a closed connection, a 5xx response, or something similar.
But clearly Jetty is deciding to ignore the timeout. Why? And when wouldn't
it do so?
Thanks,
Matt
--
You received this message because you are subscribed to the Google Groups
"dropwizard-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.