From cfb1c4b8112d7b29d5d4dc67c895214a655486e9 Mon Sep 17 00:00:00 2001 From: Andrew Dunham <andrew@du.nham.ca> Date: Fri, 5 Jul 2024 14:18:56 -0400 Subject: [PATCH] net/dns/resolver: add a bunch of extra logging Signed-off-by: Andrew Dunham <andrew@du.nham.ca> Change-Id: I38f8556d61105551939b0e62eb5213aa3c124f25 --- net/dns/resolver/forwarder.go | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/net/dns/resolver/forwarder.go b/net/dns/resolver/forwarder.go index ca3227aab..5d89a5937 100644 --- a/net/dns/resolver/forwarder.go +++ b/net/dns/resolver/forwarder.go @@ -511,10 +511,16 @@ func (f *forwarder) send(ctx context.Context, fq *forwardQuery, rr resolverAndDe isUDPQuery := fq.family == "udp" skipTCP := skipTCPRetry() || (f.controlKnobs != nil && f.controlKnobs.DisableDNSForwarderTCPRetries.Load()) + var vlogf logger.Logf = logger.Discard + if verboseDNSForward() { + vlogf = f.logf + } + // Print logs about retries if this was because of a truncated response. var explicitRetry atomic.Bool // true if truncated UDP response retried defer func() { if !explicitRetry.Load() { + vlogf("forwarder.send(%q): no retry needed", rr.name.Addr) return } if err == nil { @@ -525,12 +531,16 @@ func (f *forwarder) send(ctx context.Context, fq *forwardQuery, rr resolverAndDe }() firstUDP := func(ctx context.Context) ([]byte, error) { + t0 := time.Now() + vlogf("starting UDP query for %q", rr.name.Addr) resp, err := f.sendUDP(ctx, fq, rr) + vlogf("UDP query for %q took %v; err=%v", rr.name.Addr, time.Since(t0), err) if err != nil { return nil, err } if !truncatedFlagSet(resp) { // Successful, non-truncated response; no retry. + vlogf("reply from %q was not truncated; returning", rr.name.Addr) return resp, nil } @@ -540,12 +550,14 @@ func (f *forwarder) send(ctx context.Context, fq *forwardQuery, rr resolverAndDe // falling back to TCP for a truncated query if we can't return // the results to the client. if isUDPQuery { + vlogf("reply from %q was truncated, but client was UDP; returning", rr.name.Addr) return resp, nil } if skipTCP { // Envknob or control knob disabled the TCP retry behaviour; // just return what we have. + vlogf("reply from %q was truncated, but TCP retries are disabled; returning", rr.name.Addr) return resp, nil } @@ -554,6 +566,7 @@ func (f *forwarder) send(ctx context.Context, fq *forwardQuery, rr resolverAndDe // error to cause our retry helper to immediately kick off the // TCP retry. explicitRetry.Store(true) + vlogf("reply from %q was truncated; signaling to retry via TCP", rr.name.Addr) return nil, truncatedResponseError{resp} } thenTCP := func(ctx context.Context) ([]byte, error) { @@ -561,11 +574,16 @@ func (f *forwarder) send(ctx context.Context, fq *forwardQuery, rr resolverAndDe // context is canceled and return that error (i.e. not // returning anything). if skipTCP { + vlogf("skipping TCP query for %q", rr.name.Addr) <-ctx.Done() return nil, ctx.Err() } - return f.sendTCP(ctx, fq, rr) + t0 := time.Now() + vlogf("starting TCP query for %q", rr.name.Addr) + ret, err := f.sendTCP(ctx, fq, rr) + vlogf("TCP query for %q took %v; err=%v", rr.name.Addr, time.Since(t0), err) + return ret, err } // If the input query is TCP, then don't have a timeout between