2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-22 18:19:42 +00:00

use function name prefixes instead of paths

where that makes sense

and add some more words on hash table case sensitivity
Tony Finch 2022-04-08 12:01:07 +01:00
parent 51e0df46e6
commit 1758784d3f

@ -47,13 +47,13 @@ fair chance this will become a historical document rather than being
maintained as a current one. maintained as a current one.
# `isc/astack` # `isc_astack`
Fixed-size array stack Fixed-size array stack
## used by ## used by
* `isc/netmgr/netmgr` for object caches * `netmgr` for object caches
## notes ## notes
@ -65,25 +65,25 @@ Will be gone after the netmgr refactoring and replaced with per-thread object
pools/lists pools/lists
# `isc/heap` # `isc_heap`
Priority queue Priority queue
## used by ## used by
* `dns/rbtdb` to find nodes by TTL; there are multiple heaps split * `dns_rbtdb` to find nodes by TTL; there are multiple heaps split
based on node->locknum like a few other parts of rbtdb. based on node->locknum like a few other parts of rbtdb.
* `dns/zoneverify` for checking consistency of NSEC3 chains. * `dns_zoneverify` for checking consistency of NSEC3 chains.
* `isc/timer`, the canonical use for a heap. * `isc_timer`, the canonical use for a heap.
## notes ## notes
Single-threaded. Single-threaded.
There's a min-heap in libuv, implemented as a binary tree. The There's a min-heap in libuv, implemented as a binary tree. The
standard algorithms (as in `isc/heap`) use an array which should have standard algorithms (as in `isc_heap`) use an array which should have
better performance. better performance.
## Ondřej's notes ## Ondřej's notes
@ -91,7 +91,7 @@ better performance.
The usage in isc_timer has been removed in the loopmgr branch The usage in isc_timer has been removed in the loopmgr branch
# `isc/ht` # `isc_ht`
Hash table Hash table
@ -100,10 +100,10 @@ Hash table
* `bin/plugins/filter-a` and `bin/plugins/filter-aaaa` for finding * `bin/plugins/filter-a` and `bin/plugins/filter-aaaa` for finding
the filter state given a `query_ctx_t` pointer. (case-sensitive) the filter state given a `query_ctx_t` pointer. (case-sensitive)
* `dns/adb` for looking up nameservers by name (case-insensitive) or * `dns_adb` for looking up nameservers by name (case-insensitive) or
by address (case-insensitive???). by address (case-insensitive???).
* `dns/catz` (which leaks into `bin/named/server`) for the list of * `dns_catz` (which leaks into `bin/named/server`) for the list of
catalog zones in a view, and the entries in a catalog zone. catalog zones in a view, and the entries in a catalog zone.
These hash tables are unexpectedly case-sensitive. These hash tables are unexpectedly case-sensitive.
@ -117,23 +117,27 @@ Hash table
`catalog-zones{}` clause does not matter. Initializing the hash table as `catalog-zones{}` clause does not matter. Initializing the hash table as
case-insensitive is not enough to fix this bug. case-insensitive is not enough to fix this bug.
* `dns/rpz` in the zone update functions, case-sensitive but the domain * `dns_rpz` in the zone update functions, case-sensitive but the domain
names are forced to lower case. names are forced to lower case.
* `isc/tls` for TLS context caches. (case-sensitive) * `isc_tls` for TLS context caches. (case-sensitive)
## notes ## notes
Single-threaded. Single-threaded.
Case-sensitive and case-insensitive variants, chosen at run-time. Case-sensitive and case-insensitive variants, chosen at run-time. The
case-insensitive `isc_hash` functions squash the input to lower case before
hasing, instead of using a specialized single-pass case-insensitive hash. It
would be simpler to make the callers handle case-insensitivity since there
are so few of them.
Uses chaining, so it is heavy on indirection and heavy on allocation. Uses chaining, so it is heavy on indirection and heavy on allocation.
Modern hash tables use open addressing. Modern hash tables use open addressing.
## Ondřej's notes ## Ondřej's notes
There's work to do on `isc/ht`: There's work to do on `isc_ht`:
1. make header-only variant of the hashtable, so we can unify the usage 1. make header-only variant of the hashtable, so we can unify the usage
across the codebase (e.g. no extra allocations when storing item) across the codebase (e.g. no extra allocations when storing item)
@ -144,17 +148,17 @@ There's work to do on `isc/ht`:
3. the resizing was added only recently, we still miss shrinking (should be 3. the resizing was added only recently, we still miss shrinking (should be
easy enough to do) easy enough to do)
`dns/adb` was recently refactored, it used a custom hashtable before `dns_adb` was recently refactored, it used a custom hashtable before
# `isc/radix` # `isc_radix`
Radix tree for IP address prefix matching Radix tree for IP address prefix matching
## used by ## used by
* `dns/acl` * `dns_acl`
* `dns/iptable` * `dns_iptable`
## notes ## notes
@ -172,7 +176,7 @@ Uses reserved identifiers for static functions, which is undefined
behaviour. behaviour.
# `isc/symtab` # `isc_symtab`
Another hash table, with another hash function. Another hash table, with another hash function.
@ -186,7 +190,7 @@ Another hash table, with another hash function.
Single-threaded. Single-threaded.
Ought to be unnecessary. Might be worth cleaning up as part of some Ought to be unnecessary. Might be worth cleaning up as part of some
general parser refactoring (`isc/lex` could probably be made faster general parser refactoring (`isc_lex` could probably be made faster
using `re2c`). using `re2c`).
## Ondřej's notes ## Ondřej's notes