Extend dns_db_nodecount to access auxilary rbt node counts

dns_db_nodecount can now be used to get counts from the auxilary
rbt databases.  The existing node count is returned by
tree=dns_dbtree_main.  The nsec and nsec3 node counts by dns_dbtree_nsec
and dns_dbtree_nsec3 respectively.
This commit is contained in:
Mark Andrews 2021-10-20 12:01:00 +11:00 committed by Petr Špaček
parent cad24b8dc4
commit 85bfcaeb2e
No known key found for this signature in database
GPG key ID: ABD587CDF06581AE
12 changed files with 43 additions and 18 deletions

View file

@ -3894,7 +3894,8 @@ main(int argc, char *argv[]) {
bool answer;
hash_length = dns_nsec3_hashlength(dns_hash_sha1);
hashlist_init(&hashlist, dns_db_nodecount(gdb) * 2,
hashlist_init(&hashlist,
dns_db_nodecount(gdb, dns_dbtree_main) * 2,
hash_length);
result = dns_nsec_nseconly(gdb, gversion, &answer);
if (result == ISC_R_NOTFOUND) {

View file

@ -15367,7 +15367,7 @@ named_server_zonestatus(named_server_t *server, isc_lex_t *lex,
}
/* Database node count */
nodes = dns_db_nodecount(hasraw ? rawdb : db);
nodes = dns_db_nodecount(hasraw ? rawdb : db, dns_dbtree_main);
snprintf(nodebuf, sizeof(nodebuf), "%u", nodes);
/* Security */

View file

@ -361,12 +361,12 @@ issecure(dns_db_t *db) {
}
static unsigned int
nodecount(dns_db_t *db) {
nodecount(dns_db_t *db, dns_dbtree_t tree) {
sampledb_t *sampledb = (sampledb_t *)db;
REQUIRE(VALID_SAMPLEDB(sampledb));
return (dns_db_nodecount(sampledb->rbtdb));
return (dns_db_nodecount(sampledb->rbtdb, tree));
}
/*

View file

@ -1260,7 +1260,7 @@ 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, "%20u %s\n", dns_db_nodecount(cache->db),
fprintf(fp, "%20u %s\n", dns_db_nodecount(cache->db, dns_dbtree_main),
"cache database nodes");
fprintf(fp, "%20" PRIu64 " %s\n", (uint64_t)dns_db_hashsize(cache->db),
"cache database hash buckets");
@ -1327,7 +1327,8 @@ dns_cache_renderxml(dns_cache_t *cache, void *writer0) {
TRY0(renderstat("DeleteTTL", values[dns_cachestatscounter_deletettl],
writer));
TRY0(renderstat("CacheNodes", dns_db_nodecount(cache->db), writer));
TRY0(renderstat("CacheNodes",
dns_db_nodecount(cache->db, dns_dbtree_main), writer));
TRY0(renderstat("CacheBuckets", dns_db_hashsize(cache->db), writer));
TRY0(renderstat("TreeMemTotal", isc_mem_total(cache->mctx), writer));
@ -1388,7 +1389,8 @@ dns_cache_renderjson(dns_cache_t *cache, void *cstats0) {
CHECKMEM(obj);
json_object_object_add(cstats, "DeleteTTL", obj);
obj = json_object_new_int64(dns_db_nodecount(cache->db));
obj = json_object_new_int64(
dns_db_nodecount(cache->db, dns_dbtree_main));
CHECKMEM(obj);
json_object_object_add(cstats, "CacheNodes", obj);

View file

@ -807,10 +807,10 @@ freenode:
}
unsigned int
dns_db_nodecount(dns_db_t *db) {
dns_db_nodecount(dns_db_t *db, dns_dbtree_t tree) {
REQUIRE(DNS_DB_VALID(db));
return ((db->methods->nodecount)(db));
return ((db->methods->nodecount)(db, tree));
}
size_t

View file

@ -134,7 +134,7 @@ typedef struct dns_dbmethods {
dns_rdatatype_t type,
dns_rdatatype_t covers);
bool (*issecure)(dns_db_t *db);
unsigned int (*nodecount)(dns_db_t *db);
unsigned int (*nodecount)(dns_db_t *db, dns_dbtree_t);
bool (*ispersistent)(dns_db_t *db);
void (*overmem)(dns_db_t *db, bool overmem);
void (*settask)(dns_db_t *db, isc_task_t *);
@ -1349,9 +1349,9 @@ dns_db_overmem(dns_db_t *db, bool overmem);
*/
unsigned int
dns_db_nodecount(dns_db_t *db);
dns_db_nodecount(dns_db_t *db, dns_dbtree_t tree);
/*%<
* Count the number of nodes in 'db'.
* Count the number of nodes in 'db' or its auxiliary trees.
*
* Requires:
*

View file

@ -179,6 +179,12 @@ typedef enum {
dns_dbtype_stub = 3
} dns_dbtype_t;
typedef enum {
dns_dbtree_main = 0,
dns_dbtree_nsec = 1,
dns_dbtree_nsec3 = 2
} dns_dbtree_t;
typedef enum {
dns_notifytype_no = 0,
dns_notifytype_yes = 1,

View file

@ -7580,7 +7580,7 @@ isdnssec(dns_db_t *db) {
}
static unsigned int
nodecount(dns_db_t *db) {
nodecount(dns_db_t *db, dns_dbtree_t tree) {
dns_rbtdb_t *rbtdb;
unsigned int count;
@ -7589,7 +7589,20 @@ nodecount(dns_db_t *db) {
REQUIRE(VALID_RBTDB(rbtdb));
RWLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
count = dns_rbt_nodecount(rbtdb->tree);
switch (tree) {
case dns_dbtree_main:
count = dns_rbt_nodecount(rbtdb->tree);
break;
case dns_dbtree_nsec:
count = dns_rbt_nodecount(rbtdb->nsec);
break;
case dns_dbtree_nsec3:
count = dns_rbt_nodecount(rbtdb->nsec3);
break;
default:
INSIST(0);
ISC_UNREACHABLE();
}
RWUNLOCK(&rbtdb->tree_lock, isc_rwlocktype_read);
return (count);

View file

@ -1705,7 +1705,7 @@ setup_update(dns_rpz_zone_t *rpz) {
isc_log_write(dns_lctx, DNS_LOGCATEGORY_GENERAL, DNS_LOGMODULE_MASTER,
ISC_LOG_INFO, "rpz: %s: reload start", domain);
nodecount = dns_db_nodecount(rpz->updb);
nodecount = dns_db_nodecount(rpz->updb, dns_dbtree_main);
hashsize = 1;
while (nodecount != 0 &&
hashsize <= (DNS_RPZ_HTSIZE_MAX + DNS_RPZ_HTSIZE_DIV)) {

View file

@ -1237,8 +1237,9 @@ issecure(dns_db_t *db) {
}
static unsigned int
nodecount(dns_db_t *db) {
nodecount(dns_db_t *db, dns_dbtree_t tree) {
UNUSED(db);
UNUSED(tree);
return (0);
}

View file

@ -1186,8 +1186,9 @@ issecure(dns_db_t *db) {
}
static unsigned int
nodecount(dns_db_t *db) {
nodecount(dns_db_t *db, dns_dbtree_t tree) {
UNUSED(db);
UNUSED(tree);
return (0);
}

View file

@ -4884,7 +4884,8 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
}
dns_zone_logc(zone, DNS_LOGCATEGORY_ZONELOAD, ISC_LOG_DEBUG(2),
"number of nodes in database: %u", dns_db_nodecount(db));
"number of nodes in database: %u",
dns_db_nodecount(db, dns_dbtree_main));
if (result == DNS_R_SEENINCLUDE) {
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_HASINCLUDE);