plugin/ready: fix starts and restarts (#2814)

Add OnRestartFailed to the ready plugin and some various cleanups.

Document slightly better how things are supposed to work with multiple
`ready`'s in the multiple Server Blocks.

All manually tested with this Corefile:
~~~
. {
    log
    ready
}

example.org {
    log
    chaos
    ready
}
~~~
And then `kill -SIGUSR1` and curling the ready endpoint. This works
well, the FailedReload is triggered by adding a syntax error in the
Corefile.

See #2659

Signed-off-by: Miek Gieben <miek@miek.nl>
This commit is contained in:
Miek Gieben 2019-06-09 08:10:15 +01:00 committed by GitHub
parent bd83f74deb
commit a1c97f82a6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 23 deletions

View file

@ -21,22 +21,25 @@ func setup(c *caddy.Controller) error {
if err != nil {
return plugin.Error("ready", err)
}
rd := &ready{Addr: addr}
uniqAddr.Set(addr, rd.onStartup)
c.OnStartup(func() error { uniqAddr.Set(addr, rd.onStartup); return nil })
c.OnRestartFailed(func() error { uniqAddr.Set(addr, rd.onStartup); return nil })
c.OncePerServerBlock(func() error {
c.OnStartup(func() error {
return uniqAddr.ForEach()
})
return nil
})
c.OnStartup(func() error { return uniqAddr.ForEach() })
c.OnRestartFailed(func() error { return uniqAddr.ForEach() })
c.OnStartup(func() error {
// Each plugin in this server block will (if they support it) report readiness.
plugs := dnsserver.GetConfig(c).Handlers()
for _, p := range plugs {
for _, p := range dnsserver.GetConfig(c).Handlers() {
if r, ok := p.(Readiness); ok {
plugins.Append(r, p.Name())
}
}
return nil
})
c.OnRestartFailed(func() error {
for _, p := range dnsserver.GetConfig(c).Handlers() {
if r, ok := p.(Readiness); ok {
plugins.Append(r, p.Name())
}
@ -44,14 +47,14 @@ func setup(c *caddy.Controller) error {
return nil
})
c.OnRestart(rd.onRestart)
c.OnRestart(rd.onFinalShutdown)
c.OnFinalShutdown(rd.onFinalShutdown)
return nil
}
func parse(c *caddy.Controller) (string, error) {
addr := ""
addr := ":8181"
i := 0
for c.Next() {
if i > 0 {