Repository navigation
ci(bench): name the load rows after the product, always list crud/search, record who holds the memory - #2215
Merged
Merged
Conversation
…rch, record who holds the memory The comparison report called the `POST /` transaction-Bundle suite "import", while the web UI calls `$bulk-submit` "Import"/"Bulk Import" and the Bundle screen "Batch / Transaction". Rename the visible row labels to match, keeping the suite ids (`import`, `bulk-import`) so the `tests` input and the public HealthSamurai report stay comparable: - `import` -> "Batch/Transaction Import, `POST /` Bundles" - `bulk-import` -> "Bulk Import, `$bulk-submit`" - `bulk-import ingest` -> "Bulk Import: ingest" - `... initial index` -> "Bulk Import: index rebuild" The notes, legend, per-leg summaries and workflow comments follow, and a new note says the two load rows are not comparable (committed Bundle entries per second of the k6 scenario vs. resources until the search index covers them). A run that did not ask for crud/search (e.g. tests=bulk-import) now still lists their rows as `n/a (not requested)`, so a trimmed run no longer reads as a report that lost those metrics. capacity-gate.sh now appends `docker stats` (sorted) and `docker ps` with image, age and labels to bench-results/capacity-gate-holders.txt on every wait poll and on the final failure, and prints the top 10 holders to the job log and step summary. Best effort and never fatal; thresholds are unchanged. Previously a gate failure could not say which containers held the Docker host's memory (runs 38751206249 and 36517413025). Refs #190 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Code reviewNo issues found. Checked for bugs and CLAUDE.md compliance. |
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.
At a glance: before vs. after
The FHIR Server Benchmark comparison report named its load rows differently from the product (the web UI calls
$bulk-submit"Import"/"Bulk Import", and thePOST /Bundle screen "Batch / Transaction"), and a run that did not ask forcrud/searchshowed no rows for them, which read as lost metrics.POST /Bundles (suiteimport)import, POST / transaction BundlesBatch/Transaction Import, POST / Bundles$bulk-submit(suitebulk-import)bulk-import, $bulk-submitBulk Import, $bulk-submit$bulk-submitbulk-import ingestBulk Import: ingestbulk-import initial indexBulk Import: index rebuildcrud/searchin a run that did not request them (e.g.tests=bulk-import)n/a (not requested)bench-results/capacity-gate-holders.txtSuite ids (
import,bulk-import,indexing, ...) and thetestsinput are unchanged, so runs stay comparable with the public HealthSamurai report.What changed
compare_legs.py,summary_backends.py: visible row labels, notes, legend and per-leg summaries use the names above. A new note says the two load rows are not comparable (committed Bundle entries per second of the k6 scenario vs. resources until the search index covers them).compare_legs.py:crudandsearchare always listed; when the run did not request them the cells sayn/a (not requested)instead ofn/a (not run), so a trimmed run is not mistaken for a report that lost them.fhir-benchmark.yml: header comments, the inline results table and thetestsinput description follow the new names. No executable logic changed.capacity-gate.sh: on every wait poll and on the final failure, appendsdocker stats(sorted by memory) anddocker ps(image, age,hfs-ci/hfs-bench-run/ testcontainers labels) tobench-results/capacity-gate-holders.txt, and prints the top 10 to the log and the step summary. Best effort and never fatal; thresholds, margin and timeouts are unchanged.No measurement, backend setting or threshold changed: the figures in the report are the same as before.
Tests
python3 -m unittest discover -p 'test_*.py'in.github/scripts/fhir-bench: 81 tests pass (updated label constants, a changed insert-only assertion, and a new test for a bulk-import-only run that still listscrudandsearch).bash -n capacity-gate.shpasses and the capture was exercised with a stubbeddocker;shellcheckis not installed here, so it was not run.Docker host MemTotal: 20000MB,MemAvailable=10431MB, capacity OK.Not in this PR
Deliberately deferred to keep this reviewable: pinning k6 and the upstream benchmark ref (#1914),
vus/durationoverriding fixed scenarios (#1915), failing a leg when its database is unreachable duringsetup(), enabling validation for published runs, per-container CPU/memory limits, a full-text suite, and the "Leg health" row showingPatient 0 · Observation 0on bulk-import-only runs.Refs #190
🤖 Generated with Claude Code