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>
This commit is contained in:
Miek Gieben 2019-06-29 22:22:34 +01:00 committed by Yong Tang
parent 2c1f5009be
commit 3a0c7c6153
7 changed files with 21 additions and 17 deletions

View file

@ -2,6 +2,7 @@ package test
import (
"testing"
"time"
"github.com/coredns/coredns/plugin/test"
@ -69,12 +70,16 @@ func TestSecondaryZoneTransfer(t *testing.T) {
m := new(dns.Msg)
m.SetQuestion("example.org.", dns.TypeSOA)
r, err := dns.Exchange(m, udp)
if err != nil {
t.Fatalf("Expected to receive reply, but didn't: %s", err)
var r *dns.Msg
// This is now async; we we need to wait for it to be transfered.
for i := 0; i < 10; i++ {
r, _ = dns.Exchange(m, udp)
if len(r.Answer) == 0 {
break
}
time.Sleep(100 * time.Microsecond)
}
if len(r.Answer) == 0 {
if len(r.Answer) != 0 {
t.Fatalf("Expected answer section")
}
}