aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/setup/secondary.go13
-rw-r--r--middleware/file/secondary.go13
-rw-r--r--middleware/file/zone.go3
3 files changed, 17 insertions, 12 deletions
diff --git a/core/setup/secondary.go b/core/setup/secondary.go
index 2f620c43e..e8326fa25 100644
--- a/core/setup/secondary.go
+++ b/core/setup/secondary.go
@@ -17,13 +17,12 @@ func Secondary(c *Controller) (middleware.Middleware, error) {
for _, n := range zones.Names {
if len(zones.Z[n].TransferFrom) > 0 {
c.Startup = append(c.Startup, func() error {
- err := zones.Z[n].TransferIn()
- return err
- })
- c.Startup = append(c.Startup, func() error {
- go func() {
- zones.Z[n].Update()
- }()
+ zones.Z[n].StartupOnce.Do(func() {
+ zones.Z[n].TransferIn()
+ go func() {
+ zones.Z[n].Update()
+ }()
+ })
return nil
})
}
diff --git a/middleware/file/secondary.go b/middleware/file/secondary.go
index 057d6a4f3..66b1daa98 100644
--- a/middleware/file/secondary.go
+++ b/middleware/file/secondary.go
@@ -18,10 +18,13 @@ func (z *Zone) TransferIn() error {
m.SetAxfr(z.name)
z1 := z.Copy()
- var Err error
+ var (
+ Err error
+ tr string
+ )
Transfer:
- for _, tr := range z.TransferFrom {
+ for _, tr = range z.TransferFrom {
t := new(dns.Transfer)
c, err := t.In(m, tr)
if err != nil {
@@ -52,15 +55,15 @@ Transfer:
break
}
if Err != nil {
- log.Printf("[ERROR] Failed to transfer %s", z.name)
- return nil
+ log.Printf("[ERROR] Failed to transfer %s: %s", z.name, Err)
+ return Err
}
z.Tree = z1.Tree
z.SOA = z1.SOA
z.SIG = z1.SIG
*z.Expired = false
- log.Printf("[INFO] Transferred: %s", z.name)
+ log.Printf("[INFO] Transferred: %s from %s", z.name, tr)
return nil
}
diff --git a/middleware/file/zone.go b/middleware/file/zone.go
index c0bd2ffa6..f9bb8efe2 100644
--- a/middleware/file/zone.go
+++ b/middleware/file/zone.go
@@ -1,6 +1,8 @@
package file
import (
+ "sync"
+
"github.com/miekg/coredns/middleware"
"github.com/miekg/coredns/middleware/file/tree"
@@ -14,6 +16,7 @@ type Zone struct {
*tree.Tree
TransferTo []string
+ StartupOnce sync.Once
TransferFrom []string
Expired *bool
}