Skip to content

docs: add downstream-orphan troubleshooting doc - #61

Open
scotwells wants to merge 7 commits into
docs/architecture-reorgfrom
feat/repro-replicator-downstream-orphan
Open

docs: add downstream-orphan troubleshooting doc#61
scotwells wants to merge 7 commits into
docs/architecture-reorgfrom
feat/repro-replicator-downstream-orphan

Conversation

@scotwells

@scotwells scotwells commented Jul 23, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a troubleshooting doc for a "conflicting record" error that's hard to diagnose without it: a customer can't create or edit a DNS record because PowerDNS reports a naming conflict, even though nothing in their project references that name anymore. The doc walks through recognizing the symptom, confirming it's this specific failure mode, and resolving it with concrete kubectl commands — no need to already know the replicator's internals to act on it.

This same failure caused a real production incident (engineering#346): a customer's www.ab.dk record was stuck for hours because its old downstream copy was never cleaned up after the customer deleted it. This doc turns that incident into a repeatable runbook.

Root cause

A DNS record exists both upstream (what the customer manages) and downstream (what actually gets programmed into PowerDNS). Deleting the upstream record is supposed to clean up its downstream copy too. That cleanup depends on the replicator catching the deletion while it happens; if a create and delete race closely enough, the replicator can miss it; a stale cached read tells it the downstream copy doesn't exist yet, so it finishes up and moves on without ever deleting the copy it just created. The result looks and behaves like a healthy record, so it's easy to miss — until a customer tries to reuse that name and gets rejected as a duplicate, indefinitely.

What's included

Stacked on #64 so those links resolve against real files.

Test plan

  • Doc renders correctly and its links resolve
  • kubectl commands in the investigation/resolution steps are accurate against a real upstream/downstream pair

@scotwells
scotwells force-pushed the feat/repro-replicator-downstream-orphan branch from fb1afdc to 5890bc2 Compare July 24, 2026 19:14
@scotwells
scotwells changed the base branch from feat/dns-federation-test-env to docs/architecture-reorg July 24, 2026 19:14
Support-facing doc for the DNSRecordSet downstream-orphan failure
mode behind engineering#346: symptoms, why it happens, and concrete
steps to investigate and resolve it. Links out to the topology and
replication docs for background on the upstream/downstream design.
@scotwells
scotwells force-pushed the feat/repro-replicator-downstream-orphan branch from 5890bc2 to 410bfa4 Compare July 24, 2026 19:19
@scotwells scotwells changed the title test: reproduce replicator downstream-orphan race docs: add downstream-orphan troubleshooting doc Jul 24, 2026
Convert the symptom description and the investigation/resolution
callouts to GitHub's blockquote-based alert syntax instead of bolded
lead-ins.
This doc is public-facing; the wiki should link to it, not the other
way around. Replace the wiki cross-link with a one-sentence inline
explanation of upstream/downstream, and keep the links to this repo's
own architecture docs.
Leftover from the wiki-link removal; nothing for it to point at
anymore.
The intro paragraph and 'What this means' both defined the terms
almost verbatim; keep the definition in the intro only.
'Skipped' read as if the cleanup were optional; it's a bug, not a
deliberate omission.
- Use "downstream copy" consistently (one spot said "downstream
  shadow").
- Replace ambiguous "this"/"it" references with concrete nouns.
- Switch passive constructions ("gets rejected", "is missed", "is
  never told") to active voice with a clear subject.
- Cut filler words (really, actually, just, quietly, currently,
  itself).
- Tighten run-on sentences into shorter, single-idea sentences.
@scotwells
scotwells requested review from a team and ecv July 24, 2026 21:59
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.

2 participants