]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
dnsdist: Suppress a TSAN report about a TCP latency-related race 12103/head
authorRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 19 Oct 2022 20:23:01 +0000 (22:23 +0200)
committerRemi Gacogne <remi.gacogne@powerdns.com>
Wed, 19 Oct 2022 20:23:01 +0000 (22:23 +0200)
The race is real but we do not care much as this is only to provide
a rough metric.

pdns/dnsdist.hh
pdns/dnsdistdist/dnsdist-nghttp2.cc
pdns/dnsdistdist/dnsdist-tcp-downstream.cc
pdns/dnsdistdist/dnsdist-tsan.supp

index adc7e5c9b1ab90f7eaf2eb645b72f5e54c1f6271..7b8a0d2212750fdd204bb23df20382712d28412a 100644 (file)
@@ -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;
index 4288dc95a07ac0227146c695dce7c38f34381df7..f9311b8da2b04a534cff1499c9e840cae5e3de53 100644 (file)
@@ -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()));
index 72809fbbe7fd03d6881183d473fe730045aa2b0e..eb8d8f45e6360b6b1acf70b993208bc8f11c8771 100644 (file)
@@ -668,7 +668,7 @@ IOState TCPConnectionToBackend::handleResponse(std::shared_ptr<TCPConnectionToBa
   --conn->d_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 */
index e860b72b3e04e260e51d1f446bebe67d6a7843ef..f76eb6390ea683fd3313b6ef142fa77276b9967e 100644 (file)
@@ -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