From: Pieter Lexis Date: Thu, 27 Nov 2025 14:57:32 +0000 (+0100) Subject: feat(dnsdist): Use the stack-based approach for Tracing X-Git-Tag: rec-5.4.0-beta1~65^2~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=22625d336b9c390ab8dc9ea2b8efa55cfcf80345;p=thirdparty%2Fpdns.git feat(dnsdist): Use the stack-based approach for Tracing --- diff --git a/pdns/dnsdistdist/dnsdist-idstate.cc b/pdns/dnsdistdist/dnsdist-idstate.cc index 19a92f6651..5c1e41ab35 100644 --- a/pdns/dnsdistdist/dnsdist-idstate.cc +++ b/pdns/dnsdistdist/dnsdist-idstate.cc @@ -129,13 +129,13 @@ std::optional InternalQueryState::getClose std::optional ret(std::nullopt); #ifndef DISABLE_PROTOBUF if (auto tracer = getTracer(); tracer != nullptr) { - return getCloser(std::string(name), d_OTTracer->getLastSpanID()); + return getCloser(std::string(name), tracer->getLastSpanID()); } #endif return ret; } -std::optional InternalQueryState::getRulesCloser([[maybe_unused]] const std::string_view& ruleName, [[maybe_unused]] const std::string_view& parentSpanName, [[maybe_unused]] const std::string& ruleType) +std::optional InternalQueryState::getRulesCloser([[maybe_unused]] const std::string_view& ruleName, [[maybe_unused]] const std::string& ruleType) { std::optional ret(std::nullopt); #ifndef DISABLE_PROTOBUF @@ -144,9 +144,9 @@ std::optional InternalQueryState::getRules // tracingEnabled tells us whether or not tracing is enabled for this query // Should tracing be disabled, *but* we have not processed query rules, we will still return a closer if tracing is globally enabled if (auto tracer = getTracer(); tracer != nullptr && (tracingEnabled || !rulesAppliedToQuery)) { - auto parentSpanID = d_OTTracer->getLastSpanIDForName(std::string(parentSpanName)); + auto parentSpanID = tracer->getLastSpanID(); auto name = ruleType + prefix + std::string(ruleName); - ret = std::optional(d_OTTracer->openSpan(name, parentSpanID)); + ret = std::optional(tracer->openSpan(name, parentSpanID)); } #endif return ret; diff --git a/pdns/dnsdistdist/dnsdist-idstate.hh b/pdns/dnsdistdist/dnsdist-idstate.hh index 93de590824..e3c4afbc73 100644 --- a/pdns/dnsdistdist/dnsdist-idstate.hh +++ b/pdns/dnsdistdist/dnsdist-idstate.hh @@ -151,7 +151,7 @@ struct InternalQueryState std::optional getCloser([[maybe_unused]] const std::string_view& name, [[maybe_unused]] const SpanID& parentSpanID); std::optional getCloser([[maybe_unused]] const std::string_view& name, [[maybe_unused]] const std::string_view& parentSpanName); std::optional getCloser([[maybe_unused]] const std::string_view& name); - std::optional getRulesCloser([[maybe_unused]] const std::string_view& ruleName, [[maybe_unused]] const std::string_view& parentSpanName, [[maybe_unused]] const std::string& ruleType); + std::optional getRulesCloser([[maybe_unused]] const std::string_view& ruleName, [[maybe_unused]] const std::string& ruleType); InternalQueryState() { diff --git a/pdns/dnsdistdist/dnsdist.cc b/pdns/dnsdistdist/dnsdist.cc index d66c4a483c..ecc8d97d0e 100644 --- a/pdns/dnsdistdist/dnsdist.cc +++ b/pdns/dnsdistdist/dnsdist.cc @@ -466,7 +466,7 @@ bool applyRulesToResponse(const std::vector& static const std::string ruleType = "Response"; for (const auto& rrule : respRuleActions) { - auto ruleCloser = dnsResponse.ids.getRulesCloser(rrule.d_name, __func__, ruleType); // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay) + auto ruleCloser = dnsResponse.ids.getRulesCloser(rrule.d_name, ruleType); if (rrule.d_rule->matches(&dnsResponse)) { ++rrule.d_rule->d_matches; action = (*rrule.d_action)(&dnsResponse, &ruleresult); @@ -520,7 +520,7 @@ bool applyRulesToResponse(const std::vector& bool processResponseAfterRules(PacketBuffer& response, DNSResponse& dnsResponse, [[maybe_unused]] bool muted) { - auto closer = dnsResponse.ids.getCloser(__func__, "processResponse"); // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay) + auto closer = dnsResponse.ids.getCloser(__func__); // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay) bool zeroScope = false; if (!fixUpResponse(response, dnsResponse.ids.qname, dnsResponse.ids.origFlags, dnsResponse.ids.ednsAdded, dnsResponse.ids.ecsAdded, dnsResponse.ids.useZeroScope ? &zeroScope : nullptr)) { if (closer) { @@ -552,7 +552,7 @@ bool processResponseAfterRules(PacketBuffer& response, DNSResponse& dnsResponse, cacheKey = dnsResponse.ids.cacheKeyNoECS; } { - auto cacheInsertCloser = dnsResponse.ids.getCloser("packetCacheInsert", __func__); // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay) + auto cacheInsertCloser = dnsResponse.ids.getCloser("packetCacheInsert"); // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay) dnsResponse.ids.packetCache->insert(cacheKey, zeroScope ? std::nullopt : dnsResponse.ids.subnet, dnsResponse.ids.cacheFlags, dnsResponse.ids.dnssecOK ? *dnsResponse.ids.dnssecOK : false, dnsResponse.ids.qname, dnsResponse.ids.qtype, dnsResponse.ids.qclass, response, dnsResponse.ids.forwardedOverUDP, dnsResponse.getHeader()->rcode, dnsResponse.ids.tempFailureTTL); } const auto& chains = dnsdist::configuration::getCurrentRuntimeConfiguration().d_ruleChains; @@ -584,7 +584,7 @@ bool processResponseAfterRules(PacketBuffer& response, DNSResponse& dnsResponse, bool processResponse(PacketBuffer& response, DNSResponse& dnsResponse, bool muted) { // This is a new root span - auto closer = dnsResponse.ids.getCloser(__func__, SpanID{}); // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay) + auto closer = dnsResponse.ids.getCloser(__func__); // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay) const auto& chains = dnsdist::configuration::getCurrentRuntimeConfiguration().d_ruleChains; const auto& respRuleActions = dnsdist::rules::getResponseRuleChain(chains, dnsdist::rules::ResponseRuleChain::ResponseRules); @@ -1026,7 +1026,7 @@ static bool applyRulesChainToQuery(const std::vector static const std::string ruleType; // Empty string for (const auto& rule : rules) { - auto ruleCloser = dnsQuestion.ids.getRulesCloser(rule.d_name, __func__, ruleType); // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay) + auto ruleCloser = dnsQuestion.ids.getRulesCloser(rule.d_name, ruleType); if (!rule.d_rule->matches(&dnsQuestion)) { continue; @@ -1454,7 +1454,7 @@ static ProcessQueryResult handleQueryTurnedIntoSelfAnsweredResponse(DNSQuestion& static ServerPolicy::SelectedBackend selectBackendForOutgoingQuery(DNSQuestion& dnsQuestion, const ServerPool& serverPool) { // Not exactly processQuery, but it works for now - auto closer = dnsQuestion.ids.getCloser(__func__, "processQuery"); // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay) + auto closer = dnsQuestion.ids.getCloser(__func__); // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay) const auto& policy = serverPool.policy != nullptr ? *serverPool.policy : *dnsdist::configuration::getCurrentRuntimeConfiguration().d_lbPolicy; const auto& servers = serverPool.getServers(); @@ -1812,7 +1812,7 @@ ProcessQueryResult processQuery(DNSQuestion& dnsQuestion, std::shared_ptr& downstream, uint16_t queryID, DNSQuestion& dnsQuestion, PacketBuffer& query, bool actuallySend) { - auto closer = dnsQuestion.ids.getCloser(__func__, "processUDPQuery"); // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay) + auto closer = dnsQuestion.ids.getCloser(__func__); // NOLINT(cppcoreguidelines-pro-bounds-array-to-pointer-decay) bool doh = dnsQuestion.ids.du != nullptr;