diff options
| author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2021-07-03 06:11:03 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-07-03 06:11:03 -0400 |
| commit | 07716133c44c9c9593364029f4b98085d1be3bdd (patch) | |
| tree | ca1b03c22f1c40c793fe6fe30c99aee8cd3d7558 /vendor/google.golang.org/grpc/internal/resolver/dns | |
| parent | 878a2231f9eae037d15bc27c50cdf3a9418793c7 (diff) | |
| parent | 84da70a0f36e7d6fc87919ca4a69b20bc9d43f72 (diff) | |
| download | podman-07716133c44c9c9593364029f4b98085d1be3bdd.tar.gz podman-07716133c44c9c9593364029f4b98085d1be3bdd.tar.bz2 podman-07716133c44c9c9593364029f4b98085d1be3bdd.zip | |
Merge pull request #10852 from Luap99/cobra
bump cobra to v1.2.1 and update the shell completion scripts
Diffstat (limited to 'vendor/google.golang.org/grpc/internal/resolver/dns')
| -rw-r--r-- | vendor/google.golang.org/grpc/internal/resolver/dns/dns_resolver.go | 43 |
1 files changed, 30 insertions, 13 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 304235566..03825bbe7 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,6 +34,7 @@ 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" @@ -46,6 +47,13 @@ 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()) } @@ -143,7 +151,6 @@ 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 } @@ -201,28 +208,38 @@ 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 { - d.cc.UpdateState(*state) + err = d.cc.UpdateState(*state) } - // Sleep to prevent excessive re-resolutions. Incoming resolution requests - // will be queued in d.rn. - t := time.NewTimer(minDNSResRate) + 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++ + } select { - case <-t.C: case <-d.ctx.Done(): - t.Stop() + timer.Stop() return + case <-timer.C: } } } |
