mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-27 08:14:18 -04:00 
			
		
		
		
	Use cancelable contexts for cloud provider plugin refreshes (#4226)
This commit uses a cancelable context to spawn goroutines that refresh records from a cloud DNS provider. The Caddy shutdown routine uses the returned cancel function to terminate existing goroutines when a USR1 reload signal is received. Signed-off-by: Matt Kulka <mkulka@parchment.com>
This commit is contained in:
		| @@ -87,11 +87,11 @@ func (h *Azure) Run(ctx context.Context) error { | ||||
| 		for { | ||||
| 			select { | ||||
| 			case <-ctx.Done(): | ||||
| 				log.Infof("Breaking out of Azure update loop: %v", ctx.Err()) | ||||
| 				log.Debugf("Breaking out of Azure update loop for %v: %v", h.zoneNames, ctx.Err()) | ||||
| 				return | ||||
| 			case <-time.After(1 * time.Minute): | ||||
| 				if err := h.updateZones(ctx); err != nil && ctx.Err() == nil { | ||||
| 					log.Errorf("Failed to update zones: %v", err) | ||||
| 					log.Errorf("Failed to update zones %v: %v", h.zoneNames, err) | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
| @@ -25,7 +25,7 @@ func setup(c *caddy.Controller) error { | ||||
| 	if err != nil { | ||||
| 		return plugin.Error("azure", err) | ||||
| 	} | ||||
| 	ctx := context.Background() | ||||
| 	ctx, cancel := context.WithCancel(context.Background()) | ||||
|  | ||||
| 	publicDNSClient := publicAzureDNS.NewRecordSetsClient(env.Values[auth.SubscriptionID]) | ||||
| 	if publicDNSClient.Authorizer, err = env.GetAuthorizer(); err != nil { | ||||
| @@ -50,6 +50,7 @@ func setup(c *caddy.Controller) error { | ||||
| 		h.Next = next | ||||
| 		return h | ||||
| 	}) | ||||
| 	c.OnShutdown(func() error { cancel(); return nil }) | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -85,11 +85,11 @@ func (h *CloudDNS) Run(ctx context.Context) error { | ||||
| 		for { | ||||
| 			select { | ||||
| 			case <-ctx.Done(): | ||||
| 				log.Infof("Breaking out of CloudDNS update loop: %v", ctx.Err()) | ||||
| 				log.Debugf("Breaking out of CloudDNS update loop for %v: %v", h.zoneNames, ctx.Err()) | ||||
| 				return | ||||
| 			case <-time.After(1 * time.Minute): | ||||
| 				if err := h.updateZones(ctx); err != nil && ctx.Err() == nil /* Don't log error if ctx expired. */ { | ||||
| 					log.Errorf("Failed to update zones: %v", err) | ||||
| 					log.Errorf("Failed to update zones %v: %v", h.zoneNames, err) | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
| @@ -78,7 +78,7 @@ func setup(c *caddy.Controller) error { | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		ctx := context.Background() | ||||
| 		ctx, cancel := context.WithCancel(context.Background()) | ||||
| 		client, err := f(ctx, opt) | ||||
| 		if err != nil { | ||||
| 			return err | ||||
| @@ -98,7 +98,7 @@ func setup(c *caddy.Controller) error { | ||||
| 			h.Next = next | ||||
| 			return h | ||||
| 		}) | ||||
| 		c.OnShutdown(func() error { ctx.Done(); return nil }) | ||||
| 		c.OnShutdown(func() error { cancel(); return nil }) | ||||
| 	} | ||||
|  | ||||
| 	return nil | ||||
|   | ||||
| @@ -87,11 +87,11 @@ func (h *Route53) Run(ctx context.Context) error { | ||||
| 		for { | ||||
| 			select { | ||||
| 			case <-ctx.Done(): | ||||
| 				log.Infof("Breaking out of Route53 update loop: %v", ctx.Err()) | ||||
| 				log.Debugf("Breaking out of Route53 update loop for %v: %v", h.zoneNames, ctx.Err()) | ||||
| 				return | ||||
| 			case <-time.After(h.refresh): | ||||
| 				if err := h.updateZones(ctx); err != nil && ctx.Err() == nil /* Don't log error if ctx expired. */ { | ||||
| 					log.Errorf("Failed to update zones: %v", err) | ||||
| 					log.Errorf("Failed to update zones %v: %v", h.zoneNames, err) | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
| @@ -124,7 +124,7 @@ func setup(c *caddy.Controller) error { | ||||
| 			Client: ec2metadata.New(session), | ||||
| 		}) | ||||
| 		client := f(credentials.NewChainCredentials(providers)) | ||||
| 		ctx := context.Background() | ||||
| 		ctx, cancel := context.WithCancel(context.Background()) | ||||
| 		h, err := New(ctx, client, keys, refresh) | ||||
| 		if err != nil { | ||||
| 			return plugin.Error("route53", c.Errf("failed to create route53 plugin: %v", err)) | ||||
| @@ -137,7 +137,7 @@ func setup(c *caddy.Controller) error { | ||||
| 			h.Next = next | ||||
| 			return h | ||||
| 		}) | ||||
| 		c.OnShutdown(func() error { ctx.Done(); return nil }) | ||||
| 		c.OnShutdown(func() error { cancel(); return nil }) | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user