From 3fbea485bd3a4997362a5927337cdb558ae3e5a9 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Wed, 19 Oct 2022 22:23:01 +0200 Subject: [PATCH] dnsdist: Suppress a TSAN report about a TCP latency-related race The race is real but we do not care much as this is only to provide a rough metric. --- pdns/dnsdist.hh | 7 +++++++ pdns/dnsdistdist/dnsdist-nghttp2.cc | 2 +- pdns/dnsdistdist/dnsdist-tcp-downstream.cc | 2 +- pdns/dnsdistdist/dnsdist-tsan.supp | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/pdns/dnsdist.hh b/pdns/dnsdist.hh index adc7e5c9b1..7b8a0d2212 100644 --- a/pdns/dnsdist.hh +++ b/pdns/dnsdist.hh @@ -914,12 +914,14 @@ public: upStatus = newStatus; if (!upStatus) { latencyUsec = 0.0; + latencyUsecTCP = 0.0; } } void setDown() { d_config.availability = Availability::Down; latencyUsec = 0.0; + latencyUsecTCP = 0.0; } void setAuto() { d_config.availability = Availability::Auto; @@ -971,6 +973,11 @@ public: tcpAvgConnectionDuration = (99.0 * tcpAvgConnectionDuration / 100.0) + (durationMs / 100.0); } + void updateTCPLatency(double udiff) + { + latencyUsecTCP = (127.0 * latencyUsecTCP / 128.0) + udiff / 128.0; + } + void incQueriesCount() { ++queries; diff --git a/pdns/dnsdistdist/dnsdist-nghttp2.cc b/pdns/dnsdistdist/dnsdist-nghttp2.cc index 4288dc95a0..f9311b8da2 100644 --- a/pdns/dnsdistdist/dnsdist-nghttp2.cc +++ b/pdns/dnsdistdist/dnsdist-nghttp2.cc @@ -137,7 +137,7 @@ void DoHConnectionToBackend::handleResponse(PendingRequest&& request) try { if (!d_healthCheckQuery) { const double udiff = request.d_query.d_idstate.sentTime.udiff(); - d_ds->latencyUsecTCP = (127.0 * d_ds->latencyUsecTCP / 128.0) + udiff / 128.0; + d_ds->updateTCPLatency(udiff); } request.d_sender->handleResponse(now, TCPResponse(std::move(request.d_buffer), std::move(request.d_query.d_idstate), shared_from_this())); diff --git a/pdns/dnsdistdist/dnsdist-tcp-downstream.cc b/pdns/dnsdistdist/dnsdist-tcp-downstream.cc index 72809fbbe7..eb8d8f45e6 100644 --- a/pdns/dnsdistdist/dnsdist-tcp-downstream.cc +++ b/pdns/dnsdistdist/dnsdist-tcp-downstream.cc @@ -668,7 +668,7 @@ IOState TCPConnectionToBackend::handleResponse(std::shared_ptrd_ds->outstanding; auto ids = std::move(it->second.d_query.d_idstate); const double udiff = ids.sentTime.udiff(); - conn->d_ds->latencyUsecTCP = (127.0 * conn->d_ds->latencyUsecTCP / 128.0) + udiff / 128.0; + conn->d_ds->updateTCPLatency(udiff); d_pendingResponses.erase(it); /* marking as idle for now, so we can accept new queries if our queues are empty */ diff --git a/pdns/dnsdistdist/dnsdist-tsan.supp b/pdns/dnsdistdist/dnsdist-tsan.supp index e860b72b3e..f76eb6390e 100644 --- a/pdns/dnsdistdist/dnsdist-tsan.supp +++ b/pdns/dnsdistdist/dnsdist-tsan.supp @@ -5,6 +5,7 @@ race:updateTCPLatency race:handleStats race:ClientState::updateTCPMetrics race:DownstreamState::updateTCPMetrics +race:DownstreamState::updateTCPLatency # There is a race when we update the status of a backend, # but eventual consistency is fine there race:DownstreamState::setDown -- 2.47.2