Commit Graph
11 Commits
Author SHA1 Message Date
mokhtar 91ed5ae774 server: a query that finds every permit taken waits for one instead of failing, the budget is 64, permit and upstream turns wait on a futex with one thread each, the thread pool has no task limit, and transparent huge pages are off for the process 2026-10-22 20:26:25 +02:00
mokhtar 63cc5f8dc3 server: every dns listener shares one budget of 32 queries, stream listeners take 16 connections, the task pool is capped from those bounds, and work it cannot start is counted by site 2026-10-22 15:24:10 +02:00
mokhtar 5a51e2d6b9 tests: a failed server check fails the test instead of hanging it, and the tls idle tests leave the handshake room 2026-10-21 21:32:40 +02:00
mokhtar 36e11ca71d metrics: peak gauges for in-flight queries, stream connections and the query log queue 2026-10-19 23:08:58 +02:00
mokhtar d961b152a3 db-mode config changes apply live in-process
settings and upstream writes now follow a prepare, commit, publish, retire
contract: candidates are built and validated before the database transaction,
published as infallible pointer swaps, and old generations retire after their
readers drain. per-query policy values snapshot once per query; upstream pool,
cache, rate limiter, sessions, api limiter, log sink, blocklist scheduler and
the query-log queue each gained one named live operation. restart_required
shrinks from every scalar key to the bind keys and web.enabled; the admin ui
drops its restart notices for everything else. file mode is unchanged.
2026-08-24 00:04:28 +02:00
mokhtar 0fd6bbd312 milestone 28: query provenance — every logged query is exactly explainable
Gates / frontend (push) Successful in 1m36s
Gates / test (push) Successful in 1m56s
Gates / test-aarch64 (push) Successful in 7m37s
Gates / package (push) Successful in 9m12s
Gates / container (push) Successful in 13s
CI / gates (push) Successful in 19m4s
query rows gain qclass, rcode, group, policy action and reason, the
matched rule or list entry with its source, cname and safe-search
targets, route kind, forward zone, and the resolver that actually
answered — the pool and local markers die. servfails are logged and
name the resolver that lost; post-parse protocol refusals become rows.
a detail page at /queries/:id renders the ordered explanation, and
coverage watermarks distinguish an empty history from a missing one.

the schema fingerprint changes: existing query history is recreated
with the old file kept aside and the reset filed as a resolved
diagnostic. fixes an oversized udp reply being rebuilt as noerror,
which handed clients a truncated nxdomain as success.
2026-08-22 09:16:40 +02:00
mokhtar 6f67940995 milestone 18: collapse duplicated infrastructure into shared listener core, crud list helper, resource shells, transport race, name and line helpers, ui modules
CI / test (push) Successful in 1m22s
CI / test-aarch64 (push) Successful in 5m6s
CI / frontend (push) Successful in 45s
CI / cross (push) Successful in 7m53s
CI / docker (push) Failing after 1h10m57s
2026-08-07 18:20:30 +02:00
mokhtar 5253c47303 milestone 8: web server, rest api, sse, auth, metrics and static assets 2026-08-02 00:54:13 +02:00
mokhtar a8092bb1b9 milestone 7: serving pipeline, client tracking, pause and lifecycle 2026-08-01 21:43:52 +02:00
mokhtar 59d94df722 milestone 5: blocklist filtering, local records and conditional forwarding 2026-08-01 16:43:55 +02:00
mokhtar 17d0401f8a resolver transport: udp/tcp servers, doh/dot clients, pool failover with health 2026-08-01 12:36:50 +02:00