diff options
author | 2019-06-29 22:22:34 +0100 | |
---|---|---|
committer | 2019-06-30 05:22:34 +0800 | |
commit | 3a0c7c61532db7f8e4ce79f99129201a79729525 (patch) | |
tree | fab82dba453c4676a796f3b2e8f02b3573a1466f /plugin/file/zone.go | |
parent | 2c1f5009be5fa0074b1e204f1c2906d6d1f8ea68 (diff) | |
download | coredns-3a0c7c61532db7f8e4ce79f99129201a79729525.tar.gz coredns-3a0c7c61532db7f8e4ce79f99129201a79729525.tar.zst coredns-3a0c7c61532db7f8e4ce79f99129201a79729525.zip |
plugin/file: load secondary zones lazily on startup (#2944)
This fixes a long standing bug:
fixes: #1609
Load secondary zones in a go-routine; this required another mutex to
protect some fields; I think those were needded anyway because a
transfer can also happen when we're running; we just didn't have a test
for that situation.
The test had to be changed to wait for the transfer to happen at this is
async now.
Signed-off-by: Miek Gieben <miek@miek.nl>
Diffstat (limited to 'plugin/file/zone.go')
-rw-r--r-- | plugin/file/zone.go | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/plugin/file/zone.go b/plugin/file/zone.go index e323350f3..b24cd91e8 100644 --- a/plugin/file/zone.go +++ b/plugin/file/zone.go @@ -21,7 +21,8 @@ type Zone struct { origLen int file string *tree.Tree - Apex Apex + Apex + apexMu sync.RWMutex TransferTo []string StartupOnce sync.Once @@ -32,7 +33,7 @@ type Zone struct { LastReloaded time.Time reloadMu sync.RWMutex reloadShutdown chan bool - Upstream *upstream.Upstream // Upstream for looking up external names during the resolution process + Upstream *upstream.Upstream // Upstream for looking up external names during the resolution process. } // Apex contains the apex records of a zone: SOA, NS and their potential signatures. @@ -55,7 +56,6 @@ func NewZone(name, file string) *Zone { LastReloaded: time.Now(), } *z.Expired = false - return z } @@ -186,11 +186,6 @@ func (z *Zone) All() []dns.RR { return append([]dns.RR{z.Apex.SOA}, records...) } -// Print prints the zone's tree to stdout. -func (z *Zone) Print() { - z.Tree.Print() -} - // NameFromRight returns the labels from the right, staring with the // origin and then i labels extra. When we are overshooting the name // the returned boolean is set to true. |