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]

Reply via email to