Hi Mark,

ahh missed that - I just tried, you are right, it seems to give exactly
what we want... closing connections on next incoming request when possible
and otherwise waiting for the shutdown to complete. Thanks a lot and have a
nice weekend.

- M



Den fre. 18. nov. 2022 kl. 18.49 skrev Mark Thomas <ma...@apache.org>:

> On 18/11/2022 17:40, M. Thiim wrote:
> > Hi Mark, sorry I'm not sure what you mean by "read the rest of the
> > thread"... My "I just tried this..." was in response to your suggestion
> of
> > using the bindOnInit and gracefulStopAwaitMillis parameters. Thx!
>
> The behaviour you describe is consistent with bindOnInit="true". It
> needs to be false for this to work.
>
> Mark
>
>
> >
> >
> >
> > Den fre. 18. nov. 2022 kl. 18.35 skrev Mark Thomas <ma...@apache.org>:
> >
> >> Please read the rest of the thread.
> >>
> >> On 18/11/2022 17:24, M. Thiim wrote:
> >>> Hi Mark,
> >>>
> >>> thanks, I just tried this. It does cause the server to insert a 20
> second
> >>> delay on shutdown and I get this message in the log:
> >>>
> >>> 18-Nov-2022 18:16:29.777 INFO [main]
> >>> org.apache.coyote.AbstractProtocol.awaitConnectionsClose Waiting
> [20,000]
> >>> milliseconds for existing connections to ["http-nio-8080"] to complete
> >> and
> >>> close.
> >>>
> >>> The server keeps responding to further requests on the
> >>> established connections, but it also sends back headers as if in
> >>> non-shutdown mode:
> >>>
> >>> Keep-Alive: timeout=20
> >>> Connection: keep-alive
> >>>
> >>> Thereby informing the client of the full 20 sec. keepalive timeout,
> >> making
> >>> it think it can keep using the connection - so the client ends up
> getting
> >>> the same error just with a 20 second delay... In fact, the server even
> >>> accepts completely new connections during the graceful shutdown period
> >>> period.
> >>>
> >>> Br, M. Thiim
> >>>
> >>> Den fre. 18. nov. 2022 kl. 14.34 skrev Mark Thomas <ma...@apache.org>:
> >>>
> >>>> On 17/11/2022 19:39, M. Thiim wrote:
> >>>>> Hi,
> >>>>>
> >>>>> We have observed that Tomcat doesn't gracefully close
> >>>>> keep-alive connections. Tomcat waits for already started requests to
> >>>>> complete, but once those are done, Tomcat will close all connections
> >>>>> immediately, irrespective of any configured keepAliveTimeout. This
> >> causes
> >>>>> problems for some HTTP clients, especially in Kubernetes-like
> >>>> environments
> >>>>> when scaling down pods. Here, it can only work gracefully if the HTTP
> >>>>> client who falls victim to an unexpectedly closed connection retries
> >> on a
> >>>>> fresh connection, and it is not all clients that do this.
> >>>>>
> >>>>> I would think that an entirely graceful shutdown sequence, in the
> >>>> presence
> >>>>> of keep-alive connections, would work like the following:
> >>>>>
> >>>>> 1) Server receives shutdown request
> >>>>> 2) Server immediately stops accepting new connections (already
> happens)
> >>>>> 3) Server completes all requests already in  (already happens)
> >>>>> 4) New behavior: If new requests come in on already established
> >>>> keep-alive
> >>>>> connections those are processed, but a "Connection: close" is
> returned
> >> so
> >>>>> the client knows this connection can no longer be used. So at most
> one
> >>>> more
> >>>>> request can be processed on each of those existing connections.
> >>>>> 5) New behavior: When all keep-alive connections are gone, shutdown
> >>>>> proceeds. If there are still connections left after the
> >> keepAliveTimeout
> >>>>> has passed, this means no requests can have been received on those
> >> during
> >>>>> the shutdown period (otherwise they would have been closed in #4).
> And
> >>>>> since Tomcat returned the keep-alive timeout value to the client when
> >> the
> >>>>> connection was setup, the client should know that the connection is
> no
> >>>>> longer usable. Therefore it is from this point safe for Tomcat to
> close
> >>>>> those remaining connections.
> >>>>> 6) Rest of server shutdown continues
> >>>>
> >>>> Seems a reasonable addition.
> >>>>
> >>>> It looks like extending the behaviour when gracefulStopAwaitMillis is
> >>>> set on the Service would work.
> >>>>
> >>>> gracefulStopAwaitMillis would need to be greater than or equal to the
> >>>> keep-alive timeout but we can document that as part of the patch.
> >>>>
> >>>> Mark
> >>>>
> >>>> ---------------------------------------------------------------------
> >>>> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> >>>> For additional commands, e-mail: dev-h...@tomcat.apache.org
> >>>>
> >>>>
> >>>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> >> For additional commands, e-mail: dev-h...@tomcat.apache.org
> >>
> >>
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: dev-h...@tomcat.apache.org
>
>

Reply via email to