Reel's crash handling seems like it should be working. I've confirmed that the following happens when a Reel::Server crashes:
All outstanding Celluloid tasks are terminated by Celluloid itself. This runs the ensure blocks inside these tasks, which closes the connections to all clients. I've confirmed all of the client sockets are closed and that this approach seems sufficient for terminating client connections no crash.
The Reel::Server finalizer runs, closing Reel's Celluloid::IO::TCPSocket
The Celluloid::IO shutdown process works correctly and the NIO::Selector associated with Reel::Server's Celluloid::IO::Mailbox is closed.
tl;dr: teardown after a crash seems good, I think?
However, when the supervisor restarts the Reel::Server, all subsequent requests to the rebooted server hang. The server definitely crashes, everything gets torn down, but on subsequent reboot something is wedged for some reason.
(ohai @halorgium, this may interest you)
Reel's crash handling seems like it should be working. I've confirmed that the following happens when a
Reel::Server
crashes:ensure
blocks inside these tasks, which closes the connections to all clients. I've confirmed all of the client sockets are closed and that this approach seems sufficient for terminating client connections no crash.Reel::Server
finalizer runs, closing Reel'sCelluloid::IO::TCPSocket
NIO::Selector
associated withReel::Server
's Celluloid::IO::Mailbox is closed.tl;dr: teardown after a crash seems good, I think?
However, when the supervisor restarts the Reel::Server, all subsequent requests to the rebooted server hang. The server definitely crashes, everything gets torn down, but on subsequent reboot something is wedged for some reason.