-
Notifications
You must be signed in to change notification settings - Fork 181
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RFC: Enable user to run functions on server shutdown #599
Conversation
Codecov Report
@@ Coverage Diff @@
## master #599 +/- ##
==========================================
+ Coverage 77.86% 77.89% +0.02%
==========================================
Files 37 37
Lines 2435 2438 +3
==========================================
+ Hits 1896 1899 +3
Misses 539 539
Continue to review full report at Codecov.
|
end | ||
|
||
Base.isopen(s::Server) = isopen(s.server) | ||
Base.close(s::Server) = close(s.server) | ||
Base.close(s::Server) = (shutdown(s.on_shutdown); close(s.server)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would it be useful to pass s
to the shutdown functions?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If there's a possibility we might want to do other (not specified by the user) shutdown tasks that needed the other fields this would make sense? If not I think it's cleaner as it is for now, and it would always be easy to add it in the future with another method for shutdown
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It was just a thought that maybe you need the server object for shutting down your own stuff too, but yea can always be added later by checking applicable
I think.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Oh yeah applicable
would let you do that, good idea. It's probably worth having the extra functionality in? I'll add it along with some tests and documentation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't have a usecase for it from top of my head, so maybe it can wait. Let's see what others have to say :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
In the past, I have built similar functionality in a wrapper around Server
in a custom framework. I'm not sure if this use case would still be applicable here, but I used the shutdown functionality there to correctly close any open WebSockets instead of just destroying them (which can leave browsers confused).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah that sounds like a good use case for this - are WebSockets destroyed when close(s.server)
is performed?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, just prior to it. The stop
function for the wrapper, which keeps track of open WebSockets, simply iterates over all the WebSockets that are still open, initiates closing them, waits for them to actually close and then calls close(wrapper.server)
.
Quite happy to see these types of changes making it into HTTP.jl. The main reason for this wrapper to exist, is for purposes such as this (and #602 which has also been fixed). Thanks for putting in the work!
Added I've realised that the shutdown functions won't run if an |
Codecov Report
@@ Coverage Diff @@
## master #599 +/- ##
=========================================
Coverage ? 77.43%
=========================================
Files ? 37
Lines ? 2437
Branches ? 0
=========================================
Hits ? 1887
Misses ? 550
Partials ? 0
Continue to review full report at Codecov.
|
Codecov Report
@@ Coverage Diff @@
## master #599 +/- ##
==========================================
+ Coverage 77.86% 77.95% +0.09%
==========================================
Files 37 37
Lines 2435 2441 +6
==========================================
+ Hits 1896 1903 +7
+ Misses 539 538 -1
Continue to review full report at Codecov.
|
Codecov Report
@@ Coverage Diff @@
## master #599 +/- ##
==========================================
+ Coverage 77.86% 78.20% +0.34%
==========================================
Files 37 37
Lines 2435 2441 +6
==========================================
+ Hits 1896 1909 +13
+ Misses 539 532 -7
Continue to review full report at Codecov.
|
I've modified the tests to actually test Apart from that I think this is ready. |
165f338
to
0b2f07e
Compare
Squash didn't help with the labeler. Any help with this would be appreciated |
Just bumping. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Sorry for the slow review; this looks good to me.
@quinnj no worries, thanks for reviewing and merging! |
This PR adds the functionality for the user to add one or more functions to be run when the server is shutting down. This is useful for things like ensuring database connections are closed.
Example use:
This needs some documentation/examples/tests, but wanted to check the approach was okay first.
Closes #591.