serhiy-bzhezytskyy opened a new issue, #56:
URL: https://github.com/apache/solr-orbit/issues/56
### Describe the bug
`solr-orbit aggregate` fails for **any** input:
```
[ERROR] ❌ Cannot aggregate. 'TestRun' object has no attribute
'cluster_config_instance_params'.
```
`update_config_object` (`solrorbit/aggregator.py:169`) reads
`test_run.cluster_config_instance_params`. `TestRun` defines
`cluster_config_params` (`solrorbit/metrics.py:890`). The name being read
exists nowhere else in the tree:
```
$ grep -rn 'cluster_config_instance_params' . --include='*.py'
solrorbit/aggregator.py:169 # the only occurrence, and it is a read
```
This looks like a half-applied rename. `2c85d505` ("Rebase
renamed-components onto latest developments") renamed the attribute on
`TestRun` from `provision_config_instance_params` to `cluster_config_params`,
but renamed this read site to `cluster_config_instance_params`. `e10342d1`
("fixes for aggregate command") later corrected the *config key* on the same
line (`cluster_config_instance.params` → `cluster_config.params`) and left the
attribute name. Both commits came in with the port, so their PR numbers are
OpenSearch Benchmark's rather than this repo's — hence the SHAs.
Unlike the null-metrics crash reported separately, this one does not depend
on the data. It is on the plain `aggregate` → `build_aggregated_results` →
`update_config_object` path, so it fires every time.
A side effect worth noting: because the read never succeeds, the
cluster-config params never reach the aggregated result at all.
### To reproduce
```
solr-orbit aggregate --test-runs=<id1>,<id2>
```
Any two compatible test runs will do.
If the runs contain an operation with null metrics (which is the case for
the default geonames workload, because of `optimize`), the null-metrics crash
happens first during metric reduction — that is why this one only becomes
visible once that is fixed.
### Expected behavior
`aggregate` reads `test_run.cluster_config_params` and completes, and the
cluster-config params reach the aggregated result. With that one name
corrected, the aggregate for my runs carries `cluster-config-instance-params:
{"heap_size": "6g"}` as it was meant to.
### Host / Environment
- solr-orbit `edb3d03e` (main, up to date at time of report), installed from
source, Python 3.12
- Reproducible with any test runs; found with geonames via
`--pipeline=docker` on Solr 10.0.0
- macOS 15 (arm64), Docker Desktop
### Additional context
Why the test suite doesn't catch it, since that seems worth flagging for the
project generally: `tests/aggregator_test.py` passes bare `Mock()` test runs,
and a `Mock` creates whatever attribute is asked of it, so the read succeeds
regardless of the name. The full suite passes on `main` while `aggregate`
cannot run once.
`Mock(spec=TestRun)` doesn't help either — `spec` inspects the class, which
knows nothing about attributes assigned in `__init__`, so it raises on
`cluster_config` first and points at the wrong line. A regression test for this
has to construct a real `TestRun`.
The same code is present in OpenSearch Benchmark, which this is a port of,
so it looks inherited rather than introduced here. I couldn't find an existing
report in either project.
### Relevant log output
```shell
File ".../solrorbit/aggregator.py", line 193, in build_aggregated_results
self.update_config_object(test_run)
File ".../solrorbit/aggregator.py", line 169, in update_config_object
"cluster_config.params", test_run.cluster_config_instance_params)
AttributeError: 'TestRun' object has no attribute
'cluster_config_instance_params'.
Did you mean: 'cluster_config_instance'?
```
--
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]