mirror of
https://github.com/tailscale/tailscale.git
synced 2025-04-21 06:01:42 +00:00
net/dns/resolver: wrap errors with more context
To aid in debugging why we're seeing DNS resolution errors. Updates #TODO Signed-off-by: Andrew Dunham <andrew@du.nham.ca> Change-Id: I9b3f438d5d675f757e9043dbbdc413fd722fb81a
This commit is contained in:
parent
91692495d8
commit
089d15d8c2
@ -840,7 +840,7 @@ func (f *forwarder) forwardWithDestChan(ctx context.Context, query packet, respo
|
|||||||
domain, err := nameFromQuery(query.bs)
|
domain, err := nameFromQuery(query.bs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
metricDNSFwdErrorName.Add(1)
|
metricDNSFwdErrorName.Add(1)
|
||||||
return err
|
return fmt.Errorf("getting name from DNS query: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Guarantee that the ctx we use below is done when this function returns.
|
// Guarantee that the ctx we use below is done when this function returns.
|
||||||
@ -888,7 +888,7 @@ func (f *forwarder) forwardWithDestChan(ctx context.Context, query packet, respo
|
|||||||
}
|
}
|
||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
return ctx.Err()
|
return fmt.Errorf("sending SERVFAIL due to no resolvers: %w", ctx.Err())
|
||||||
case responseChan <- res:
|
case responseChan <- res:
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -918,6 +918,7 @@ func (f *forwarder) forwardWithDestChan(ctx context.Context, query packet, respo
|
|||||||
}
|
}
|
||||||
resb, err := f.send(ctx, fq, *rr)
|
resb, err := f.send(ctx, fq, *rr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
err = fmt.Errorf("querying resolver %q: %w", rr.name.Addr, err)
|
||||||
select {
|
select {
|
||||||
case errc <- err:
|
case errc <- err:
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
@ -939,7 +940,7 @@ func (f *forwarder) forwardWithDestChan(ctx context.Context, query packet, respo
|
|||||||
select {
|
select {
|
||||||
case <-ctx.Done():
|
case <-ctx.Done():
|
||||||
metricDNSFwdErrorContext.Add(1)
|
metricDNSFwdErrorContext.Add(1)
|
||||||
return ctx.Err()
|
return fmt.Errorf("sending response: %w", ctx.Err())
|
||||||
case responseChan <- packet{v, query.family, query.addr}:
|
case responseChan <- packet{v, query.family, query.addr}:
|
||||||
metricDNSFwdSuccess.Add(1)
|
metricDNSFwdSuccess.Add(1)
|
||||||
return nil
|
return nil
|
||||||
@ -954,7 +955,7 @@ func (f *forwarder) forwardWithDestChan(ctx context.Context, query packet, respo
|
|||||||
res, err := servfailResponse(query)
|
res, err := servfailResponse(query)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
f.logf("building servfail response: %v", err)
|
f.logf("building servfail response: %v", err)
|
||||||
return firstErr
|
return fmt.Errorf("building SERVFAIL: %w", firstErr)
|
||||||
}
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
@ -970,9 +971,10 @@ func (f *forwarder) forwardWithDestChan(ctx context.Context, query packet, respo
|
|||||||
metricDNSFwdErrorContext.Add(1)
|
metricDNSFwdErrorContext.Add(1)
|
||||||
if firstErr != nil {
|
if firstErr != nil {
|
||||||
metricDNSFwdErrorContextGotError.Add(1)
|
metricDNSFwdErrorContextGotError.Add(1)
|
||||||
return firstErr
|
} else {
|
||||||
|
firstErr = ctx.Err()
|
||||||
}
|
}
|
||||||
return ctx.Err()
|
return fmt.Errorf("waiting for response: %w", firstErr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -288,9 +288,12 @@ func (r *Resolver) Query(ctx context.Context, bs []byte, family string, from net
|
|||||||
// This is present in some errors paths, such as when all upstream
|
// This is present in some errors paths, such as when all upstream
|
||||||
// DNS servers replied with an error.
|
// DNS servers replied with an error.
|
||||||
case resp := <-responses:
|
case resp := <-responses:
|
||||||
|
if err != nil {
|
||||||
|
err = fmt.Errorf("forwarder response error: %w", err)
|
||||||
|
}
|
||||||
return resp.bs, err
|
return resp.bs, err
|
||||||
default:
|
default:
|
||||||
return nil, err
|
return nil, fmt.Errorf("forwarder error: %w", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (<-responses).bs, nil
|
return (<-responses).bs, nil
|
||||||
|
Loading…
x
Reference in New Issue
Block a user