mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-31 10:13:14 -04:00 
			
		
		
		
	La context (#521)
* middleware/proxy: give Exchange a context Make context.Context the first paramater in the Exchange method. This is inline with all other query functions. * up the version
This commit is contained in:
		| @@ -7,7 +7,7 @@ services: | |||||||
|  |  | ||||||
| language: go | language: go | ||||||
| go: | go: | ||||||
|   - 1.6 |   - 1.7 | ||||||
|  |  | ||||||
| go_import_path: github.com/miekg/coredns | go_import_path: github.com/miekg/coredns | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| package proxy | package proxy | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"context" | ||||||
| 	"net" | 	"net" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| @@ -24,7 +25,7 @@ func (d *dnsEx) OnShutdown(p *Proxy) error { return nil } | |||||||
| func (d *dnsEx) OnStartup(p *Proxy) error  { return nil } | func (d *dnsEx) OnStartup(p *Proxy) error  { return nil } | ||||||
|  |  | ||||||
| // Exchange implements the Exchanger interface. | // Exchange implements the Exchanger interface. | ||||||
| func (d *dnsEx) Exchange(addr string, state request.Request) (*dns.Msg, error) { | func (d *dnsEx) Exchange(ctx context.Context, addr string, state request.Request) (*dns.Msg, error) { | ||||||
| 	co, err := net.DialTimeout(state.Proto(), addr, d.Timeout) | 	co, err := net.DialTimeout(state.Proto(), addr, d.Timeout) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return nil, err | 		return nil, err | ||||||
|   | |||||||
| @@ -1,6 +1,8 @@ | |||||||
| package proxy | package proxy | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"context" | ||||||
|  |  | ||||||
| 	"github.com/miekg/coredns/request" | 	"github.com/miekg/coredns/request" | ||||||
| 	"github.com/miekg/dns" | 	"github.com/miekg/dns" | ||||||
| ) | ) | ||||||
| @@ -8,7 +10,7 @@ import ( | |||||||
| // Exchanger is an interface that specifies a type implementing a DNS resolver that | // Exchanger is an interface that specifies a type implementing a DNS resolver that | ||||||
| // can use whatever transport it likes. | // can use whatever transport it likes. | ||||||
| type Exchanger interface { | type Exchanger interface { | ||||||
| 	Exchange(addr string, state request.Request) (*dns.Msg, error) | 	Exchange(ctx context.Context, addr string, state request.Request) (*dns.Msg, error) | ||||||
| 	Protocol() string | 	Protocol() string | ||||||
|  |  | ||||||
| 	OnStartup(*Proxy) error | 	OnStartup(*Proxy) error | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| package proxy | package proxy | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"context" | ||||||
| 	"crypto/tls" | 	"crypto/tls" | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"fmt" | 	"fmt" | ||||||
| @@ -42,7 +43,7 @@ func newGoogle(endpoint string, bootstrap []string) *google { | |||||||
| 	return &google{client: client, endpoint: dns.Fqdn(endpoint), bootstrapProxy: boot, quit: make(chan bool)} | 	return &google{client: client, endpoint: dns.Fqdn(endpoint), bootstrapProxy: boot, quit: make(chan bool)} | ||||||
| } | } | ||||||
|  |  | ||||||
| func (g *google) Exchange(addr string, state request.Request) (*dns.Msg, error) { | func (g *google) Exchange(ctx context.Context, addr string, state request.Request) (*dns.Msg, error) { | ||||||
| 	v := url.Values{} | 	v := url.Values{} | ||||||
|  |  | ||||||
| 	v.Set("name", state.Name()) | 	v.Set("name", state.Name()) | ||||||
|   | |||||||
| @@ -3,6 +3,7 @@ package proxy | |||||||
| // functions other middleware might want to use to do lookup in the same style as the proxy. | // functions other middleware might want to use to do lookup in the same style as the proxy. | ||||||
|  |  | ||||||
| import ( | import ( | ||||||
|  | 	"context" | ||||||
| 	"sync/atomic" | 	"sync/atomic" | ||||||
| 	"time" | 	"time" | ||||||
|  |  | ||||||
| @@ -91,7 +92,7 @@ func (p Proxy) lookup(state request.Request) (*dns.Msg, error) { | |||||||
|  |  | ||||||
| 			atomic.AddInt64(&host.Conns, 1) | 			atomic.AddInt64(&host.Conns, 1) | ||||||
|  |  | ||||||
| 			reply, backendErr := upstream.Exchanger().Exchange(host.Name, state) | 			reply, backendErr := upstream.Exchanger().Exchange(context.TODO(), host.Name, state) | ||||||
|  |  | ||||||
| 			atomic.AddInt64(&host.Conns, -1) | 			atomic.AddInt64(&host.Conns, -1) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -105,7 +105,7 @@ func (p Proxy) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) ( | |||||||
|  |  | ||||||
| 			atomic.AddInt64(&host.Conns, 1) | 			atomic.AddInt64(&host.Conns, 1) | ||||||
|  |  | ||||||
| 			reply, backendErr := upstream.Exchanger().Exchange(host.Name, state) | 			reply, backendErr := upstream.Exchanger().Exchange(ctx, host.Name, state) | ||||||
|  |  | ||||||
| 			atomic.AddInt64(&host.Conns, -1) | 			atomic.AddInt64(&host.Conns, -1) | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user