From 2a61309cad794848e247e2d3de7369b96e12efd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Benkovsk=C3=BD?= Date: Fri, 9 Jul 2021 16:35:38 +0200 Subject: [PATCH] when no response is written, fallback to status of next plugin in prometheus plugin (#4727) * when no response is written, fallback to status of next plugin in prometheus plugin Signed-off-by: Ondrej Benkovsky * fixup! when no response is written, fallback to status of next plugin in prometheus plugin Signed-off-by: Ondrej Benkovsky --- plugin/metrics/handler.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/plugin/metrics/handler.go b/plugin/metrics/handler.go index 0dbc053da..f26f90598 100644 --- a/plugin/metrics/handler.go +++ b/plugin/metrics/handler.go @@ -26,7 +26,14 @@ func (m *Metrics) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg rw := dnstest.NewRecorder(w) status, err := plugin.NextOrFailure(m.Name(), m.Next, ctx, rw, r) - vars.Report(WithServer(ctx), state, zone, rcode.ToString(rw.Rcode), rw.Len, rw.Start) + 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 + } + vars.Report(WithServer(ctx), state, zone, rcode.ToString(rc), rw.Len, rw.Start) return status, err }