tailscale/tailscale · error
error marshaling request event: %w
Error message
error marshaling request event: %w
What it means
JSON-encoding the assembled session recording event failed before it could be sent to any recorder; the event struct contains channels or unsupported value types only under internal misuse, so this is effectively an invariant violation.
Source
Thrown at k8s-operator/api-proxy/proxy.go:414
event.Source.NodeUserID = who.UserProfile.ID
} else {
event.Source.NodeTags = who.Node.Tags
}
bodyBytes, err := io.ReadAll(req.Body)
if err != nil {
return fmt.Errorf("failed to read body: %w", err)
}
req.Body = io.NopCloser(bytes.NewReader(bodyBytes))
event.Request.Body = bodyBytes
var errs []error
// TODO: ChaosInTheCRD ensure that if there are multiple addrs timing out we don't experience slowdown on client waiting for response.
fail := true
for _, addr := range addrs {
data := new(bytes.Buffer)
if err := json.NewEncoder(data).Encode(event); err != nil {
return fmt.Errorf("error marshaling request event: %w", err)
}
if err := ap.sendEventFunc(addr, data, ap.ts.Dial); err != nil {
if apiSupportErr, ok := err.(sessionrecording.EventAPINotSupportedErr); ok {
ap.log.Warnf(apiSupportErr.Error())
fail = false
} else {
err := fmt.Errorf("error sending event to recorder with address %q: %v", addr.String(), err)
errs = append(errs, err)
}
} else {
return nil
}
}
merr := errors.Join(errs...)
if fail && failOpen {
msg := fmt.Sprintf("[unexpected] failed to send event to recorders with errors: %s", merr.Error())View on GitHub (pinned to 6e0912f979)
Solutions
- Marshaling the request event failed; internal serialization error — upgrade the operator and retry.
Defensive patterns
Strategy: type-guard
When it happens
Trigger: Thrown at k8s-operator/api-proxy/proxy.go:414 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/64af0393b88522ce.
Report an issue: GitHub.