From: Pieter Lexis Date: Mon, 9 Mar 2026 12:31:50 +0000 (+0100) Subject: fix(dnsdist): Add TraceID to minimal PDNS Protobuf X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d6eaae896eff73af2fdfbd8fad67067223f35512;p=thirdparty%2Fpdns.git fix(dnsdist): Add TraceID to minimal PDNS Protobuf --- diff --git a/pdns/dnsdistdist/dnsdist-idstate.cc b/pdns/dnsdistdist/dnsdist-idstate.cc index dcb93fb0f1..28bc945fbb 100644 --- a/pdns/dnsdistdist/dnsdist-idstate.cc +++ b/pdns/dnsdistdist/dnsdist-idstate.cc @@ -98,6 +98,7 @@ InternalQueryState::~InternalQueryState() pdns::ProtoZero::Message minimalMsg{pbBuf}; minimalMsg.setType(pdns::ProtoZero::Message::MessageType::DNSQueryType); minimalMsg.setOpenTelemetryData(OTData); + minimalMsg.setOpenTelemetryTraceID(d_OTTracer->getTraceID()); for (auto const& msg_logger : ottraceLoggers) { msg_logger->queueData(pbBuf); } diff --git a/regression-tests.dnsdist/test_OpenTelemetryTracing.py b/regression-tests.dnsdist/test_OpenTelemetryTracing.py index c967726ef6..9f4797aa49 100644 --- a/regression-tests.dnsdist/test_OpenTelemetryTracing.py +++ b/regression-tests.dnsdist/test_OpenTelemetryTracing.py @@ -153,6 +153,7 @@ class DNSDistOpenTelemetryProtobufBaseTest(DNSDistOpenTelemetryProtobufTest): def doTest( self, hasProcessResponseAfterRules=False, + hasRemoteLogResponseAction=True, useTCP=False, traceID="", spanID="", @@ -171,7 +172,13 @@ class DNSDistOpenTelemetryProtobufBaseTest(DNSDistOpenTelemetryProtobufTest): traces_data.ParseFromString(msg.openTelemetryData) ot_data = google.protobuf.json_format.MessageToDict(traces_data, preserving_proto_field_name=True) - self.checkOTData(ot_data, hasProcessResponseAfterRules, useTCP, extraFunctions=extraFunctions) + self.checkOTData( + ot_data, + useTCP=useTCP, + extraFunctions=extraFunctions, + hasRemoteLogResponseAction=hasRemoteLogResponseAction, + hasProcessResponseAfterRules=hasProcessResponseAfterRules, + ) traceId = base64.b64encode(msg.openTelemetryTraceID).decode() for msg_span in ot_data["resource_spans"][0]["scope_spans"][0]["spans"]: @@ -552,6 +559,54 @@ addResponseAction(AllRule(), RemoteLogResponseAction(rl)) self.doTest() +class DNSDistOpenTelemetryProtobufBaseLoggersInActionYAML(DNSDistOpenTelemetryProtobufBaseTest): + _yaml_config_params = ["_testServerPort", "_protobufServerPort"] + + _yaml_config_template = """--- +logging: + open_telemetry_tracing: true + +backends: + - address: 127.0.0.1:%d + protocol: Do53 + +remote_logging: + protobuf_loggers: + - name: pblog + address: 127.0.0.1:%d + +query_rules: + - name: Enable tracing + selector: + type: All + action: + type: SetTrace + value: true + remote_loggers: + - pblog +""" + + def testBasic(self): + self.doTest(hasRemoteLogResponseAction=False, hasProcessResponseAfterRules=True) + + def testTCP(self): + self.doTest( + useTCP=True, + hasRemoteLogResponseAction=False, + hasProcessResponseAfterRules=True, + extraFunctions={ + "createTCPQuery", + "queueResponse", + "TCPConnectionToBackend::handleResponse", + "getDownstreamConnection", + "TCPConnectionToBackend::sendQuery", + "handleResponse", + "prepareQueryForSending", + "TCPConnectionToBackend::queueQuery", + }, + ) + + class TestOpenTelemetryTracingBaseYAMLIncludedRemoteLoggerDropped(DNSDistOpenTelemetryProtobufTest): _yaml_config_params = [ "_testServerPort",