Plugin/RELOAD - Tune usage of var global, add limit to options (#1457)
* tune usage of var global, add limit to options * update readme for minimal values * useless change to quick-off codecov * fix msgs for min values and tune the flag for end of reload usage, with a 'maybe' option * adding UT for min values, adding MD5 of corefile on the log
This commit is contained in:
parent
3fb07161b7
commit
2440024772
4 changed files with 56 additions and 16 deletions
|
@ -1,6 +1,7 @@
|
|||
package reload
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"sync"
|
||||
"time"
|
||||
|
@ -17,7 +18,11 @@ func init() {
|
|||
})
|
||||
}
|
||||
|
||||
var r *reload
|
||||
// the info reload is global to all application, whatever number of reloads.
|
||||
// it is used to transmit data between Setup and start of the hook called 'onInstanceStartup'
|
||||
// channel for QUIT is never changed in purpose.
|
||||
// WARNING: this data may be unsync after an invalid attempt of reload Corefile.
|
||||
var r = reload{interval: defaultInterval, usage: unused, quit: make(chan bool)}
|
||||
var once sync.Once
|
||||
|
||||
func setup(c *caddy.Controller) error {
|
||||
|
@ -32,19 +37,25 @@ func setup(c *caddy.Controller) error {
|
|||
if len(args) > 0 {
|
||||
d, err := time.ParseDuration(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
return plugin.Error("reload", err)
|
||||
}
|
||||
i = d
|
||||
}
|
||||
if i < minInterval {
|
||||
return plugin.Error("reload", fmt.Errorf("interval value must be greater or equal to %v", minInterval))
|
||||
}
|
||||
|
||||
j := defaultJitter
|
||||
if len(args) > 1 {
|
||||
d, err := time.ParseDuration(args[1])
|
||||
if err != nil {
|
||||
return err
|
||||
return plugin.Error("reload", err)
|
||||
}
|
||||
j = d
|
||||
}
|
||||
if j < minJitter {
|
||||
return plugin.Error("reload", fmt.Errorf("jitter value must be greater or equal to %v", minJitter))
|
||||
}
|
||||
|
||||
if j > i/2 {
|
||||
j = i / 2
|
||||
|
@ -53,20 +64,25 @@ func setup(c *caddy.Controller) error {
|
|||
jitter := time.Duration(rand.Int63n(j.Nanoseconds()) - (j.Nanoseconds() / 2))
|
||||
i = i + jitter
|
||||
|
||||
r = &reload{interval: i, quit: make(chan bool)}
|
||||
// prepare info for next onInstanceStartup event
|
||||
r.interval = i
|
||||
r.usage = used
|
||||
|
||||
once.Do(func() {
|
||||
caddy.RegisterEventHook("reload", hook)
|
||||
})
|
||||
|
||||
// re-register on finalShutDown as the instance most-likely will be changed
|
||||
c.OnFinalShutdown(func() error {
|
||||
r.quit <- true
|
||||
return nil
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
const (
|
||||
minJitter = 1 * time.Second
|
||||
minInterval = 2 * time.Second
|
||||
defaultInterval = 30 * time.Second
|
||||
defaultJitter = 15 * time.Second
|
||||
)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue