forwardedOverUDP = false;
}
- if (dq.ids.packetCache->get(dq, dq.getHeader()->id, &dq.ids.cacheKey, dq.ids.subnet, dq.ids.dnssecOK, forwardedOverUDP, allowExpired, false, true, true)) {
+ /* we do not record a miss for queries received over DoH and forwarded over TCP
+ yet, as we will do a second-lookup */
+ if (dq.ids.packetCache->get(dq, dq.getHeader()->id, &dq.ids.cacheKey, dq.ids.subnet, dq.ids.dnssecOK, forwardedOverUDP, allowExpired, false, true, (dq.ids.protocol != dnsdist::Protocol::DoH || forwardedOverUDP) ? true : false)) {
restoreFlags(dq.getHeader(), dq.ids.origFlags);
}
else if (dq.ids.protocol == dnsdist::Protocol::DoH && !forwardedOverUDP) {
/* do a second-lookup for UDP responses, but we do not want TC=1 answers */
- if (dq.ids.packetCache->get(dq, dq.getHeader()->id, &dq.ids.cacheKeyUDP, dq.ids.subnet, dq.ids.dnssecOK, true, allowExpired, false, false, false)) {
+ if (dq.ids.packetCache->get(dq, dq.getHeader()->id, &dq.ids.cacheKeyUDP, dq.ids.subnet, dq.ids.dnssecOK, true, allowExpired, false, false, true)) {
if (!prepareOutgoingResponse(holders, *dq.ids.cs, dq, true)) {
return ProcessQueryResult::Drop;
}
self.assertIn(name, stats)
return int(stats[name])
+ def getPoolMetric(self, poolName, metricName):
+ headers = {'x-api-key': self._webServerAPIKey}
+ url = 'http://127.0.0.1:' + str(self._webServerPort) + '/api/v1/servers/localhost/pool?name=' + poolName
+ r = requests.get(url, headers=headers, timeout=self._webTimeout)
+ self.assertTrue(r)
+ self.assertEqual(r.status_code, 200)
+ self.assertTrue(r.json())
+ content = r.json()
+ stats = content['stats']
+ self.assertIn(metricName, stats)
+ return int(stats[metricName])
+
def testRCodeIncreaseMetrics(self):
"""
Metrics: Check that metrics are correctly updated for RCodeAction
# self-generated responses should not increase this metric
self.assertEqual(self.getMetric('servfail-responses'), servfailBackendResponses)
+
def testCacheMetrics(self):
"""
Metrics: Check that metrics are correctly updated for cache misses and hits
responsesBefore = self.getMetric('responses')
cacheHitsBefore = self.getMetric('cache-hits')
cacheMissesBefore = self.getMetric('cache-misses')
+ poolCacheHitsBefore = self.getPoolMetric('cache', 'cacheHits')
+ poolCacheMissesBefore = self.getPoolMetric('cache', 'cacheMisses')
sender = getattr(self, method)
# first time, cache miss
self.assertEqual(self.getMetric('responses'), responsesBefore + 2)
self.assertEqual(self.getMetric('cache-hits'), cacheHitsBefore + 1)
self.assertEqual(self.getMetric('cache-misses'), cacheMissesBefore + 1)
+ self.assertEqual(self.getPoolMetric('cache', 'cacheHits'), poolCacheHitsBefore + 1)
+ self.assertEqual(self.getPoolMetric('cache', 'cacheMisses'), poolCacheMissesBefore + 1)
def testServFailMetrics(self):
"""