2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-21 17:48:07 +00:00
Clone
8
Config system requirements
Vicky Risk edited this page 2025-04-14 20:15:37 +00:00

List of BIND-internal and external use-cases - to be used to validate new designs.

Prior work / further reading:

Stork requirements:

Sizing/environment/performance requirements:

  • 1 M zones
  • 1 M RRs in a zone
  • 10 M QPS
  • 128 CPUs/parallel access
  • config queries and/or changes must not block DNS request processing
  • granular changes are possible via a new config management API

Use-cases:

  • Retrieve default configuration
    • possibly without starting the server itself?
    • Would be great to find out uses cases of this to figure out in which format? Applies for "Retrieve full running configuration" as well
  • Validate configuration - before server (re)start
  • Start a server - should not take ages to parse & use config from disk
  • Retrieve full running configuration
  • Retrieve all values modified in local config (i.e. values which are inherited from default)
    • possibly without starting the server itself?
  • Retrieve a single subtree from config (e.g. config for zone example.com)
    • possibly without starting the server itself?
  • Retrieve a single value from config
    • possibly without starting the server itself?
  • Add or remove a zone, with all its config values
  • Add or remove a zone from a catalog zone
  • Add or remove a forward zone
  • Change a top-level config object shared by many zones - e.g. primaries, key etc.
  • Change a global or view-level value which is inherited by child objects (e.g. max-refresh-time change in a view must propagate to all zones in the view, unless zone overrides this specific config)
  • Change view definition - e.g. match-clients
  • Modify arbitrary config values via API
  • Efficient internal access to values (think of ACL - e.g. allow-query, update-policy) - must take care of inheritance as well
  • Efficient sequential access to repeatable clauses (zones, view, etc.) as this is hugely used this way in server.c initialization code
  • Obviously extremely efficient access in read-only state where the server is using configured values while it is running
  • Transactional API (so this ensures a reader has a consistent view of the configuration)