Developing Rally#
Prerequisites#
Install the following software packages:
JDK version required to build Elasticsearch. Please refer to the build setup requirements.
Docker and on Linux additionally docker-compose.
git
Check the installation guide for detailed installation instructions for these packages.
Rally does not support Windows and is only actively tested on macOS and Linux.
Installation Instructions for Development#
git clone https://github.com/elastic/rally.git
cd rally
make install
source .venv/bin/activate
./rally --help
IDE Setup#
Rally uses automatic code formatters. You can apply them by running make format.
However, consider using editor integrations to do it automatically: you’ll need to configure black and isort.
Also consider running pre-commit install to run lint as part of your git commits.
Automatic Updates#
Rally has a built-in auto-update feature when you install it from sources. By default, it will update from the remote named origin. If you want to auto-update from a different remote, provide --update-from-remote=YOUR_REMOTE_NAME as first parameter.
To work conveniently with Rally, we suggest that you add the Rally project directory to your PATH. In case you use a different remote, you should also define aliases in your shell’s config file, e.g.:
alias rally='rally --update-from-remote=elastic '
alias rallyd='rallyd --update-from-remote=elastic '
Then you can invoke Rally or the Rally daemon as usual and have auto-update still work.
Also note that automatic updates are disabled in the following cases:
There are local (uncommitted) changes in the Rally project directory
A different branch than
masteris checked outYou have specified
--skip-updateas the first command line parameterYou have specified
--offlineas a command line parameter for Rally
Configuring Rally#
Rally creates a default configuration automatically on first run. For further configuration, see the configuration help page.
Key Components of Rally#
To get a rough understanding of Rally, it makes sense to get to know its key components:
Race Control: is responsible for proper execution of the race. It sets up all components and acts as a high-level controller.
Mechanic: can build and prepare a benchmark candidate for the race. It checks out the source, builds Elasticsearch, provisions and starts the cluster.
Track: is a concrete benchmarking scenario, e.g. the http_logs benchmark. It defines the data set to use.
Challenge: is the specification on what benchmarks should be run and its configuration (e.g. index, then run a search benchmark with 1000 iterations)
Car: is a concrete system configuration for a benchmark, e.g. an Elasticsearch single-node cluster with default settings.
Driver: drives the race, i.e. it is executing the benchmark according to the track specification.
Reporter: A reporter tells us how the race went (currently only after the fact).
There is a dedicated tutorial on how to add new tracks to Rally.
How to contribute code#
See the contributors guide. We strive to be PEP-8 compliant but don’t follow it to the letter.