From 7859ba1b78c4253e786b527b3be549ae88713262 Mon Sep 17 00:00:00 2001 From: Viktor Liu Date: Mon, 11 May 2026 10:24:28 +0200 Subject: [PATCH] Propagate EDE meta through race result on upstream short-circuit --- client/internal/dns/upstream.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/client/internal/dns/upstream.go b/client/internal/dns/upstream.go index 915296069..a4f713d68 100644 --- a/client/internal/dns/upstream.go +++ b/client/internal/dns/upstream.go @@ -360,6 +360,9 @@ func (u *upstreamResolverBase) raceAll(ctx context.Context, w dns.ResponseWriter case res := <-results: failures = append(failures, res.failures...) if res.msg != nil { + if res.ede != "" { + resutil.SetMeta(w, "ede", res.ede) + } u.writeSuccessResponse(w, res.msg, res.upstream, r.Question[0].Name, res.protocol, logger) return true, failures } @@ -446,12 +449,12 @@ func (u *upstreamResolverBase) queryUpstream(parentCtx context.Context, r *dns.M } if rm.Rcode == dns.RcodeServerFailure || rm.Rcode == dns.RcodeRefused { - if _, ok := nonRetryableEDE(rm); ok { + if code, ok := nonRetryableEDE(rm); ok { if !hadEdns { stripOPT(rm) } u.markUpstreamOk(upstream) - return raceResult{msg: rm, upstream: upstream, protocol: proto}, nil + return raceResult{msg: rm, upstream: upstream, protocol: proto, ede: edeName(code)}, nil } reason := dns.RcodeToString[rm.Rcode] u.markUpstreamFail(upstream, reason)