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) {
}
/* 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 */
}
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));
}
/*
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");
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));
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);
}
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
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 *);
*/
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:
*
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,
}
static unsigned int
-nodecount(dns_db_t *db) {
+nodecount(dns_db_t *db, dns_dbtree_t tree) {
dns_rbtdb_t *rbtdb;
unsigned int count;
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);
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)) {
}
static unsigned int
-nodecount(dns_db_t *db) {
+nodecount(dns_db_t *db, dns_dbtree_t tree) {
UNUSED(db);
+ UNUSED(tree);
return (0);
}
}
static unsigned int
-nodecount(dns_db_t *db) {
+nodecount(dns_db_t *db, dns_dbtree_t tree) {
UNUSED(db);
+ UNUSED(tree);
return (0);
}
}
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);