tailscale/tailscale · error
reading AUM (%v): %w
Error message
reading AUM (%v): %w
What it means
Walking the AUM chain backwards from head, reading the AUM at the given hash from TKA storage failed with something other than not-exist (which ends the walk normally). The store is corrupt or unreadable.
Source
Thrown at ipn/ipnlocal/tailnet-lock.go:1028
// TailnetLockLog returns the changelog of TKA state up to maxEntries in size.
func (b *LocalBackend) TailnetLockLog(maxEntries int) ([]ipnstate.TailnetLockUpdate, error) {
b.mu.Lock()
defer b.mu.Unlock()
if b.tka == nil {
return nil, errTailnetLockNotActive
}
var out []ipnstate.TailnetLockUpdate
cursor := b.tka.authority.Head()
for range maxEntries {
aum, err := b.tka.storage.AUM(cursor)
if err != nil {
if err == os.ErrNotExist {
break
}
return out, fmt.Errorf("reading AUM (%v): %w", cursor, err)
}
update := ipnstate.TailnetLockUpdate{
Hash: cursor,
Change: aum.MessageKind.String(),
Raw: aum.Serialize(),
}
out = append(out, update)
parent, hasParent := aum.Parent()
if !hasParent {
break
}
cursor = parent
}
return out, nil
}View on GitHub (pinned to 6e0912f979)
Solutions
- The AUM (authority update message) could not be read/decoded; the tailnet lock log may be corrupted — re-fetch the lock state from the control server or reset local lock state.
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at ipn/ipnlocal/tailnet-lock.go:1028 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of tailscale/tailscale@6e0912f979 (2026-08-18).
Data as JSON: /api/errors/c8803ba59e7f3fc5.
Report an issue: GitHub.