From 43316a40a09c57cf16f8c8d0cbd1aa01616fd71f Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 27 Oct 2021 13:25:41 +1100 Subject: [PATCH] Record how often DNS_R_COVERINGNSEC is returned from the cache reported as "covering nsec returned" when dumping cache stats and as "CoveringNSEC" in json and xml cache statistics. --- lib/dns/cache.c | 9 +++++++++ lib/dns/include/dns/stats.h | 3 ++- lib/dns/rbtdb.c | 5 ++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/lib/dns/cache.c b/lib/dns/cache.c index dbbe44e660..acf7767f1b 100644 --- a/lib/dns/cache.c +++ b/lib/dns/cache.c @@ -1260,6 +1260,9 @@ dns_cache_dumpstats(dns_cache_t *cache, FILE *fp) { fprintf(fp, "%20" PRIu64 " %s\n", values[dns_cachestatscounter_deletettl], "cache records deleted due to TTL expiration"); + fprintf(fp, "%20" PRIu64 " %s\n", + values[dns_cachestatscounter_coveringnsec], + "covering nsec returned"); fprintf(fp, "%20u %s\n", dns_db_nodecount(cache->db, dns_dbtree_main), "cache database nodes"); fprintf(fp, "%20u %s\n", dns_db_nodecount(cache->db, dns_dbtree_nsec), @@ -1328,6 +1331,8 @@ dns_cache_renderxml(dns_cache_t *cache, void *writer0) { writer)); TRY0(renderstat("DeleteTTL", values[dns_cachestatscounter_deletettl], writer)); + TRY0(renderstat("CoveringNSEC", + values[dns_cachestatscounter_coveringnsec], writer)); TRY0(renderstat("CacheNodes", dns_db_nodecount(cache->db, dns_dbtree_main), writer)); @@ -1393,6 +1398,10 @@ dns_cache_renderjson(dns_cache_t *cache, void *cstats0) { CHECKMEM(obj); json_object_object_add(cstats, "DeleteTTL", obj); + obj = json_object_new_int64(values[dns_cachestatscounter_coveringnsec]); + CHECKMEM(obj); + json_object_object_add(cstats, "CoveringNSEC", obj); + obj = json_object_new_int64( dns_db_nodecount(cache->db, dns_dbtree_main)); CHECKMEM(obj); diff --git a/lib/dns/include/dns/stats.h b/lib/dns/include/dns/stats.h index 4342fe41c5..6e61d279b7 100644 --- a/lib/dns/include/dns/stats.h +++ b/lib/dns/include/dns/stats.h @@ -119,8 +119,9 @@ enum { dns_cachestatscounter_querymisses = 4, dns_cachestatscounter_deletelru = 5, dns_cachestatscounter_deletettl = 6, + dns_cachestatscounter_coveringnsec = 7, - dns_cachestatscounter_max = 7, + dns_cachestatscounter_max = 8, /*% * Query statistics counters (obsolete). diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c index a7e2a654b1..4b954597dd 100644 --- a/lib/dns/rbtdb.c +++ b/lib/dns/rbtdb.c @@ -786,13 +786,16 @@ update_cachestats(dns_rbtdb_t *rbtdb, isc_result_t result) { } switch (result) { + case DNS_R_COVERINGNSEC: + isc_stats_increment(rbtdb->cachestats, + dns_cachestatscounter_coveringnsec); + /* FALLTHROUGH */ case ISC_R_SUCCESS: case DNS_R_CNAME: case DNS_R_DNAME: case DNS_R_DELEGATION: case DNS_R_NCACHENXDOMAIN: case DNS_R_NCACHENXRRSET: - case DNS_R_COVERINGNSEC: isc_stats_increment(rbtdb->cachestats, dns_cachestatscounter_hits); break;