summaryrefslogtreecommitdiff
path: root/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go')
-rw-r--r--vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go43
1 files changed, 13 insertions, 30 deletions
diff --git a/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go b/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go
index 03825bbe7..304235566 100644
--- a/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go
+++ b/vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go
@@ -34,7 +34,6 @@ import (
grpclbstate "google.golang.org/grpc/balancer/grpclb/state"
"google.golang.org/grpc/grpclog"
- "google.golang.org/grpc/internal/backoff"
"google.golang.org/grpc/internal/envconfig"
"google.golang.org/grpc/internal/grpcrand"
"google.golang.org/grpc/resolver"
@@ -47,13 +46,6 @@ var EnableSRVLookups = false
var logger = grpclog.Component("dns")
-// Globals to stub out in tests. TODO: Perhaps these two can be combined into a
-// single variable for testing the resolver?
-var (
- newTimer = time.NewTimer
- newTimerDNSResRate = time.NewTimer
-)
-
func init() {
resolver.Register(NewBuilder())
}
@@ -151,6 +143,7 @@ func (b *dnsBuilder) Build(target resolver.Target, cc resolver.ClientConn, opts
d.wg.Add(1)
go d.watcher()
+ d.ResolveNow(resolver.ResolveNowOptions{})
return d, nil
}
@@ -208,38 +201,28 @@ func (d *dnsResolver) Close() {
func (d *dnsResolver) watcher() {
defer d.wg.Done()
- backoffIndex := 1
for {
+ select {
+ case <-d.ctx.Done():
+ return
+ case <-d.rn:
+ }
+
state, err := d.lookup()
if err != nil {
- // Report error to the underlying grpc.ClientConn.
d.cc.ReportError(err)
} else {
- err = d.cc.UpdateState(*state)
+ d.cc.UpdateState(*state)
}
- var timer *time.Timer
- if err == nil {
- // Success resolving, wait for the next ResolveNow. However, also wait 30 seconds at the very least
- // to prevent constantly re-resolving.
- backoffIndex = 1
- timer = newTimerDNSResRate(minDNSResRate)
- select {
- case <-d.ctx.Done():
- timer.Stop()
- return
- case <-d.rn:
- }
- } else {
- // Poll on an error found in DNS Resolver or an error received from ClientConn.
- timer = newTimer(backoff.DefaultExponential.Backoff(backoffIndex))
- backoffIndex++
- }
+ // Sleep to prevent excessive re-resolutions. Incoming resolution requests
+ // will be queued in d.rn.
+ t := time.NewTimer(minDNSResRate)
select {
+ case <-t.C:
case <-d.ctx.Done():
- timer.Stop()
+ t.Stop()
return
- case <-timer.C:
}
}
}