move ADB and resolver stats out of the view object

for better object separation, ADB and resolver statistics counters
are now stored in the ADB and resolver objects themsevles, rather than
in the associated view.
This commit is contained in:
Evan Hunt 2022-05-11 15:38:54 -07:00
parent e5e2d7814e
commit 3027f59f6f
8 changed files with 226 additions and 223 deletions

View file

@ -4661,9 +4661,10 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, cfg_obj_t *config,
"reusing existing cache");
dns_cache_attach(pview->cache, &cache);
}
dns_view_getresstats(pview, &resstats);
dns_view_getresquerystats(pview,
&resquerystats);
dns_resolver_getstats(pview->resolver,
&resstats);
dns_resolver_getquerystats(pview->resolver,
&resquerystats);
dns_view_detach(&pview);
}
}
@ -4731,22 +4732,22 @@ configure_view(dns_view_t *view, dns_viewlist_t *viewlist, cfg_obj_t *config,
goto cleanup;
}
if (resstats == NULL) {
CHECK(isc_stats_create(mctx, &resstats,
dns_resstatscounter_max));
}
dns_view_setresstats(view, resstats);
if (resquerystats == NULL) {
CHECK(dns_rdatatypestats_create(mctx, &resquerystats));
}
dns_view_setresquerystats(view, resquerystats);
ndisp = 4 * ISC_MIN(named_g_udpdisp, MAX_UDP_DISPATCH);
CHECK(dns_view_createresolver(
view, named_g_taskmgr, RESOLVER_NTASKS_PERCPU * named_g_cpus,
ndisp, named_g_netmgr, named_g_timermgr, resopts,
named_g_dispatchmgr, dispatch4, dispatch6));
if (resstats == NULL) {
CHECK(isc_stats_create(mctx, &resstats,
dns_resstatscounter_max));
}
dns_resolver_setstats(view->resolver, resstats);
if (resquerystats == NULL) {
CHECK(dns_rdatatypestats_create(mctx, &resquerystats));
}
dns_resolver_setquerystats(view->resolver, resquerystats);
if (dscp4 == -1) {
dscp4 = named_g_dscp;
}

View file

