Skip to content

va: Add experimental VA for testing Hickory#8688

Merged
beautifulentropy merged 2 commits intomainfrom
experimental-va
Mar 26, 2026
Merged

va: Add experimental VA for testing Hickory#8688
beautifulentropy merged 2 commits intomainfrom
experimental-va

Conversation

@beautifulentropy
Copy link
Copy Markdown
Member

@beautifulentropy beautifulentropy commented Mar 25, 2026

Introduce an optional parallel VA instance that repeats the primary VA's DCV and CAA checks using an alternative DNS resolver. This enables side-by-side comparison of DNS resolution behavior (e.g. Unbound vs Hickory) without affecting validation decisions.

Validation shadowing is performed according to a configurable sampling rate (0.0 to 1.0), giving us the ability to control what percentage of our traffic will also hit experimental resolvers and keep our log volumes reasonable.

Fixes #8677

@beautifulentropy beautifulentropy marked this pull request as ready for review March 25, 2026 18:46
@beautifulentropy beautifulentropy requested a review from a team as a code owner March 25, 2026 18:46
Copy link
Copy Markdown
Contributor

@jsha jsha left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really like the approach of instantiating another VA implementation in-memory. It achieves a nice clean result.

Comment thread va/va.go Outdated
Comment thread va/va.go Outdated
Comment thread va/va.go Outdated
Comment thread va/va.go Outdated
Comment thread va/va.go Outdated
"primaryPassed": primaryPassed,
"primaryResult": primary,
"experimentPassed": experimentPassed,
"experimentResult": experimentResult,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here we'll be JSON-marshaling an object of type remoteResult. I think that's fine, since json uses reflection to look inside, and it'll be a protobuf inside, and those marshal well. Mind posting an example of the output to verify?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here's what that looks like:

[INFO: [AUDIT] Primary VA disagreed with experimental VA JSON={"experimentPassed":false,"experimentResult":{"problem":{"problemType":"dns","detail":"unexpected LookupTXT call on test fake","httpStatus":400},"perspective":"Experimental"},"operation":"dcv","primaryPassed":true,"primaryResult":{"records":[{"hostname":"good-dns01.com","resolverAddrs":["txtFakeDNS"]}],"perspective":"example perspective 8fVnUg"}}]

Comment thread va/va.go Outdated
Comment thread cmd/boulder-va/main.go Outdated
Copy link
Copy Markdown
Contributor

@jsha jsha left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice!

@beautifulentropy beautifulentropy merged commit d51bd6a into main Mar 26, 2026
17 checks passed
@beautifulentropy beautifulentropy deleted the experimental-va branch March 26, 2026 22:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Implement side-by-side DNS for unbound and hickory

2 participants