plugin/health: make reload work (#1585)

* plugin/health: make reload work

Remove the once.Do from the startup, so we can re-bind the HTTP
listener. Also clarify the usage of health in multiple server blocks
(this is not the best approach - but there isn't a generic solution at
this point).

Manual tested as we lack testing infra, i.e kill -SIGUSR1 and some
CURLing of the health endpoint.

* Readme test fix

* update

* dont need this
This commit is contained in:
Miek Gieben
2018-03-02 21:40:14 -08:00
committed by GitHub
parent acf823cd78
commit 804f745951
3 changed files with 37 additions and 32 deletions

View File

@@ -10,8 +10,6 @@ import (
"time"
)
var once sync.Once
// Health implements healthchecks by polling plugins.
type health struct {
Addr string
@@ -39,33 +37,26 @@ func (h *health) OnStartup() error {
h.Addr = defAddr
}
once.Do(func() {
ln, err := net.Listen("tcp", h.Addr)
if err != nil {
log.Printf("[ERROR] Failed to start health handler: %s", err)
ln, err := net.Listen("tcp", h.Addr)
if err != nil {
return err
}
h.ln = ln
h.mux = http.NewServeMux()
h.mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
if h.Ok() {
w.WriteHeader(http.StatusOK)
io.WriteString(w, ok)
return
}
h.ln = ln
h.mux = http.NewServeMux()
h.mux.HandleFunc(path, func(w http.ResponseWriter, r *http.Request) {
if h.Ok() {
w.WriteHeader(http.StatusOK)
io.WriteString(w, ok)
return
}
w.WriteHeader(http.StatusServiceUnavailable)
})
go func() {
http.Serve(h.ln, h.mux)
}()
go func() {
h.overloaded()
}()
w.WriteHeader(http.StatusServiceUnavailable)
})
go func() { http.Serve(h.ln, h.mux) }()
go func() { h.overloaded() }()
return nil
}