mirror of
https://github.com/isc-projects/bind9.git
synced 2026-02-24 02:10:30 -05:00
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:
parent
cad24b8dc4
commit
85bfcaeb2e
12 changed files with 43 additions and 18 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in a new issue