plugin/file: trigger reload of zones based on mtime (#8085)

* Added fs.FileInfo.ModTime() based reload feature

Signed-off-by: Endre Szabo <git@end.re>

* Updated the plugin documentation.

Signed-off-by: Endre Szabo <git@end.re>

---------

Signed-off-by: Endre Szabo <git@end.re>
This commit is contained in:
Endre Szabo
2026-05-20 04:43:46 +02:00
committed by GitHub
parent ee7ff82cf5
commit 35391dd8a9
6 changed files with 283 additions and 4 deletions

View File

@@ -20,13 +20,26 @@ func (z *Zone) Reload(t *transfer.Transfer) error {
select {
case <-tick.C:
zFile := z.File()
serial := z.SOASerialIfDefined()
if z.ReloadByMtime {
fi, err := os.Stat(zFile)
if err != nil {
log.Errorf("Failed to stat zone %q in %q: %v", z.origin, zFile, err)
continue
}
if !fi.ModTime().After(z.file_mtime) {
continue
}
serial = 0 // force reload of the zone
}
reader, err := os.Open(filepath.Clean(zFile))
if err != nil {
log.Errorf("Failed to open zone %q in %q: %v", z.origin, zFile, err)
continue
}
serial := z.SOASerialIfDefined()
zone, err := Parse(reader, z.origin, zFile, serial)
reader.Close()
if err != nil {