bool applyRulesToResponse(const std::vector<dnsdist::rules::ResponseRuleAction>& respRuleActions, DNSResponse& dnsResponse)
{
pdns::trace::dnsdist::Tracer::Closer closer;
- if (dnsResponse.ids.tracingEnabled) {
- closer = dnsResponse.ids.d_OTTracer->openSpan("applyRulesToResponse", dnsResponse.ids.d_OTTracer->getLastSpanID());
+ if (auto tracer = dnsResponse.ids.getTracer(); tracer != nullptr && dnsResponse.ids.tracingEnabled) {
+ closer = tracer->openSpan("applyRulesToResponse", tracer->getLastSpanID());
}
if (respRuleActions.empty()) {
return true;
bool processResponseAfterRules(PacketBuffer& response, DNSResponse& dnsResponse, [[maybe_unused]] bool muted)
{
pdns::trace::dnsdist::Tracer::Closer closer;
- if (dnsResponse.ids.tracingEnabled) {
- closer = dnsResponse.ids.d_OTTracer->openSpan("processResponseAfterRules");
+ if (auto tracer = dnsResponse.ids.getTracer(); tracer != nullptr && dnsResponse.ids.tracingEnabled) {
+ closer = tracer->openSpan("processResponseAfterRules");
}
bool zeroScope = false;
if (!fixUpResponse(response, dnsResponse.ids.qname, dnsResponse.ids.origFlags, dnsResponse.ids.ednsAdded, dnsResponse.ids.ecsAdded, dnsResponse.ids.useZeroScope ? &zeroScope : nullptr)) {
- if (dnsResponse.ids.tracingEnabled) {
- dnsResponse.ids.d_OTTracer->setSpanAttribute(closer.getSpanID(), "result", AnyValue{"fixUpResponse->false"});
+ if (auto tracer = dnsResponse.ids.getTracer(); tracer != nullptr && dnsResponse.ids.tracingEnabled) {
+ tracer->setSpanAttribute(closer.getSpanID(), "result", AnyValue{"fixUpResponse->false"});
}
return false;
}
}
{
pdns::trace::dnsdist::Tracer::Closer cacheInsertCloser;
- if (dnsResponse.ids.tracingEnabled) {
- cacheInsertCloser = dnsResponse.ids.d_OTTracer->openSpan("packetCacheInsert", closer.getSpanID());
+ if (auto tracer = dnsResponse.ids.getTracer(); tracer != nullptr && dnsResponse.ids.tracingEnabled) {
+ cacheInsertCloser = tracer->openSpan("packetCacheInsert", closer.getSpanID());
}
dnsResponse.ids.packetCache->insert(cacheKey, zeroScope ? boost::none : 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);
}
bool processResponse(PacketBuffer& response, DNSResponse& dnsResponse, bool muted)
{
pdns::trace::dnsdist::Tracer::Closer closer;
- if (dnsResponse.ids.tracingEnabled) {
- closer = dnsResponse.ids.d_OTTracer->openSpan("processResponse");
+ if (auto tracer = dnsResponse.ids.getTracer(); tracer != nullptr && dnsResponse.ids.tracingEnabled) {
+ closer = tracer->openSpan("processResponse");
}
const auto& chains = dnsdist::configuration::getCurrentRuntimeConfiguration().d_ruleChains;
static bool applyRulesToQuery(DNSQuestion& dnsQuestion, const timespec& now)
{
- auto closer = dnsQuestion.ids.d_OTTracer->openSpan("applyRulesToQuery", dnsQuestion.ids.d_OTTracer->getLastSpanID());
+ pdns::trace::dnsdist::Tracer::Closer closer;
+ if (auto tracer = dnsQuestion.ids.getTracer(); tracer != nullptr) {
+ closer = tracer->openSpan("applyRulesToQuery", tracer->getLastSpanID());
+ }
if (g_rings.shouldRecordQueries()) {
g_rings.insertQuery(now, dnsQuestion.ids.origRemote, dnsQuestion.ids.qname, dnsQuestion.ids.qtype, dnsQuestion.getData().size(), *dnsQuestion.getHeader(), dnsQuestion.getProtocol());
}
static ServerPolicy::SelectedBackend selectBackendForOutgoingQuery(DNSQuestion& dnsQuestion, const ServerPool& serverPool)
{
- auto closer = dnsQuestion.ids.d_OTTracer->openSpan("selectBackendForOutgoingQuery", dnsQuestion.ids.d_OTTracer->getLastSpanID());
+ pdns::trace::dnsdist::Tracer::Closer closer;
+ if (auto tracer = dnsQuestion.ids.getTracer(); tracer != nullptr && dnsQuestion.ids.tracingEnabled) {
+ closer = tracer->openSpan("selectBackendForOutgoingQuery", tracer->getLastSpanID());
+ }
const auto& policy = serverPool.policy != nullptr ? *serverPool.policy : *dnsdist::configuration::getCurrentRuntimeConfiguration().d_lbPolicy;
const auto& servers = serverPool.getServers();
auto selectedBackend = policy.getSelectedBackend(servers, dnsQuestion);
- if (dnsQuestion.ids.tracingEnabled) {
- dnsQuestion.ids.d_OTTracer->setSpanAttribute(closer.getSpanID(), "backend.name", AnyValue{selectedBackend->getNameWithAddr()});
- dnsQuestion.ids.d_OTTracer->setSpanAttribute(closer.getSpanID(), "backend.id", AnyValue{boost::uuids::to_string(selectedBackend->getID())});
+ if (auto tracer = dnsQuestion.ids.getTracer(); tracer != nullptr && dnsQuestion.ids.tracingEnabled) {
+ tracer->setSpanAttribute(closer.getSpanID(), "backend.name", AnyValue{selectedBackend->getNameWithAddr()});
+ tracer->setSpanAttribute(closer.getSpanID(), "backend.id", AnyValue{boost::uuids::to_string(selectedBackend->getID())});
}
return selectedBackend;
ProcessQueryResult processQuery(DNSQuestion& dnsQuestion, std::shared_ptr<DownstreamState>& selectedBackend)
{
- auto closer = dnsQuestion.ids.d_OTTracer->openSpan("processQuery", dnsQuestion.ids.d_OTTracer->getLastSpanID());
+ pdns::trace::dnsdist::Tracer::Closer closer;
+ if (auto tracer = dnsQuestion.ids.getTracer(); tracer != nullptr) {
+ closer = tracer->openSpan("processQuery", tracer->getLastSpanID());
+ }
const uint16_t queryId = ntohs(dnsQuestion.getHeader()->id);
try {
/* we need an accurate ("real") value for the response and
bool assignOutgoingUDPQueryToBackend(std::shared_ptr<DownstreamState>& downstream, uint16_t queryID, DNSQuestion& dnsQuestion, PacketBuffer& query, bool actuallySend)
{
- auto closer = dnsQuestion.ids.d_OTTracer->openSpan("assignOutgoingUDPQueryToBackend", dnsQuestion.ids.d_OTTracer->getLastSpanID());
+ pdns::trace::dnsdist::Tracer::Closer closer;
+ if (auto tracer = dnsQuestion.ids.getTracer(); tracer != nullptr && dnsQuestion.ids.tracingEnabled) {
+ closer = tracer->openSpan("assignOutgoingUDPQueryToBackend", tracer->getLastSpanID());
+ }
bool doh = dnsQuestion.ids.du != nullptr;
uint16_t queryId = 0;
InternalQueryState ids;
- auto closer = ids.d_OTTracer->openSpan("processUDPQuery");
+ pdns::trace::dnsdist::Tracer::Closer closer;
+ if (auto tracer = ids.getTracer(); tracer != nullptr) {
+ closer = tracer->openSpan("processUDPQuery");
+ }
ids.cs = &clientState;
ids.origRemote = remote;