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_status != NAMED_RELOAD_DONE) {
snprintf(line, sizeof(line), "reload/reconfig %s\n",
server->reload_status == NAMED_RELOAD_FAILED
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");
"QryUsedStale");
SET_NSSTATDESC(prefetch, "queries triggered prefetch", "Prefetch");
SET_NSSTATDESC(keytagopt, "Keytag option received", "KeyTagOpt");
+
INSIST(i == ns_statscounter_max);
/* Initialize resolver statistics */
#define ISC_STATS_VALID(x) ISC_MAGIC_VALID(x, ISC_STATS_MAGIC)
#if defined(_WIN32) && !defined(_WIN64)
-typedef atomic_int_fast32_t isc_stat_t;
+ typedef atomic_int_fast32_t isc__atomic_statcounter_t;
#else
-typedef atomic_int_fast64_t isc_stat_t;
+ typedef atomic_int_fast64_t isc__atomic_statcounter_t;
#endif
struct isc_stats {
- unsigned int magic;
- isc_mem_t *mctx;
- isc_refcount_t references;
- int ncounters;
- isc_stat_t *counters;
+ unsigned int magic;
+ isc_mem_t *mctx;
+ isc_refcount_t references;
+ int ncounters;
+ isc__atomic_statcounter_t *counters;
};
static isc_result_t
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.
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
ns_statscounter_prefetch = 63,
ns_statscounter_keytagopt = 64,
- ns_statscounter_max = 65
+ ns_statscounter_tcphighwater = 65,
+
+ ns_statscounter_max = 66,
};
void