janhoy opened a new pull request, #108: URL: https://github.com/apache/solr-orbit/pull/108
### Description `launchr` drives Solr Orbit over a matrix of Solr versions × workloads × provisioning profiles × cluster configs, enriches each report with the metadata a trend graph needs, and writes it to pluggable storage. It is the piece that turns Solr Orbit from a tool you run once into something that can run unattended. Advances #98; the website that renders the results is #99. This first increment is local-only and **adds no dependencies**: - `local` and `preconfigured` provisioning, `docker` and `none` install methods, `local` storage — three `Protocol` interfaces with plain registries for now, becoming entry points when there is a second implementation of each. - Matrix expansion grouped by profile and ordered workload-outer, version-inner, so a workload's corpus is fetched once and its trend line completes early rather than at the last cell. - **launchr owns the Solr lifecycle** and always invokes `--pipeline=benchmark-only`. That is deliberate: there has to be a live Solr between deploy and execute so launchr can read `/solr/admin/info/system` for the commit hash, JVM and build timestamp. Solr Orbit's own `docker` pipeline creates and destroys the container inside its own process, leaving no window to query it. That pipeline is untouched and remains the right tool for a one-off run. - **x-axis timestamps with no git clone required.** The Apache release list (`projects.apache.org`) for releases, the build timestamp from the cluster otherwise, recording which source answered — because a release date and a build timestamp are not the same clock. - Reports are Solr Orbit's `test_run.json` **verbatim** plus one `launchr` key, so `TestRun.from_dict()` and `solr-orbit compare` still consume a stored report. A test asserts every original key is byte-identical. - Failure isolation per cell, logs stored on failure only, teardown in `finally`, and `SIGTERM` handled so an interrupted run still releases what it created. It deliberately does **not** pass `--cluster-config` to Solr Orbit: under `benchmark-only` the names are recorded but never applied, so passing them would put a claim in the report that nothing honoured. launchr applies heap/GC/opts to the container itself and records exactly what it applied, as `cluster_config.applied_env`. Nothing assumes port 8983 — `--solr-port` overrides it, since a Solr developer very likely has their own Solr there and the provisioning pipelines refuse to start when the port is busy. Two workarounds for #106 are documented at their call sites in `orbit.py`: output goes to a file rather than a pipe (orphaned actor processes inherit the pipe, so EOF never arrives and the read loop would hang on a benchmark that had already succeeded), and stragglers are killed by matching the unique `--test-run-id`, since they `setsid()` out of the process group and `killpg` cannot reach them. The first commit adds `image_repository` / `nightly_image_repository` to `SolrDockerLauncher`, defaulting to today's hardcoded values so `--pipeline=docker` behaves exactly as before. launchr needs it to honour a configurable registry. ### Issues Resolved Advances #98. Not closing it — later phases add cloud storage, remote provisioning and Kubernetes. ### Testing 287 unit tests for launchr; `make lint` clean; `make test` green (1427 passed, 23 skipped). Plus an opt-in integration test that runs two Solr versions against real Docker: ``` LAUNCHR_IT=1 uv run pytest tests/tools/launchr/local_integration_test.py -q 18 passed in 144.21s ``` It asserts what unit tests cannot: that Solr really starts, that `/solr/admin/info/system` really yields a commit hash, that reports land in the agreed layout and parse back through `TestRun.from_dict()`, that two versions produce different commits, and that no container or stray process is left behind. Verified by hand end to end — three versions of `nyc_taxis` producing a real trend line: ``` run-61d96f 9.9.0 ts=2025-07-24 src=apache-releases commit=386ed096a194 index=4010.7 docs/s run-9a4a85 9.10.1 ts=2026-01-20 src=apache-releases commit=c135e6335c71 index=4344.7 docs/s ``` To try it: ```bash uv run launchr run --dry-run # the plan and exact argv; offline, instant uv run launchr run --versions 9.9.0,9.10.1,9.11.0 --workloads nyc_taxis --test-mode ``` **Known limitation, stated so it is not mistaken for a result:** output produced this way is for developing the system, not for publishing — the load driver shares a machine with Solr, there is no CPU pinning and Docker Desktop adds a virtualisation layer. Reports record `infra.provider: "local"` so a reporting layer can label them accordingly. 🤖 Assisted by Claude Code -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
