Repository navigation
test: weekly soak test at 10M facts with checked samples and metrics (#392) - #519
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012wXxZguv7PgKQjMMH4yJ5h
…392) tests/soak_test.rs grows a file-backed database to 10M live facts, then churns it at a capped rate (retract/re-assert, hot-entity histories) with checkpoints every 20-200 transactions and reopens every 2-10 minutes. A reference derived from each entity's number checks EAVT, AVET, AEVT, :as-of and the tx counter; a full scan runs in a child process 8000 ; verify() at the end; RSS after a reopen is bounded. Metrics go to JSON lines, uploaded by the weekly soak.yml (main Saturday, v3 Sunday). soak_short runs the driver at 20K facts per PR. Found #518. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012wXxZguv7PgKQjMMH4yJ5h
A 10M-fact local run spent minutes on 6 s AVET lookups, stalling churn writes to ~32 tx/s against the 50 tx/s target. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012wXxZguv7PgKQjMMH4yJ5h
The first version passed on v2.0.4 despite #371: no check bound entity and attribute together and the AEVT check read a single-valued attribute. Shard attributes now carry two values written in one transaction and each sampled entity's tags are read with [:eN :p/tag ?v]; v2.0.4 fails both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012wXxZguv7PgKQjMMH4yJ5h
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #392 (tracker #383). Test and workflow only; no library change. A
mainPR with the same harness on the v2 API follows. This PR adds no closing keyword; #392 closes when both PRs are merged.What
tests/soak_test.rssoak(ignored): grows a file-backed database to 10M live facts in batches of 1–2,000 facts (1–4 multi-valued tags in one transaction, strings over 64 bytes, refs, a sparse per-shard attribute). It then churns the database for the rest of the budget at a capped 50 tx/s: retracts and re-asserts of random facts, plus long assert/retract histories on 32 hot entities. A checkpoint runs every 20–200 transactions, and a reopen every 2–10 minutes, half from a checkpointed file and half replaying the WAL.:as-ofon hot entities, and the tx counter. A full-scan row count runs in a child process (soak_full_scan_child), andverify()runs at the end. RSS measured after a reopen must stay below 1.25× its baseline plus 256 MiB.soak_short: the same driver at 20K facts, in the per-PR suite, about 6 s in a debug build..github/workflows/soak.yml: weekly, alternatingmain(Saturday) andv3(Sunday) at 01:00 UTC, plus manual dispatch withrefandminutes. It runs a 300-minute budget with the data on/mnt, uploads the metrics and log, and opens or comments on a "Weekly soak failure" issue on failure. Scheduled runs use the file frommain, so it lands there with themainPR.docs/superpowers/specs/2026-10-10-soak-test-design.md. Plan:docs/superpowers/plans/2026-10-10-soak-test.md.Local 10M run (
--profile bench, 15-minute budget, seed 11): passed:as-ofhot entity p50[?e :p/name "…"]p50I broke the reference on purpose twice, once dropping a retract and once dropping a hot-entity change. Each time the test failed with a message that names the check, seed and step, and prints no UUIDs.
Findings
IndexHint::Avet, but the matcher ignores the hint, and VAET is unused the same way. Until it is fixed the soak samples AVET sparingly (5 per check, 2% of reads between writes).MINIGRAF_SOAK_FULL_SCAN_MAX(default 3M).🤖 Generated with Claude Code
https://claude.ai/code/session_012wXxZguv7PgKQjMMH4yJ5h