diff options
Diffstat (limited to 'plugin/trace/trace.go')
-rw-r--r-- | plugin/trace/trace.go | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/plugin/trace/trace.go b/plugin/trace/trace.go index 4d3deb207..1b74dcbc3 100644 --- a/plugin/trace/trace.go +++ b/plugin/trace/trace.go @@ -149,7 +149,14 @@ func (t *trace) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) span.SetTag(t.tagSet.Type, req.Type()) span.SetTag(t.tagSet.Proto, req.Proto()) span.SetTag(t.tagSet.Remote, req.IP()) - span.SetTag(t.tagSet.Rcode, rcode.ToString(rw.Rcode)) + rc := rw.Rcode + if !plugin.ClientWrite(status) { + // when no response was written, fallback to status returned from next plugin as this status + // is actually used as rcode of DNS response + // see https://github.com/coredns/coredns/blob/master/core/dnsserver/server.go#L318 + rc = status + } + span.SetTag(t.tagSet.Rcode, rcode.ToString(rc)) if err != nil { otext.Error.Set(span, true) span.LogFields(otlog.Event("error"), otlog.Error(err)) |