]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Added TCP high-water statistics variable
authorDiego Fronza <diego@isc.org>
Tue, 5 Nov 2019 20:48:47 +0000 (17:48 -0300)
committerOndřej Surý <ondrej@sury.org>
Wed, 6 Nov 2019 10:26:22 +0000 (11:26 +0100)
This variable will report the maximum number of simultaneous tcp clients
that BIND has served while running.

It can be verified by running rndc status, then inspect "tcp high-water:
count", or by generating statistics file, rndc stats, then inspect the
line with "TCP connection high-water" text.

The tcp-highwater variable is atomically updated based on an existing
tcp-quota system handled in ns/client.c.

(cherry picked from commit 66fe8627de2c8488b7808c7b342e6ceb51f65414)

bin/named/server.c
bin/named/statschannel.c
lib/ns/client.c
lib/ns/include/ns/stats.h

index 86d4eb82508351edfe66ba6dc0e8c0aa2f1d004f..6e54dcaeb42ed3d0cf97b3bcea934cfad1c046c9 100644 (file)
@@ -11583,6 +11583,11 @@ named_server_status(named_server_t *server, isc_buffer_t **text) {
                     isc_quota_getmax(&server->sctx->tcpquota));
        CHECK(putstr(text, line));
 
+       snprintf(line, sizeof(line), "TCP high-water: %u\n",
+                    (unsigned)ns_stats_get_counter(server->sctx->nsstats,
+                                         ns_statscounter_tcphighwater));
+       CHECK(putstr(text, line));
+
        if (server->reload_in_progress) {
                CHECK(putstr(text, "reload/reconfig in progress"));
        }
index b32d72f6d9efa3759184ce32bc0ba6e66f57fd8b..abaeed5e8ed697e10cfb0b2e557f1f10c55566dd 100644 (file)
@@ -234,6 +234,8 @@ init_desc(void) {
        SET_NSSTATDESC(invalidsig, "requests with invalid signature",
                       "ReqBadSIG");
        SET_NSSTATDESC(requesttcp, "TCP requests received", "ReqTCP");
+       SET_NSSTATDESC(tcphighwater, "TCP connection high-water",
+                      "TCPConnHighWater");
        SET_NSSTATDESC(authrej, "auth queries rejected", "AuthQryRej");
        SET_NSSTATDESC(recurserej, "recursive queries rejected", "RecQryRej");
        SET_NSSTATDESC(xfrrej, "transfer requests rejected", "XfrRej");
@@ -315,6 +317,7 @@ init_desc(void) {
                       "QryUsedStale");
        SET_NSSTATDESC(prefetch, "queries triggered prefetch", "Prefetch");
        SET_NSSTATDESC(keytagopt, "Keytag option received", "KeyTagOpt");
+
        INSIST(i == ns_statscounter_max);
 
        /* Initialize resolver statistics */
index e84a3c853cdf5d2d027445039b881a2270eb42f0..22a0cb662890c4253db4b67dfd5aa3b2dd69c0c9 100644 (file)
@@ -3465,7 +3465,6 @@ client_accept(ns_client_t *client) {
        isc_result_t result;
 
        CTRACE("accept");
-
        /*
         * Set up a new TCP connection. This means try to attach to the
         * TCP client quota (tcp-clients), but fail if we're over quota.
@@ -3516,6 +3515,12 @@ client_accept(ns_client_t *client) {
                RUNTIME_CHECK(result == ISC_R_SUCCESS);
        }
 
+       /* TCP high-water stats update. */
+       unsigned int curr_tcpquota = isc_quota_getused(&client->sctx->tcpquota);
+       ns_stats_update_if_greater(client->sctx->nsstats,
+                                  ns_statscounter_tcphighwater,
+                                  curr_tcpquota);
+
        /*
         * If this client was set up using get_client() or get_worker(),
         * then TCP is already marked active. However, if it was restarted
index f456a971b0a2b112b329dc45071e98aea31c544a..175813113ebffa3ff6f5f797499c533e044869cf 100644 (file)
@@ -102,7 +102,9 @@ enum {
        ns_statscounter_prefetch = 63,
        ns_statscounter_keytagopt = 64,
 
-       ns_statscounter_max = 65
+       ns_statscounter_tcphighwater = 65,
+
+       ns_statscounter_max = 66,
 };
 
 void