Got a situation where thread hanged on socket read (old school socket
bio code). One side was in TCP established while the other in
fin_wait_2. The customer was "upgrading" the switches at the time this
happened.

The thread will never complete. It should get a timeout exception. But
it doesn't. There is the call to Socket#setSoTimeout in the code. It
should do the job. My first though was there must be a bug in
setSoTimeout. I never had much faith in SoTimeout. Was not surprised
to find a lot of bug reports related to socketRead0 hangs. Reminded me
of this blog post about hanged postgres connection [1].

I'd use nio and app level timeouts. But it is legacy code that I
can't/don't want to touch.

Been thinking of using a custom SocketFactory that wraps the sockets
with some monitoring code. Pretty ugly. It doesn't feel right.

Found quite a few discussions about this. But not really any solutions
that don't require app level changes.

Any thoughts? Anybody in a similar boat?

[1] https://tech.zalando.com/blog/hack-to-terminate-tcp-conn-postgres/

-- 
You received this message because you are subscribed to the Google Groups 
"mechanical-sympathy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mechanical-sympathy+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to