plugin/file: make non-existent file non-fatal (#2955)

* plugin/file: make non-existent file non-fatal

If the zone file being loaded doesn't exist *and* reload is enabled,
just wait the file to pop up in the normal Reload routine.

If reload is set to 0s; we keep this a fatal error on startup. Aslo fix
the ticker in z.Reload(): remove the per second ticks and just use the
reload interval for the ticker.

Brush up the documentation a bit as well.

Fixes: #2951

Signed-off-by: Miek Gieben <miek@miek.nl>

* Stickler and test compile

Signed-off-by: Miek Gieben <miek@miek.nl>

* Remove there too

Signed-off-by: Miek Gieben <miek@miek.nl>

* Cant README test these because zone files dont exist

Signed-off-by: Miek Gieben <miek@miek.nl>
This commit is contained in:
Miek Gieben
2019-07-04 06:56:37 +01:00
committed by Yong Tang
parent f9fb9db171
commit 18304ce9b7
7 changed files with 37 additions and 34 deletions

View File

@@ -5,15 +5,12 @@ import (
"time"
)
// TickTime is clock resolution. By default ticks every second. Handler checks if reloadInterval has been reached on every tick.
var TickTime = 1 * time.Second
// Reload reloads a zone when it is changed on disk. If z.NoReload is true, no reloading will be done.
func (z *Zone) Reload() error {
if z.ReloadInterval == 0 {
return nil
}
tick := time.NewTicker(TickTime)
tick := time.NewTicker(z.ReloadInterval)
go func() {
@@ -21,13 +18,6 @@ func (z *Zone) Reload() error {
select {
case <-tick.C:
if z.LastReloaded.Add(z.ReloadInterval).After(time.Now()) {
//reload interval not reached yet
continue
}
//saving timestamp of last attempted reload
z.LastReloaded = time.Now()
zFile := z.File()
reader, err := os.Open(zFile)
if err != nil {