mirror of
https://github.com/coredns/coredns.git
synced 2025-10-31 18:23:13 -04:00
Make middleware survive a restart (#142)
Make middleware that sets up a (http) handler survive a graceful restart. We calls the middleware's Shutdown function(s). If restart fails the Start function is called again. * middleware/health: OK * middleware/pprof: OK * middleware/metrics: OK All restart OK.
This commit is contained in:
@@ -117,6 +117,9 @@ func Restart(newCorefile Input) error {
|
||||
}
|
||||
wpipe.Close()
|
||||
|
||||
// Run all shutdown functions for the middleware, if child start fails, restart them all...
|
||||
executeShutdownCallbacks("SIGUSR1")
|
||||
|
||||
// Determine whether child startup succeeded
|
||||
answer, readErr := ioutil.ReadAll(sigrpipe)
|
||||
if answer == nil || len(answer) == 0 {
|
||||
@@ -125,6 +128,9 @@ func Restart(newCorefile Input) error {
|
||||
if readErr != nil {
|
||||
log.Printf("[ERROR] Restart: additionally, error communicating with child process: %v", readErr)
|
||||
}
|
||||
// re-call all startup functions.
|
||||
// TODO(miek): this needs to be tested, somehow.
|
||||
executeStartupCallbacks("SIGUSR1")
|
||||
return errIncompleteRestart
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user