Only transfer a zone once (#117)
Use sync.Once to only transfer a zone once. Fixes #115
This commit is contained in:
parent
5a8a125399
commit
982377516b
3 changed files with 17 additions and 12 deletions
|
@ -17,13 +17,12 @@ func Secondary(c *Controller) (middleware.Middleware, error) {
|
||||||
for _, n := range zones.Names {
|
for _, n := range zones.Names {
|
||||||
if len(zones.Z[n].TransferFrom) > 0 {
|
if len(zones.Z[n].TransferFrom) > 0 {
|
||||||
c.Startup = append(c.Startup, func() error {
|
c.Startup = append(c.Startup, func() error {
|
||||||
err := zones.Z[n].TransferIn()
|
zones.Z[n].StartupOnce.Do(func() {
|
||||||
return err
|
zones.Z[n].TransferIn()
|
||||||
})
|
go func() {
|
||||||
c.Startup = append(c.Startup, func() error {
|
zones.Z[n].Update()
|
||||||
go func() {
|
}()
|
||||||
zones.Z[n].Update()
|
})
|
||||||
}()
|
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,10 +18,13 @@ func (z *Zone) TransferIn() error {
|
||||||
m.SetAxfr(z.name)
|
m.SetAxfr(z.name)
|
||||||
|
|
||||||
z1 := z.Copy()
|
z1 := z.Copy()
|
||||||
var Err error
|
var (
|
||||||
|
Err error
|
||||||
|
tr string
|
||||||
|
)
|
||||||
|
|
||||||
Transfer:
|
Transfer:
|
||||||
for _, tr := range z.TransferFrom {
|
for _, tr = range z.TransferFrom {
|
||||||
t := new(dns.Transfer)
|
t := new(dns.Transfer)
|
||||||
c, err := t.In(m, tr)
|
c, err := t.In(m, tr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -52,15 +55,15 @@ Transfer:
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if Err != nil {
|
if Err != nil {
|
||||||
log.Printf("[ERROR] Failed to transfer %s", z.name)
|
log.Printf("[ERROR] Failed to transfer %s: %s", z.name, Err)
|
||||||
return nil
|
return Err
|
||||||
}
|
}
|
||||||
|
|
||||||
z.Tree = z1.Tree
|
z.Tree = z1.Tree
|
||||||
z.SOA = z1.SOA
|
z.SOA = z1.SOA
|
||||||
z.SIG = z1.SIG
|
z.SIG = z1.SIG
|
||||||
*z.Expired = false
|
*z.Expired = false
|
||||||
log.Printf("[INFO] Transferred: %s", z.name)
|
log.Printf("[INFO] Transferred: %s from %s", z.name, tr)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package file
|
package file
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"sync"
|
||||||
|
|
||||||
"github.com/miekg/coredns/middleware"
|
"github.com/miekg/coredns/middleware"
|
||||||
"github.com/miekg/coredns/middleware/file/tree"
|
"github.com/miekg/coredns/middleware/file/tree"
|
||||||
|
|
||||||
|
@ -14,6 +16,7 @@ type Zone struct {
|
||||||
*tree.Tree
|
*tree.Tree
|
||||||
|
|
||||||
TransferTo []string
|
TransferTo []string
|
||||||
|
StartupOnce sync.Once
|
||||||
TransferFrom []string
|
TransferFrom []string
|
||||||
Expired *bool
|
Expired *bool
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue