Skip to content

docs(perf): S11 endurance soak — 4 h sustained real path, zero drift; API RSS leak found#182

Merged
brownjuly2003-code merged 1 commit into
mainfrom
s11-soak-report
Jul 10, 2026
Merged

docs(perf): S11 endurance soak — 4 h sustained real path, zero drift; API RSS leak found#182
brownjuly2003-code merged 1 commit into
mainfrom
s11-soak-report

Conversation

@brownjuly2003-code

Copy link
Copy Markdown
Owner

What

S11 executed on the Mac stand: 4 h paced soak (720k events queued at 50 eps, ~47 eps delivered) through produce → Flink → bridge → ClickHouse, with steady API read traffic (12 rpm) and Redis push invalidation.

Soak question Answer
Apply keeps pace for hours Yes — hourly lag 71/44/134/0, bounded
Bridge leak None — RSS sawtooth 38→114→11 MB, FDs 94–95 flat
Lag death spiral None — peak 2 915 during one fault, drained to 0
Loss / double-apply in serving path Zero — CH distinct orders reconcile exactly with applied counter
Cache drift after 4 h Zero — API metric == direct dedup CH sum, to the kopeck
Batch amortization sustained Mean ~107 events/batch over 6 387 batches

Best part: at t≈194 min a real (not injected) fault hit — Redis publish timeouts, one failed batch apply, Kafka group session timeout. Recovery was fully automatic: offsets held, the 256-event batch replayed, journal guard collapsed all 256 as duplicates. No loss, no double-apply, apply_failures_total = 1.

Finding: API process RSS grows without bound under steady load (175 MB → 1.67 GB over 4 h; bridge flat) — added to STATUS.md Known issues, GitHub issue filed separately.

Honest accounting: 94.8 % of queued events were delivered (driver-side rdkafka flush timeout + queue expiry during the fault window, fire-and-forget produce); everything that reached events.validated was applied exactly once.

Files

  • docs/perf/soak-s11-2026-07-10.md — full report (fault timeline, alert thresholds, follow-ups, reproduce)
  • docs/STATUS.md — soak row in Proven, Known issues section, Next rolled forward
  • docs/serving-bridge.md — endurance line in the throughput bullet

Docs-only change.

🤖 Generated with Claude Code

…I leak found

4 h paced run (720k events queued, ~47 eps delivered) through the full real
path plus 12 rpm API reads: bounded lag (peak 2915 -> 0, no death spiral),
bridge RSS/FD flat for 4 h, one live broker/Redis fault survived with an
exactly-once 256-event batch replay via the journal guard, and zero cache
drift (API metric == direct deduplicated CH sum to the kopeck).

Driver-side accounting is honest: 94.8% of queued events were delivered
(rdkafka flush timeout + queue expiry during the fault window); the serving
path lost nothing that reached events.validated.

Finding: API process RSS grows 175 MB -> 1.67 GB over the soak (bridge flat)
— recorded in STATUS.md Known issues and filed as a GitHub issue.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

DORA Metrics

  • Window: last 30 days
  • Branch: main
  • Deployment frequency: 103 total / 24.03 per week
  • Lead time for changes: avg 0.38h / median 0.0h
  • Change failure rate: 60.19% (62/103)
  • MTTR: 2.56h across 1 incident(s)

@brownjuly2003-code brownjuly2003-code merged commit b40d659 into main Jul 10, 2026
19 checks passed
@brownjuly2003-code brownjuly2003-code deleted the s11-soak-report branch July 10, 2026 16: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