mirror of
				https://github.com/coredns/coredns.git
				synced 2025-10-31 10:13:14 -04:00 
			
		
		
		
	mw/proxy: simplify google code (#1019)
* mw/proxy: simplify google code Minimize bootstrap code a bit, and block on the first resolve of the google https endpont. Add more logging and include actual error in the returned errors. Also re-resolve every 120 seconds, instead of 300 (might eventually make this an option). * fix test
This commit is contained in:
		| @@ -112,11 +112,8 @@ func (g *google) exchangeJSON(addr, json string) ([]byte, error) { | ||||
| 	return buf, nil | ||||
| } | ||||
|  | ||||
| func (g *google) Transport() string { | ||||
| 	return "tcp" | ||||
| } | ||||
|  | ||||
| func (g *google) Protocol() string { return "https_google" } | ||||
| func (g *google) Transport() string { return "tcp" } | ||||
| func (g *google) Protocol() string  { return "https_google" } | ||||
|  | ||||
| func (g *google) OnShutdown(p *Proxy) error { | ||||
| 	g.quit <- true | ||||
| @@ -130,52 +127,56 @@ func (g *google) OnStartup(p *Proxy) error { | ||||
| 	req.SetQuestion(g.endpoint, dns.TypeA) | ||||
| 	state := request.Request{W: new(fakeBootWriter), Req: req} | ||||
|  | ||||
| 	if len(*p.Upstreams) == 0 { | ||||
| 		return fmt.Errorf("no upstreams defined") | ||||
| 	} | ||||
|  | ||||
| 	oldUpstream := (*p.Upstreams)[0] | ||||
|  | ||||
| 	log.Printf("[INFO] Bootstrapping A records %q", g.endpoint) | ||||
|  | ||||
| 	new, err := g.bootstrapProxy.Lookup(state, g.endpoint, dns.TypeA) | ||||
|  | ||||
| 	var oldUpstream Upstream | ||||
|  | ||||
| 	// ignore errors here, as we want to keep on trying. | ||||
| 	if err != nil { | ||||
| 		log.Printf("[WARNING] Failed to bootstrap A records %q: %s", g.endpoint, err) | ||||
| 	} else { | ||||
| 		addrs, err1 := extractAnswer(new) | ||||
| 		if err1 != nil { | ||||
| 			log.Printf("[WARNING] Failed to bootstrap A records %q: %s", g.endpoint, err) | ||||
| 		} | ||||
| 			log.Printf("[WARNING] Failed to bootstrap A records %q: %s", g.endpoint, err1) | ||||
| 		} else { | ||||
|  | ||||
| 		if len(*p.Upstreams) > 0 { | ||||
| 			oldUpstream = (*p.Upstreams)[0] | ||||
| 			up := newUpstream(addrs, oldUpstream.(*staticUpstream)) | ||||
| 			p.Upstreams = &[]Upstream{up} | ||||
| 		} else { | ||||
| 			log.Printf("[WARNING] Failed to bootstrap upstreams %q", g.endpoint) | ||||
|  | ||||
| 			log.Printf("[INFO] Bootstrapping A records %q found: %v", g.endpoint, addrs) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	go func() { | ||||
| 		tick := time.NewTicker(300 * time.Second) | ||||
| 		tick := time.NewTicker(120 * time.Second) | ||||
|  | ||||
| 		for { | ||||
| 			select { | ||||
| 			case <-tick.C: | ||||
|  | ||||
| 				log.Printf("[INFO] Resolving A records %q", g.endpoint) | ||||
|  | ||||
| 				new, err := g.bootstrapProxy.Lookup(state, g.endpoint, dns.TypeA) | ||||
| 				if err != nil { | ||||
| 					log.Printf("[WARNING] Failed to bootstrap A records %q: %s", g.endpoint, err) | ||||
| 				} else { | ||||
| 					addrs, err1 := extractAnswer(new) | ||||
| 					if err1 != nil { | ||||
| 						log.Printf("[WARNING] Failed to bootstrap A records %q: %s", g.endpoint, err) | ||||
| 						continue | ||||
| 					} | ||||
|  | ||||
| 					// TODO(miek): can this actually happen? | ||||
| 					if oldUpstream != nil { | ||||
| 						up := newUpstream(addrs, oldUpstream.(*staticUpstream)) | ||||
| 						p.Upstreams = &[]Upstream{up} | ||||
| 					} | ||||
| 					log.Printf("[WARNING] Failed to resolve A records %q: %s", g.endpoint, err) | ||||
| 					continue | ||||
| 				} | ||||
|  | ||||
| 				addrs, err1 := extractAnswer(new) | ||||
| 				if err1 != nil { | ||||
| 					log.Printf("[WARNING] Failed to resolve A records %q: %s", g.endpoint, err1) | ||||
| 					continue | ||||
| 				} | ||||
|  | ||||
| 				up := newUpstream(addrs, oldUpstream.(*staticUpstream)) | ||||
| 				p.Upstreams = &[]Upstream{up} | ||||
|  | ||||
| 				log.Printf("[INFO] Resolving A records %q found: %v", g.endpoint, addrs) | ||||
|  | ||||
| 			case <-g.quit: | ||||
| 				return | ||||
| 			} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user