@ -25,6 +25,7 @@
#include <isc/string.h>
#include <isc/util.h>
#include <dns/adb.h>
#include <dns/cache.h>
#include <dns/db.h>
#include <dns/opcode.h>
@ -2239,6 +2240,9 @@ generatexml(named_server_t *server, uint32_t flags, int *buflen,
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "views"));
while (view != NULL &&
((flags & (STATS_XML_SERVER | STATS_XML_ZONES)) != 0)) {
isc_stats_t *istats = NULL;
dns_stats_t *dstats = NULL;
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "view"));
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "name",
ISC_XMLCHAR view->name));
@ -2261,25 +2265,29 @@ generatexml(named_server_t *server, uint32_t flags, int *buflen,
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
ISC_XMLCHAR "resqtype"));
if (view->resquerystats != NULL) {
dns_resolver_getquerystats(view->resolver, &dstats);
if (dstats != NULL) {
dumparg.result = ISC_R_SUCCESS;
dns_rdatatypestats_dump(view->resquerystats,
rdtypestat_dump, &dumparg, 0);
dns_rdatatypestats_dump(dstats, rdtypestat_dump,
&dumparg, 0);
CHECK(dumparg.result);
}
dns_stats_detach(&dstats);
TRY0(xmlTextWriterEndElement(writer));
/* <resstats> */
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
ISC_XMLCHAR "resstats"));
if (view->resstats != NULL) {
CHECK(dump_counters(view->resstats, isc_statsformat_xml,
writer, NULL, resstats_xmldesc,
dns_resolver_getstats(view->resolver, &istats);
if (istats != NULL) {
CHECK(dump_counters(istats, isc_statsformat_xml, writer,
NULL, resstats_xmldesc,
dns_resstatscounter_max,
resstats_index, resstat_values,
ISC_STATSDUMP_VERBOSE));
}
isc_stats_detach(&istats);
TRY0(xmlTextWriterEndElement(writer)); /* </resstats> */
cacherrstats = dns_db_getrrsetstats(view->cachedb);
@ -2300,13 +2308,10 @@ generatexml(named_server_t *server, uint32_t flags, int *buflen,
TRY0(xmlTextWriterStartElement(writer, ISC_XMLCHAR "counters"));
TRY0(xmlTextWriterWriteAttribute(writer, ISC_XMLCHAR "type",
ISC_XMLCHAR "adbstat"));
if (view->adbstats != NULL) {
CHECK(dump_counters(view->adbstats, isc_statsformat_xml,
writer, NULL, adbstats_xmldesc,
dns_adbstats_max, adbstats_index,
adbstat_values,
ISC_STATSDUMP_VERBOSE));
}
CHECK(dump_counters(
dns_adb_getstats(view->adb), isc_statsformat_xml,
writer, NULL, adbstats_xmldesc, dns_adbstats_max,
adbstats_index, adbstat_values, ISC_STATSDUMP_VERBOSE));
TRY0(xmlTextWriterEndElement(writer)); /* </adbstats> */
/* <cachestats> */
@ -2993,15 +2998,15 @@ generatejson(named_server_t *server, size_t *msglen, const char **msg,
}
if ((flags & STATS_JSON_SERVER) != 0) {
json_object *res;
dns_stats_t *dstats;
isc_stats_t *istats;
json_object *res = NULL;
dns_stats_t *dstats = NULL;
isc_stats_t *istats = NULL;
res = json_object_new_object();
CHECKMEM(res);
json_object_object_add(v, "resolver", res);
istats = view->resstats;
dns_resolver_getstats(view->resolver, &istats);
if (istats != NULL) {
counters = json_object_new_object();
CHECKMEM(counters);
@ -3021,9 +3026,11 @@ generatejson(named_server_t *server, size_t *msglen, const char **msg,
json_object_object_add(res, "stats",
counters);
isc_stats_detach(&istats);
}
dstats = view->resquerystats;
dns_resolver_getquerystats(view->resolver,
&dstats);
if (dstats != NULL) {
counters = json_object_new_object();
CHECKMEM(counters);
@ -3041,6 +3048,7 @@ generatejson(named_server_t *server, size_t *msglen, const char **msg,
json_object_object_add(res, "qtypes",
counters);
dns_stats_detach(&dstats);
}
dstats = dns_db_getrrsetstats(view->cachedb);
@ -3076,7 +3084,7 @@ generatejson(named_server_t *server, size_t *msglen, const char **msg,
json_object_object_add(res, "cachestats",
counters);
istats = view->adbstats;
istats = dns_adb_getstats(view->adb);
if (istats != NULL) {
counters = json_object_new_object();
CHECKMEM(counters);
@ -3926,7 +3934,9 @@ named_stats_dump(named_server_t *server, FILE *fp) {
for (view = ISC_LIST_HEAD(server->viewlist); view != NULL;
view = ISC_LIST_NEXT(view, link))
{
if (view->resquerystats == NULL) {
dns_stats_t *dstats = NULL;
dns_resolver_getquerystats(view->resolver, &dstats);
if (dstats == NULL) {
continue;
}
if (strcmp(view->name, "_default") == 0) {
@ -3934,8 +3944,8 @@ named_stats_dump(named_server_t *server, FILE *fp) {
} else {
fprintf(fp, "[View: %s]\n", view->name);
}
dns_rdatatypestats_dump(view->resquerystats, rdtypestat_dump,
&dumparg, 0);
dns_rdatatypestats_dump(dstats, rdtypestat_dump, &dumparg, 0);
dns_stats_detach(&dstats);
}
fprintf(fp, "++ Name Server Statistics ++\n");
@ -3957,7 +3967,9 @@ named_stats_dump(named_server_t *server, FILE *fp) {
for (view = ISC_LIST_HEAD(server->viewlist); view != NULL;
view = ISC_LIST_NEXT(view, link))
{
if (view->resstats == NULL) {
isc_stats_t *istats = NULL;
dns_resolver_getstats(view->resolver, &istats);
if (istats == NULL) {
continue;
}
if (strcmp(view->name, "_default") == 0) {
@ -3965,10 +3977,10 @@ named_stats_dump(named_server_t *server, FILE *fp) {
} else {
fprintf(fp, "[View: %s]\n", view->name);
}
(void)dump_counters(view->resstats, isc_statsformat_file, fp,
NULL, resstats_desc,
dns_resstatscounter_max, resstats_index,
resstat_values, 0);
(void)dump_counters(istats, isc_statsformat_file, fp, NULL,
resstats_desc, dns_resstatscounter_max,
resstats_index, resstat_values, 0);
isc_stats_detach(&istats);
}
fprintf(fp, "++ Cache Statistics ++\n");
@ -4021,7 +4033,9 @@ named_stats_dump(named_server_t *server, FILE *fp) {
for (view = ISC_LIST_HEAD(server->viewlist); view != NULL;
view = ISC_LIST_NEXT(view, link))
{
if (view->adbstats == NULL) {
isc_stats_t *adbstats = dns_adb_getstats(view->adb);
if (adbstats == NULL) {
continue;
}
if (strcmp(view->name, "_default") == 0) {
@ -4029,8 +4043,8 @@ named_stats_dump(named_server_t *server, FILE *fp) {
} else {
fprintf(fp, "[View: %s]\n", view->name);
}
(void)dump_counters(view->adbstats, isc_statsformat_file, fp,
NULL, adbstats_desc, dns_adbstats_max,
(void)dump_counters(adbstats, isc_statsformat_file, fp, NULL,
adbstats_desc, dns_adbstats_max,
adbstats_index, adbstat_values, 0);
}

View file

@ -115,6 +115,8 @@ struct dns_adb {
isc_ht_t *entrybuckets;
isc_rwlock_t entries_lock;
isc_stats_t *stats;
isc_event_t cevent;
bool cevent_out;
atomic_bool exiting;
@ -487,10 +489,8 @@ DP(int level, const char *format, ...) {
* Increment resolver-related statistics counters.
*/
static void
inc_stats(dns_adb_t *adb, isc_statscounter_t counter) {
if (adb->view->resstats != NULL) {
isc_stats_increment(adb->view->resstats, counter);
}
inc_resstats(dns_adb_t *adb, isc_statscounter_t counter) {
dns_resolver_incstats(adb->view->resolver, counter);
}
/*%
@ -498,22 +498,22 @@ inc_stats(dns_adb_t *adb, isc_statscounter_t counter) {
*/
static void
set_adbstat(dns_adb_t *adb, uint64_t val, isc_statscounter_t counter) {
if (adb->view->adbstats != NULL) {
isc_stats_set(adb->view->adbstats, val, counter);
if (adb->stats != NULL) {
isc_stats_set(adb->stats, val, counter);
}
}
static void
dec_adbstats(dns_adb_t *adb, isc_statscounter_t counter) {
if (adb->view->adbstats != NULL) {
isc_stats_decrement(adb->view->adbstats, counter);
if (adb->stats != NULL) {
isc_stats_decrement(adb->stats, counter);
}
}
static void
inc_adbstats(dns_adb_t *adb, isc_statscounter_t counter) {
if (adb->view->adbstats != NULL) {
isc_stats_increment(adb->view->adbstats, counter);
if (adb->stats != NULL) {
isc_stats_increment(adb->stats, counter);
}
}
@ -2075,6 +2075,7 @@ destroy(dns_adb_t *adb) {
isc_rwlock_destroy(&adb->entries_lock);
isc_mutex_destroy(&adb->lock);
isc_stats_detach(&adb->stats);
isc_mem_putanddetach(&adb->mctx, adb, sizeof(dns_adb_t));
}
@ -2129,7 +2130,7 @@ dns_adb_create(isc_mem_t *mem, dns_view_t *view, isc_taskmgr_t *taskmgr,
isc_task_setname(adb->task, "ADB", adb);
result = isc_stats_create(adb->mctx, &view->adbstats, dns_adbstats_max);
result = isc_stats_create(adb->mctx, &adb->stats, dns_adbstats_max);
if (result != ISC_R_SUCCESS) {
goto free_task;
}
@ -3244,7 +3245,7 @@ fetch_callback(isc_task_t *task, isc_event_t *ev) {
} else {
name->fetch_err = FIND_ERR_NXRRSET;
}
inc_stats(adb, dns_resstatscounter_gluefetchv4fail);
inc_resstats(adb, dns_resstatscounter_gluefetchv4fail);
} else {
DP(NCACHE_LEVEL,
"adb fetch name %p: "
@ -3257,7 +3258,7 @@ fetch_callback(isc_task_t *task, isc_event_t *ev) {
} else {
name->fetch6_err = FIND_ERR_NXRRSET;
}
inc_stats(adb, dns_resstatscounter_gluefetchv6fail);
inc_resstats(adb, dns_resstatscounter_gluefetchv6fail);
}
goto out;
}
@ -3301,11 +3302,11 @@ fetch_callback(isc_task_t *task, isc_event_t *ev) {
if (address_type == DNS_ADBFIND_INET) {
name->expire_v4 = ISC_MIN(name->expire_v4, now + 10);
name->fetch_err = FIND_ERR_FAILURE;
inc_stats(adb, dns_resstatscounter_gluefetchv4fail);
inc_resstats(adb, dns_resstatscounter_gluefetchv4fail);
} else {
name->expire_v6 = ISC_MIN(name->expire_v6, now + 10);
name->fetch6_err = FIND_ERR_FAILURE;
inc_stats(adb, dns_resstatscounter_gluefetchv6fail);
inc_resstats(adb, dns_resstatscounter_gluefetchv6fail);
}
goto out;
}
@ -3396,10 +3397,10 @@ fetch_name(dns_adbname_t *adbname, bool start_at_zone, unsigned int depth,
if (type == dns_rdatatype_a) {
adbname->fetch_a = fetch;
inc_stats(adb, dns_resstatscounter_gluefetchv4);
inc_resstats(adb, dns_resstatscounter_gluefetchv4);
} else {
adbname->fetch_aaaa = fetch;
inc_stats(adb, dns_resstatscounter_gluefetchv6);
inc_resstats(adb, dns_resstatscounter_gluefetchv6);
}
fetch = NULL; /* Keep us from cleaning this up below. */
@ -4022,3 +4023,10 @@ dns_adb_endudpfetch(dns_adb_t *adb, dns_adbaddrinfo_t *addr) {
REQUIRE(atomic_fetch_sub_release(&addr->entry->active, 1) != 0);
}
isc_stats_t *
dns_adb_getstats(dns_adb_t *adb) {
REQUIRE(DNS_ADB_VALID(adb));
return (adb->stats);
}

View file

@ -807,4 +807,12 @@ dns_adb_endudpfetch(dns_adb_t *adb, dns_adbaddrinfo_t *addr);
*\li addr be valid.
*/
isc_stats_t *
dns_adb_getstats(dns_adb_t *adb);
/*%<
* Get the adb statistics counter set for 'adb'.
*
* Requires:
* \li 'adb' is valid.
*/
ISC_LANG_ENDDECLS

View file

@ -736,4 +736,64 @@ void
dns_resolver_setfuzzing(void);
#endif /* ifdef ENABLE_AFL */
void
dns_resolver_setstats(dns_resolver_t *res, isc_stats_t *stats);
/*%<
* Set a general resolver statistics counter set 'stats' for 'res'.
*
* Requires:
* \li 'res' is valid.
*
*\li stats is a valid statistics supporting resolver statistics counters
* (see dns/stats.h).
*/
void
dns_resolver_getstats(dns_resolver_t *res, isc_stats_t **statsp);
/*%<
* Get the general statistics counter set for 'res'. If a statistics set is
* set '*statsp' will be attached to the set; otherwise, '*statsp' will be
* untouched.
*
* Requires:
* \li 'res' is valid.
*
*\li 'statsp' != NULL && '*statsp' != NULL
*/
void
dns_resolver_incstats(dns_resolver_t *res, isc_statscounter_t counter);
/*%<
* Increment the specified statistics counter in res->stats, if res->stats
* is set.
*
* Requires:
* \li 'res' is valid.
*/
void
dns_resolver_setquerystats(dns_resolver_t *res, dns_stats_t *stats);
/*%<
* Set a statistics counter set of rdata type, 'stats', for 'res'. Once the
* statistic set is installed, the resolver will count outgoing queries
* per rdata type.
*
* Requires:
* \li 'res' is valid.
*
*\li stats is a valid statistics created by dns_rdatatypestats_create().
*/
void
dns_resolver_getquerystats(dns_resolver_t *res, dns_stats_t **statsp);
/*%<
* Get the rdatatype statistics counter set for 'res'. If a statistics set is
* set '*statsp' will be attached to the set; otherwise, '*statsp' will be
* untouched.
*
* Requires:
* \li 'res' is valid.
*
*\li 'statsp' != NULL && '*statsp' != NULL
*/
ISC_LANG_ENDDECLS

View file

@ -101,16 +101,13 @@ struct dns_view {
dns_keytable_t *secroots_priv;
dns_ntatable_t *ntatable_priv;
isc_mutex_t lock;
bool frozen;
isc_task_t *task;
isc_event_t resevent;
isc_event_t adbevent;
isc_event_t reqevent;
isc_stats_t *adbstats;
isc_stats_t *resstats;
dns_stats_t *resquerystats;
bool cacheshared;
isc_mutex_t lock;
bool frozen;
isc_task_t *task;
isc_event_t resevent;
isc_event_t adbevent;
isc_event_t reqevent;
bool cacheshared;
/* Configurable data. */
dns_transport_list_t *transports;
@ -1018,82 +1015,6 @@ dns_view_freezezones(dns_view_t *view, bool freeze);
* \li 'view' is valid.
*/
void
dns_view_setadbstats(dns_view_t *view, isc_stats_t *stats);
/*%<
* Set a adb statistics set 'stats' for 'view'.
*
* Requires:
* \li 'view' is valid and is not frozen.
*
*\li stats is a valid statistics supporting adb statistics
* (see dns/stats.h).
*/
void
dns_view_getadbstats(dns_view_t *view, isc_stats_t **statsp);
/*%<
* Get the adb statistics counter set for 'view'. If a statistics set is
* set '*statsp' will be attached to the set; otherwise, '*statsp' will be
* untouched.
*
* Requires:
* \li 'view' is valid and is not frozen.
*
*\li 'statsp' != NULL && '*statsp' != NULL
*/
void
dns_view_setresstats(dns_view_t *view, isc_stats_t *stats);
/*%<
* Set a general resolver statistics counter set 'stats' for 'view'.
*
* Requires:
* \li 'view' is valid and is not frozen.
*
*\li stats is a valid statistics supporting resolver statistics counters
* (see dns/stats.h).
*/
void
dns_view_getresstats(dns_view_t *view, isc_stats_t **statsp);
/*%<
* Get the general statistics counter set for 'view'. If a statistics set is
* set '*statsp' will be attached to the set; otherwise, '*statsp' will be
* untouched.
*
* Requires:
* \li 'view' is valid and is not frozen.
*
*\li 'statsp' != NULL && '*statsp' != NULL
*/
void
dns_view_setresquerystats(dns_view_t *view, dns_stats_t *stats);
/*%<
* Set a statistics counter set of rdata type, 'stats', for 'view'. Once the
* statistic set is installed, view's resolver will count outgoing queries
* per rdata type.
*
* Requires:
* \li 'view' is valid and is not frozen.
*
*\li stats is a valid statistics created by dns_rdatatypestats_create().
*/
void
dns_view_getresquerystats(dns_view_t *view, dns_stats_t **statsp);
/*%<
* Get the rdatatype statistics counter set for 'view'. If a statistics set is
* set '*statsp' will be attached to the set; otherwise, '*statsp' will be
* untouched.
*
* Requires:
* \li 'view' is valid and is not frozen.
*
*\li 'statsp' != NULL && '*statsp' != NULL
*/
bool
dns_view_iscacheshared(dns_view_t *view);
/*%<

View file

@ -556,6 +556,8 @@ struct dns_resolver {
unsigned int maxdepth;
unsigned int maxqueries;
isc_result_t quotaresp[2];
isc_stats_t *stats;
dns_stats_t *querystats;
/* Additions for serve-stale feature. */
unsigned int retryinterval; /* in milliseconds */
@ -911,15 +913,22 @@ rctx_ncache(respctx_t *rctx);
*/
static void
inc_stats(dns_resolver_t *res, isc_statscounter_t counter) {
if (res->view->resstats != NULL) {
isc_stats_increment(res->view->resstats, counter);
if (res->stats != NULL) {
isc_stats_increment(res->stats, counter);
}
}
static void
dec_stats(dns_resolver_t *res, isc_statscounter_t counter) {
if (res->view->resstats != NULL) {
isc_stats_decrement(res->view->resstats, counter);
if (res->stats != NULL) {
isc_stats_decrement(res->stats, counter);
}
}
static void
set_stats(dns_resolver_t *res, isc_statscounter_t counter, uint64_t val) {
if (res->stats != NULL) {
isc_stats_set(res->stats, val, counter);
}
}
@ -2933,8 +2942,8 @@ resquery_connected(isc_result_t eresult, isc_region_t *region, void *arg) {
} else {
inc_stats(res, dns_resstatscounter_queryv6);
}
if (res->view->resquerystats != NULL) {
dns_rdatatypestats_increment(res->view->resquerystats,
if (res->querystats != NULL) {
dns_rdatatypestats_increment(res->querystats,
fctx->type);
}
break;
@ -10092,6 +10101,13 @@ destroy(dns_resolver_t *res) {
REQUIRE(atomic_load_acquire(&res->nfctx) == 0);
if (res->querystats != NULL) {
dns_stats_detach(&res->querystats);
}
if (res->stats != NULL) {
isc_stats_detach(&res->stats);
}
isc_mutex_destroy(&res->primelock);
isc_mutex_destroy(&res->lock);
for (i = 0; i < res->nbuckets; i++) {
@ -10243,11 +10259,6 @@ dns_resolver_create(dns_view_t *view, isc_taskmgr_t *taskmgr,
goto cleanup_res;
}
if (view->resstats != NULL) {
isc_stats_set(view->resstats, ntasks,
dns_resstatscounter_buckets);
}
res->buckets = isc_mem_get(view->mctx,
ntasks * sizeof(res->buckets[0]));
for (uint32_t i = 0; i < ntasks; i++) {
@ -11566,3 +11577,49 @@ dns_resolver_setnonbackofftries(dns_resolver_t *resolver, unsigned int tries) {
resolver->nonbackofftries = tries;
}
void
dns_resolver_setstats(dns_resolver_t *res, isc_stats_t *stats) {
REQUIRE(VALID_RESOLVER(res));
REQUIRE(res->stats == NULL);
isc_stats_attach(stats, &res->stats);
/* initialize the bucket "counter"; it's a static value */
set_stats(res, dns_resstatscounter_buckets, res->nbuckets);
}
void
dns_resolver_getstats(dns_resolver_t *res, isc_stats_t **statsp) {
REQUIRE(VALID_RESOLVER(res));
REQUIRE(statsp != NULL && *statsp == NULL);
if (res->stats != NULL) {
isc_stats_attach(res->stats, statsp);
}
}
void
dns_resolver_incstats(dns_resolver_t *res, isc_statscounter_t counter) {
REQUIRE(VALID_RESOLVER(res));
isc_stats_increment(res->stats, counter);
}
void
dns_resolver_setquerystats(dns_resolver_t *res, dns_stats_t *stats) {
REQUIRE(VALID_RESOLVER(res));
REQUIRE(res->querystats == NULL);
dns_stats_attach(stats, &res->querystats);
}
void
dns_resolver_getquerystats(dns_resolver_t *res, dns_stats_t **statsp) {
REQUIRE(VALID_RESOLVER(res));
REQUIRE(statsp != NULL && *statsp == NULL);
if (res->querystats != NULL) {
dns_stats_attach(res->querystats, statsp);
}
}

View file

@ -433,15 +433,6 @@ destroy(dns_view_t *view) {
sizeof(dns_namelist_t) * DNS_VIEW_DELONLYHASH);
view->rootexclude = NULL;
}
if (view->adbstats != NULL) {
isc_stats_detach(&view->adbstats);
}
if (view->resstats != NULL) {
isc_stats_detach(&view->resstats);
}
if (view->resquerystats != NULL) {
dns_stats_detach(&view->resquerystats);
}
if (view->secroots_priv != NULL) {
dns_keytable_detach(&view->secroots_priv);
}
@ -1741,63 +1732,6 @@ dns_view_freezezones(dns_view_t *view, bool value) {
return (dns_zt_freezezones(view->zonetable, view, value));
}
void
dns_view_setadbstats(dns_view_t *view, isc_stats_t *stats) {
REQUIRE(DNS_VIEW_VALID(view));
REQUIRE(!view->frozen);
REQUIRE(view->adbstats == NULL);
isc_stats_attach(stats, &view->adbstats);
}
void
dns_view_getadbstats(dns_view_t *view, isc_stats_t **statsp) {
REQUIRE(DNS_VIEW_VALID(view));
REQUIRE(statsp != NULL && *statsp == NULL);
if (view->adbstats != NULL) {
isc_stats_attach(view->adbstats, statsp);
}
}
void
dns_view_setresstats(dns_view_t *view, isc_stats_t *stats) {
REQUIRE(DNS_VIEW_VALID(view));
REQUIRE(!view->frozen);
REQUIRE(view->resstats == NULL);
isc_stats_attach(stats, &view->resstats);
}
void
dns_view_getresstats(dns_view_t *view, isc_stats_t **statsp) {
REQUIRE(DNS_VIEW_VALID(view));
REQUIRE(statsp != NULL && *statsp == NULL);
if (view->resstats != NULL) {
isc_stats_attach(view->resstats, statsp);
}
}
void
dns_view_setresquerystats(dns_view_t *view, dns_stats_t *stats) {
REQUIRE(DNS_VIEW_VALID(view));
REQUIRE(!view->frozen);
REQUIRE(view->resquerystats == NULL);
dns_stats_attach(stats, &view->resquerystats);
}
void
dns_view_getresquerystats(dns_view_t *view, dns_stats_t **statsp) {
REQUIRE(DNS_VIEW_VALID(view));
REQUIRE(statsp != NULL && *statsp == NULL);
if (view->resquerystats != NULL) {
dns_stats_attach(view->resquerystats, statsp);
}
}
isc_result_t
dns_view_initntatable(dns_view_t *view, isc_taskmgr_t *taskmgr,
isc_timermgr_t *timermgr) {