]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
stats: add counter for timed out queries
authorVadim Fedorenko <vadfed@meta.com>
Mon, 17 Apr 2023 14:02:13 +0000 (07:02 -0700)
committerVadim Fedorenko <vadfed@meta.com>
Wed, 26 Apr 2023 10:27:25 +0000 (03:27 -0700)
Add counter `num_queries_timed_out` meaning queries that were sitting in the
socket queue and waiting to being processed too long. There is no reason
to process such queries, so let's drop it in the very beginning of the
pipeline.

Signed-off-by: Vadim Fedorenko <vadfed@meta.com>
daemon/remote.c
daemon/stats.c
daemon/worker.c
libunbound/unbound.h
smallapp/unbound-control.c

index 1d0a587145842109ac78f5142e9bd3cba18ba2c7..d8a3a6cafc1e02651436a3229770f87c525d62bc 100644 (file)
@@ -679,6 +679,8 @@ print_stats(RES* ssl, const char* nm, struct ub_stats_info* s)
                (unsigned long)s->svr.num_queries_missed_cache)) return 0;
        if(!ssl_printf(ssl, "%s.num.prefetch"SQ"%lu\n", nm,
                (unsigned long)s->svr.num_queries_prefetch)) return 0;
+       if(!ssl_printf(ssl, "%s.num.queries_timed_out"SQ"%lu\n", nm,
+               (unsigned long)s->svr.num_queries_timed_out)) return 0;
        if(!ssl_printf(ssl, "%s.num.expired"SQ"%lu\n", nm,
                (unsigned long)s->svr.ans_expired)) return 0;
        if(!ssl_printf(ssl, "%s.num.recursivereplies"SQ"%lu\n", nm,
index 4c7fcbe5a39ee857a2c4b6e23b1d2dd1f038aac6..38f4597b3a9a81b5a590f5524e636124e95efbf3 100644 (file)
@@ -432,6 +432,7 @@ void server_stats_add(struct ub_stats_info* total, struct ub_stats_info* a)
        total->svr.num_queries_ip_ratelimited += a->svr.num_queries_ip_ratelimited;
        total->svr.num_queries_missed_cache += a->svr.num_queries_missed_cache;
        total->svr.num_queries_prefetch += a->svr.num_queries_prefetch;
+       total->svr.num_queries_timed_out += a->svr.num_queries_timed_out;
        total->svr.sum_query_list_size += a->svr.sum_query_list_size;
        total->svr.ans_expired += a->svr.ans_expired;
 #ifdef USE_DNSCRYPT
index 85709af6eb937866f634c5f9ecb92105f40a84cd..63b8678e31e7f570fe87cfb013d04c63a4af358c 100644 (file)
@@ -1296,6 +1296,16 @@ worker_handle_request(struct comm_point* c, void* arg, int error,
                verbose(VERB_ALGO, "handle request called with err=%d", error);
                return 0;
        }
+
+       if (worker->env.cfg->sock_queue_timeout && timeval_isset(c->recv_tv)) {
+         c->recv_tv.tv_sec += worker->env.cfg->sock_queue_timeout;
+               if (timeval_smaller(c->recv_tv, worker->env.now_tv)) {
+               /* count and drop queries that were sitting in the socket queue too long */
+                       worker->stats.num_queries_timed_out++;
+                       return 0;
+               }
+       }
+
 #ifdef USE_DNSCRYPT
        repinfo->max_udp_size = worker->daemon->cfg->max_udp_size;
        if(!dnsc_handle_curved_request(worker->daemon->dnscenv, repinfo)) {
index f65cc2c58437f8787887fe09ab7cfa7626771414..f83a38f8ffd28c3a026b3197c8612de36da50e9b 100644 (file)
@@ -699,6 +699,8 @@ struct ub_server_stats {
        long long num_queries_missed_cache;
        /** number of prefetch queries - cachehits with prefetch */
        long long num_queries_prefetch;
+       /** number of queries which are too late to process */
+       long long num_queries_timed_out;
 
        /**
         * Sum of the querylistsize of the worker for
index 89cb16b9602e89a629d981586a7f49f84f8be9b3..d5f124b49bc003cf15724b659908a0a3824202d8 100644 (file)
@@ -208,6 +208,7 @@ static void pr_stats(const char* nm, struct ub_stats_info* s)
                s->svr.num_queries - s->svr.num_queries_missed_cache);
        PR_UL_NM("num.cachemiss", s->svr.num_queries_missed_cache);
        PR_UL_NM("num.prefetch", s->svr.num_queries_prefetch);
+       PR_UL_NM("num.queries_timed_out", s->svr.num_queries_timed_out);
        PR_UL_NM("num.expired", s->svr.ans_expired);
        PR_UL_NM("num.recursivereplies", s->mesh_replies_sent);
 #ifdef USE_DNSCRYPT