net/dnscache: use parent context to perform lookup

As an alterative to #11935 using #12003.

Updates #11935

Signed-off-by: Andrew Dunham <andrew@du.nham.ca>
Change-Id: I05f643fe812ceeaec5f266e78e3e529cab3a1ac3
pull/12446/head
Andrew Dunham 6 months ago
parent 5f121396e9
commit d0f1a838a6

@ -213,8 +213,8 @@ func (r *Resolver) LookupIP(ctx context.Context, host string) (ip, v6 netip.Addr
return ip, ip6, allIPs, nil return ip, ip6, allIPs, nil
} }
ch := r.sf.DoChan(host, func() (ret ipRes, _ error) { ch := r.sf.DoChanContext(ctx, host, func(ctx context.Context) (ret ipRes, _ error) {
ip, ip6, allIPs, err := r.lookupIP(host) ip, ip6, allIPs, err := r.lookupIP(ctx, host)
if err != nil { if err != nil {
return ret, err return ret, err
} }
@ -275,30 +275,30 @@ func (r *Resolver) lookupTimeoutForHost(host string) time.Duration {
return 10 * time.Second return 10 * time.Second
} }
func (r *Resolver) lookupIP(host string) (ip, ip6 netip.Addr, allIPs []netip.Addr, err error) { func (r *Resolver) lookupIP(ctx context.Context, host string) (ip, ip6 netip.Addr, allIPs []netip.Addr, err error) {
if ip, ip6, allIPs, ok := r.lookupIPCache(host); ok { if ip, ip6, allIPs, ok := r.lookupIPCache(host); ok {
r.dlogf("%q found in cache as %v", host, ip) r.dlogf("%q found in cache as %v", host, ip)
return ip, ip6, allIPs, nil return ip, ip6, allIPs, nil
} }
ctx, cancel := context.WithTimeout(context.Background(), r.lookupTimeoutForHost(host)) lookupCtx, lookupCancel := context.WithTimeout(ctx, r.lookupTimeoutForHost(host))
defer cancel() defer lookupCancel()
ips, err := r.fwd().LookupNetIP(ctx, "ip", host) ips, err := r.fwd().LookupNetIP(lookupCtx, "ip", host)
if err != nil || len(ips) == 0 { if err != nil || len(ips) == 0 {
if resolver, ok := r.cloudHostResolver(); ok { if resolver, ok := r.cloudHostResolver(); ok {
r.dlogf("resolving %q via cloud resolver", host) r.dlogf("resolving %q via cloud resolver", host)
ips, err = resolver.LookupNetIP(ctx, "ip", host) ips, err = resolver.LookupNetIP(lookupCtx, "ip", host)
} }
} }
if (err != nil || len(ips) == 0) && r.LookupIPFallback != nil { if (err != nil || len(ips) == 0) && r.LookupIPFallback != nil {
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) lookupCtx, lookupCancel := context.WithTimeout(ctx, 30*time.Second)
defer cancel() defer lookupCancel()
if err != nil { if err != nil {
r.dlogf("resolving %q using fallback resolver due to error", host) r.dlogf("resolving %q using fallback resolver due to error", host)
} else { } else {
r.dlogf("resolving %q using fallback resolver due to no returned IPs", host) r.dlogf("resolving %q using fallback resolver due to no returned IPs", host)
} }
ips, err = r.LookupIPFallback(ctx, host) ips, err = r.LookupIPFallback(lookupCtx, host)
} }
if err != nil { if err != nil {
return netip.Addr{}, netip.Addr{}, nil, err return netip.Addr{}, netip.Addr{}, nil, err

Loading…
Cancel
Save