mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-30 17:53:21 -04:00 
			
		
		
		
	Only transfer a zone once (#117)
Use sync.Once to only transfer a zone once. Fixes #115
This commit is contained in:
		| @@ -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 | ||||
| 			}) | ||||
| 		} | ||||
|   | ||||
| @@ -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 | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user