]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
fix(dnsdist): Add TraceID to minimal PDNS Protobuf
authorPieter Lexis <pieter.lexis@powerdns.com>
Mon, 9 Mar 2026 12:31:50 +0000 (13:31 +0100)
committerPieter Lexis <pieter.lexis@powerdns.com>
Mon, 1 Jun 2026 10:51:43 +0000 (12:51 +0200)
pdns/dnsdistdist/dnsdist-idstate.cc
regression-tests.dnsdist/test_OpenTelemetryTracing.py

index dcb93fb0f18d20cabec84554a428d0d5f52a5b8b..28bc945fbb839c65d889b6d349d02585a98691fe 100644 (file)
@@ -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);
       }
index c967726ef68b12b61679b8a9cd573664cca06b3c..9f4797aa49798b7ac578271e5b14d6ecdd45ea95 100644 (file)
@@ -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",