]> granicus.if.org Git - pdns/commitdiff
close #3467: dnsdist cache hits not accounted properly in latency stats. Now count...
authorbert hubert <bert.hubert@netherlabs.nl>
Sat, 27 Feb 2016 18:35:26 +0000 (19:35 +0100)
committerbert hubert <bert.hubert@netherlabs.nl>
Sat, 27 Feb 2016 18:36:06 +0000 (19:36 +0100)
pdns/dnsdist.cc

index 1b1ebb3ad497005377f17fc8e6bc0f1f6634c544..ae636aa6900cae1cf8811c0ad65c633496c396c0 100644 (file)
@@ -146,6 +146,17 @@ struct DelayedPacket
 
 DelayPipe<DelayedPacket> * g_delay = 0;
 
+static void doLatencyAverages(double udiff)
+{
+  auto doAvg = [](double& var, double n, double weight) {
+    var = (weight -1) * var/weight + n/weight;
+  };
+
+  doAvg(g_stats.latencyAvg100,     udiff,     100);
+  doAvg(g_stats.latencyAvg1000,    udiff,    1000);
+  doAvg(g_stats.latencyAvg10000,   udiff,   10000);
+  doAvg(g_stats.latencyAvg1000000, udiff, 1000000);
+}
 
 // listens on a dedicated socket, lobs answers from downstream servers to original requestors
 void* responderThread(std::shared_ptr<DownstreamState> state)
@@ -302,14 +313,7 @@ void* responderThread(std::shared_ptr<DownstreamState> state)
     else if(udiff < 1000000) g_stats.latency100_1000++;
     else g_stats.latencySlow++;
     
-    auto doAvg = [](double& var, double n, double weight) {
-      var = (weight -1) * var/weight + n/weight;
-    };
-
-    doAvg(g_stats.latencyAvg100,     udiff,     100);
-    doAvg(g_stats.latencyAvg1000,    udiff,    1000);
-    doAvg(g_stats.latencyAvg10000,   udiff,   10000);
-    doAvg(g_stats.latencyAvg1000000, udiff, 1000000);
+    doLatencyAverages(udiff);
 
     if (ids->origFD == origFD) {
 #ifdef HAVE_DNSCRYPT
@@ -835,6 +839,8 @@ try
           else
             sendto(cs->udpFD, cachedResponse, cachedResponseSize, 0, (struct sockaddr*)&remote, remote.getSocklen());
           g_stats.cacheHits++;
+          g_stats.latency0_1++;  // we're not going to measure this
+          doLatencyAverages(0);  // same
           continue;
         }
         g_stats.cacheMisses++;