Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
1421ad0
Upgrade Elastic search client libraries and urlib3.
fressi-elastic Jan 13, 2026
de1c485
Try enabling client compatibility mode to support ES version 8
fressi-elastic Jan 14, 2026
1011049
Update client compatibility version handling.
fressi-elastic Jan 19, 2026
31a59e3
Drop support for distribution version < 8, add support for version 9
fressi-elastic Jan 19, 2026
169050a
Remove obsolete unit test.
fressi-elastic Jan 19, 2026
494a501
Change track dependency installation: add pip to venv and deprecate u…
fressi-elastic Jan 19, 2026
478846c
It removes unnecessary changes.
fressi-elastic Jan 19, 2026
be8fe13
Skip installing dependencies, when all have been removed.
fressi-elastic Jan 19, 2026
2a05ff1
Use mimetype "application/x-ndjson" as default for bulk requests.
fressi-elastic Jan 19, 2026
46c6f19
Rewrite how headers are being reconbined in perform_request method
fressi-elastic Jan 19, 2026
e9018e7
Update requests version.
fressi-elastic Jan 19, 2026
933bc1d
It uses `docker compose` command instead of the now deprecated old `d…
fressi-elastic Jan 20, 2026
38aafd8
It removes unnecessary dependency.
fressi-elastic Jan 20, 2026
24f6479
It uses `docker compose` command instead of the now deprecated old `d…
fressi-elastic Jan 20, 2026
79e299b
Corrected capitalization of 'rally' to 'Rally'.
fressi-elastic Jan 20, 2026
4ec0a24
Simplify slice `dependency[len(deprecated) : len(deprecated) + 1]`
fressi-elastic Jan 20, 2026
63dabea
Refactor and test function `_filter_requirements`.
fressi-elastic Jan 20, 2026
5c86570
Restore `docker` as Python dependency.
fressi-elastic Jan 20, 2026
40def93
Fix Python executable path in `test_loader.py`
fressi-elastic Jan 20, 2026
f0ae21a
Update Docker client library to version 7.1.0
fressi-elastic Jan 20, 2026
b67e108
Revert wrong typo correction.
fressi-elastic Jan 22, 2026
002cabf
It reverts some changes to let client classes better match the origin…
fressi-elastic Jan 22, 2026
45309bd
Use compatibility mode version 8 when server version is unknown.
fressi-elastic Jan 22, 2026
d86e421
Update minimal supported version in CLI and project documentation.
fressi-elastic Jan 22, 2026
1f7eaa4
Set constructor `hosts` parameter default value to `None` for compati…
fressi-elastic Jan 22, 2026
73ea086
Remove workaround to forbid installation of deprecated packages durin…
fressi-elastic Jan 22, 2026
25db777
It fixes it/docker_dev_image_test.py error handling and update server…
fressi-elastic Jan 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ Once your changes and tests are ready to submit for review:

Ensure that all tests pass by running `make check-all`. This runs sequentially lint checks, unit tests and integration tests. These can be executed in isolation using `make lint`, `make test` and `make it` respectively, in case you need to iterate over a subset of tests.

Note: Integration tests are much slower than unit tests and require `docker-compose`.
Note: Integration tests are much slower than unit tests and require `docker compose`.

3. Sign the Contributor License Agreement

Expand Down
18 changes: 13 additions & 5 deletions docker/docker-compose-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,17 @@ services:
es01:
condition: service_healthy
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0
image: docker.elastic.co/elasticsearch/elasticsearch:9.2.4
container_name: es01
environment:
- node.name=es01
- cluster.name=docker-cluster
- discovery.type=single-node
- bootstrap.memory_lock=true
# It disable security for tests
- xpack.security.enabled=false
- xpack.security.enrollment.enabled=false
- xpack.security.http.ssl.enabled=false
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
volumes:
- esdata1:/usr/share/elasticsearch/data
Expand All @@ -24,10 +31,11 @@ services:
networks:
- esnet
healthcheck:
test: curl -f http://localhost:9200
interval: 5s
timeout: 2s
retries: 10
test: ["CMD-SHELL", "curl -s http://localhost:9200/_cluster/health | grep -vq '\"status\":\"red\"'"]
interval: 10s
timeout: 10s
retries: 120

networks:
esnet:
name: rally-tests
Expand Down
4 changes: 2 additions & 2 deletions docs/adding_tracks.rst
Original file line number Diff line number Diff line change
Expand Up @@ -295,11 +295,11 @@ You can also show details about your track with ``esrally info --track-path=~/ra
5. force-merge
6. query-match-all (8 clients)

Congratulations, you have created your first track! You can test it with ``esrally race --distribution-version=7.14.1 --track-path=~/rally-tracks/tutorial``.
Congratulations, you have created your first track! You can test it with ``esrally race --distribution-version=9.2.4 --track-path=~/rally-tracks/tutorial``.

.. note::

To test the track with Elasticsearch prior to 7.0.0 you need to update ``index.json`` and ``track.json`` as specified in notes above and then execute ``esrally race --distribution-version=6.5.3 --track-path=~/rally-tracks/tutorial``.
To test the track with Elasticsearch prior to 7.0.0 you need to update ``index.json`` and ``track.json`` as specified in notes above and then execute ``esrally race --distribution-version=9.2.4 --track-path=~/rally-tracks/tutorial``.


.. _add_track_test_mode:
Expand Down
2 changes: 1 addition & 1 deletion docs/car.rst
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ You can now verify that everything works by listing all teams in this team repos

This shows all teams that are available on the ``master`` branch of this repository. Suppose you only created tracks on the branch ``2`` because you're interested in the performance of Elasticsearch 2.x, then you can specify also the distribution version::

esrally list teams --team-repository=private --distribution-version=7.0.0
esrally list teams --team-repository=private --distribution-version=9.2.4


Rally will follow the same branch fallback logic as described above.
Expand Down
8 changes: 4 additions & 4 deletions docs/cluster_management.rst
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ In this section we will setup a single Elasticsearch node locally, run a benchma

First we need to install Elasticearch::

esrally install --quiet --distribution-version=7.4.2 --node-name="rally-node-0" --network-host="127.0.0.1" --http-port=39200 --master-nodes="rally-node-0" --seed-hosts="127.0.0.1:39300"
esrally install --quiet --distribution-version=9.2.4 --node-name="rally-node-0" --network-host="127.0.0.1" --http-port=39200 --master-nodes="rally-node-0" --seed-hosts="127.0.0.1:39300"

The parameter ``--network-host`` defines the network interface this node will bind to and ``--http-port`` defines which port will be exposed for HTTP traffic. Rally will automatically choose the transport port range as 100 above (39300). The parameters ``--master-nodes`` and ``--seed-hosts`` are necessary for the discovery process. Please see the respective Elasticsearch documentation on `discovery <https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery.html>`_ for more details.

Expand Down Expand Up @@ -70,11 +70,11 @@ Levelling Up: Benchmarking a Cluster
This approach of being able to manage individual cluster nodes shows its power when we want to setup a cluster consisting of multiple nodes. At the moment Rally only supports a uniform cluster architecture but with this approach we can also setup arbitrarily complex clusters. The following examples shows how to setup a uniform three node cluster on three machines with the IPs ``192.168.14.77``, ``192.168.14.78`` and ``192.168.14.79``. On each machine we will issue the following command (pick the right one per machine)::

# on 192.168.14.77
export INSTALLATION_ID=$(esrally install --quiet --distribution-version=7.4.2 --node-name="rally-node-0" --network-host="192.168.14.77" --http-port=39200 --master-nodes="rally-node-0,rally-node-1,rally-node-2" --seed-hosts="192.168.14.77:39300,192.168.14.78:39300,192.168.14.79:39300" | jq --raw-output '.["installation-id"]')
export INSTALLATION_ID=$(esrally install --quiet --distribution-version=9.2.4 --node-name="rally-node-0" --network-host="192.168.14.77" --http-port=39200 --master-nodes="rally-node-0,rally-node-1,rally-node-2" --seed-hosts="192.168.14.77:39300,192.168.14.78:39300,192.168.14.79:39300" | jq --raw-output '.["installation-id"]')
# on 192.168.14.78
export INSTALLATION_ID=$(esrally install --quiet --distribution-version=7.4.2 --node-name="rally-node-1" --network-host="192.168.14.78" --http-port=39200 --master-nodes="rally-node-0,rally-node-1,rally-node-2" --seed-hosts="192.168.14.77:39300,192.168.14.78:39300,192.168.14.79:39300" | jq --raw-output '.["installation-id"]')
export INSTALLATION_ID=$(esrally install --quiet --distribution-version=9.2.4 --node-name="rally-node-1" --network-host="192.168.14.78" --http-port=39200 --master-nodes="rally-node-0,rally-node-1,rally-node-2" --seed-hosts="192.168.14.77:39300,192.168.14.78:39300,192.168.14.79:39300" | jq --raw-output '.["installation-id"]')
# on 192.168.14.79
export INSTALLATION_ID=$(esrally install --quiet --distribution-version=7.4.2 --node-name="rally-node-2" --network-host="192.168.14.79" --http-port=39200 --master-nodes="rally-node-0,rally-node-1,rally-node-2" --seed-hosts="192.168.14.77:39300,192.168.14.78:39300,192.168.14.79:39300" | jq --raw-output '.["installation-id"]')
export INSTALLATION_ID=$(esrally install --quiet --distribution-version=9.2.4 --node-name="rally-node-2" --network-host="192.168.14.79" --http-port=39200 --master-nodes="rally-node-0,rally-node-1,rally-node-2" --seed-hosts="192.168.14.77:39300,192.168.14.78:39300,192.168.14.79:39300" | jq --raw-output '.["installation-id"]')

Then we pick a random race id, e.g. ``fb38013d-5d06-4b81-b81a-b61c8c10f6e5`` and set it on each machine (including the machine where will generate load)::

Expand Down
34 changes: 17 additions & 17 deletions docs/command_line_reference.rst
Original file line number Diff line number Diff line change
Expand Up @@ -109,22 +109,22 @@ Because ``--quiet`` is specified, Rally will suppress all non-essential output (

This subcommand can be used to download Elasticsearch distributions. Example::

esrally download --distribution-version=6.8.0 --quiet
esrally download --distribution-version=9.2.4 --quiet

This will download the OSS distribution of Elasticsearch 6.8.0. Because ``--quiet`` is specified, Rally will suppress all non-essential output (banners, progress messages etc.) and only return the location of the binary on the local machine after it has downloaded it::
This will download the OSS distribution of Elasticsearch 9.2.4. Because ``--quiet`` is specified, Rally will suppress all non-essential output (banners, progress messages etc.) and only return the location of the binary on the local machine after it has downloaded it::

{
"elasticsearch": "/Users/dm/.rally/benchmarks/distributions/elasticsearch-oss-6.8.0.tar.gz"
"elasticsearch": "/Users/dm/.rally/benchmarks/distributions/elasticsearch-oss-9.2.4.tar.gz"
}

To download the default distribution you need to specify a license (via ``--car``)::

esrally download --distribution-version=6.8.0 --car=basic-license --quiet
esrally download --distribution-version=9.2.4 --car=basic-license --quiet

This will show the path to the default distribution::

{
"elasticsearch": "/Users/dm/.rally/benchmarks/distributions/elasticsearch-6.8.0.tar.gz"
"elasticsearch": "/Users/dm/.rally/benchmarks/distributions/elasticsearch-9.2.4.tar.gz"
}

``delete``
Expand All @@ -143,7 +143,7 @@ The ``delete`` subcommand is used to delete records for different configuration

This subcommand can be used to install a single Elasticsearch node. Example::

esrally install --quiet --distribution-version=7.4.2 --node-name="rally-node-0" --network-host="127.0.0.1" --http-port=39200 --master-nodes="rally-node-0" --seed-hosts="127.0.0.1:39300"
esrally install --quiet --distribution-version=9.2.4 --node-name="rally-node-0" --network-host="127.0.0.1" --http-port=39200 --master-nodes="rally-node-0" --seed-hosts="127.0.0.1:39300"

This will output the id of this installation::

Expand Down Expand Up @@ -310,13 +310,13 @@ Used to specify the current node's name in the cluster when it is setup via the
This parameter is useful in benchmarks involved multiple Elasticsearch clusters. It's used to configure the cluster name of the current Elasticsearch node when it is setup via the ``install`` or ``race`` subcommand. The following example sets up two Elasticsearch clusters: ``cluster-1`` and ``cluster-2``, and each has two nodes::

# install node-1 in cluster-1
esrally install --quiet --distribution-version=8.2.2 --node-name="node-1" --cluster-name=cluster-1 --network-host="192.168.1.1" --http-port=39200 --master-nodes="node-1" --seed-hosts="192.168.1.1:39300,192.168.1.2:39300"
esrally install --quiet --distribution-version=9.2.4 --node-name="node-1" --cluster-name=cluster-1 --network-host="192.168.1.1" --http-port=39200 --master-nodes="node-1" --seed-hosts="192.168.1.1:39300,192.168.1.2:39300"
# install node-2 in cluster-1
esrally install --quiet --distribution-version=8.2.2 --node-name="node-2" --cluster-name=cluster-1 --network-host="192.168.1.2" --http-port=39200 --master-nodes="node-1" --seed-hosts="192.168.1.1:39300,192.168.1.2:39300"
esrally install --quiet --distribution-version=9.2.4 --node-name="node-2" --cluster-name=cluster-1 --network-host="192.168.1.2" --http-port=39200 --master-nodes="node-1" --seed-hosts="192.168.1.1:39300,192.168.1.2:39300"
# install node-3 in cluster-2
esrally install --quiet --distribution-version=8.2.2 --node-name="node-3" --cluster-name=cluster-2 --network-host="192.168.1.3" --http-port=39200 --master-nodes="node-3" --seed-hosts="192.168.1.3:39300,192.168.1.4:39300"
esrally install --quiet --distribution-version=9.2.4 --node-name="node-3" --cluster-name=cluster-2 --network-host="192.168.1.3" --http-port=39200 --master-nodes="node-3" --seed-hosts="192.168.1.3:39300,192.168.1.4:39300"
# install node-4 in cluster-2
esrally install --quiet --distribution-version=8.2.2 --node-name="node-4" --cluster-name=cluster-2 --network-host="192.168.1.4" --http-port=39200 --master-nodes="node-3" --seed-hosts="192.168.1.3:39300,192.168.1.4:39300"
esrally install --quiet --distribution-version=9.2.4 --node-name="node-4" --cluster-name=cluster-2 --network-host="192.168.1.4" --http-port=39200 --master-nodes="node-3" --seed-hosts="192.168.1.3:39300,192.168.1.4:39300"

If the ``cluster-name`` parameter is not specified, Rally will use ``rally-benchmark`` as the default cluster name.

Expand Down Expand Up @@ -425,14 +425,14 @@ Example::

Specifies the name of the target operating system for which an artifact should be downloaded. By default this value is automatically derived based on the operating system Rally is run. This command line flag is only applicable to the ``download`` subcommand and allows to download an artifact for a different operating system. Example::

esrally download --distribution-version=7.5.1 --target-os=linux
esrally download --distribution-version=9.2.4 --target-os=linux

``target-arch``
~~~~~~~~~~~~~~~

Specifies the name of the target CPU architecture for which an artifact should be downloaded. By default this value is automatically derived based on the CPU architecture Rally is run. This command line flag is only applicable to the ``download`` subcommand and allows to download an artifact for a different CPU architecture. Example::

esrally download --distribution-version=7.5.1 --target-arch=x86_64
esrally download --distribution-version=9.2.4 --target-arch=x86_64


``car``
Expand Down Expand Up @@ -481,7 +481,7 @@ Allows to override variables of Elasticsearch plugins. It accepts a list of comm

Example::

esrally race --track=geonames --distribution-version=6.1.1. --elasticsearch-plugins="x-pack:monitoring-http" --plugin-params="monitoring_type:'http',monitoring_host:'some_remote_host',monitoring_port:10200,monitoring_user:'rally',monitoring_password:'m0n1t0r1ng'"
esrally race --track=geonames --distribution-version=9.2.4. --elasticsearch-plugins="x-pack:monitoring-http" --plugin-params="monitoring_type:'http',monitoring_host:'some_remote_host',monitoring_port:10200,monitoring_user:'rally',monitoring_password:'m0n1t0r1ng'"

This enables the HTTP exporter of `X-Pack Monitoring <https://www.elastic.co/products/x-pack/monitoring>`_ and exports the data to the configured monitoring host.

Expand Down Expand Up @@ -594,9 +594,9 @@ This command line parameter sets the major version of the JDK that Rally should
Example::

# Run a benchmark with defaults
esrally race --track=geonames --distribution-version=7.0.0
esrally race --track=geonames --distribution-version=9.2.4
# Force to run with JDK 11
esrally race --track=geonames --distribution-version=7.0.0 --runtime-jdk=11
esrally race --track=geonames --distribution-version=9.2.4 --runtime-jdk=11

It is also possible to specify the JDK that is bundled with Elasticsearch with the special value ``bundled``. The `JDK is bundled from Elasticsearch 7.0.0 onwards <https://www.elastic.co/guide/en/elasticsearch/reference/7.0/release-highlights-7.0.0.html#_bundle_jdk_in_elasticsearch_distribution>`_.

Expand Down Expand Up @@ -640,10 +640,10 @@ If you want Rally to launch and benchmark a cluster using a binary distribution,

::

esrally race --track=geonames --distribution-version=7.0.0
esrally race --track=geonames --distribution-version=9.2.4


Rally will then benchmark the official Elasticsearch 7.0.0 distribution. Please check our :doc:`version support page </versions>` to see which Elasticsearch versions are currently supported by Rally.
Rally will then benchmark the official Elasticsearch 9.2.4 distribution. Please check our :doc:`version support page </versions>` to see which Elasticsearch versions are currently supported by Rally.

``distribution-repository``
~~~~~~~~~~~~~~~~~~~~~~~~~~~
Expand Down
2 changes: 1 addition & 1 deletion docs/developing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Install the following software packages:

* `uv <https://docs.astral.sh/uv/getting-started/installation/>`_
* JDK version required to build Elasticsearch. Please refer to the `build setup requirements <https://github.com/elastic/elasticsearch/blob/main/CONTRIBUTING.md#contributing-to-the-elasticsearch-codebase>`_.
* `Docker <https://docs.docker.com/install/>`_ and on Linux additionally `docker-compose <https://docs.docker.com/compose/install/>`_.
* `Docker <https://docs.docker.com/install/>`_ and on Linux additionally `docker compose <https://docs.docker.com/compose/install/>`_.
* `jq <https://stedolan.github.io/jq/download/>`_
* git

Expand Down
2 changes: 1 addition & 1 deletion docs/elasticsearch_plugins.rst
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ In order to tell Rally to install a plugin, use the ``--elasticsearch-plugins``

Example::

esrally race --track=geonames --distribution-version=7.12.0 --elasticsearch-plugins="analysis-icu,analysis-phonetic"
esrally race --track=geonames --distribution-version=9.2.4 --elasticsearch-plugins="analysis-icu,analysis-phonetic"

This will install the plugins ``analysis-icu`` and ``analysis-phonetic`` (in that order). In order to use the features that these plugins provide, you need to write a :doc:`custom track </adding_tracks>`.

Expand Down
6 changes: 3 additions & 3 deletions docs/migrate.rst
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ Previously a subcommand was optional when running a benchmark. With Rally 2.1.0

Invoke Rally with the ``race`` subcommand instead::

esrally race --distribution-version=7.10.0
esrally race --distribution-version=9.2.4


Running without a track is deprecated
Expand All @@ -225,7 +225,7 @@ Previously Rally has implicitly chosen the geonames track as default when ``--tr

Invoke Rally with ``--track=geonames`` instead::

esrally race --distribution-version=7.10.0 --track=geonames
esrally race --distribution-version=9.2.4 --track=geonames


Migrating to Rally 2.0.4
Expand All @@ -240,7 +240,7 @@ Rally 2.0.4 will warn when invoked without subcommand. So instead of invoking::

Invoke Rally with the ``race`` subcommand instead::

esrally race --distribution-version=7.10.0
esrally race --distribution-version=9.2.4

When Rally is invoked without a subcommand it will issue the following warning on the command line and in the log file::

Expand Down
2 changes: 1 addition & 1 deletion docs/pipelines.rst
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ from-distribution

This pipeline allows to benchmark an official Elasticsearch distribution which will be automatically downloaded by Rally. An example invocation::

esrally race --track=geonames --pipeline=from-distribution --distribution-version=7.0.0
esrally race --track=geonames --pipeline=from-distribution --distribution-version=9.2.4

The version numbers have to match the name in the download URL path.

Expand Down
4 changes: 2 additions & 2 deletions docs/quickstart.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@ Run your first race

Now we're ready to run our first :doc:`race </glossary>`::

esrally race --distribution-version=6.5.3 --track=geonames
esrally race --distribution-version=9.2.4 --track=geonames

This will download Elasticsearch 6.5.3 and run the `geonames <https://github.com/elastic/rally-tracks/tree/master/geonames>`_ :doc:`track </glossary>` against it. After the race, a :doc:`summary report </summary_report>` is written to the command line:::
This will download Elasticsearch 9.2.4 and run the `geonames <https://github.com/elastic/rally-tracks/tree/master/geonames>`_ :doc:`track </glossary>` against it. After the race, a :doc:`summary report </summary_report>` is written to the command line:::


------------------------------------------------------
Expand Down
8 changes: 4 additions & 4 deletions docs/race.rst
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,11 @@ Starting a Race

To start a race you have to define the track and challenge to run. For example::

esrally race --distribution-version=6.0.0 --track=geopoint --challenge=append-fast-with-conflicts
esrally race --distribution-version=9.2.4 --track=geopoint --challenge=append-fast-with-conflicts

Rally will then start racing on this track. If you have never started Rally before, it should look similar to the following output::

$ esrally race --distribution-version=6.0.0 --track=geopoint --challenge=append-fast-with-conflicts
$ esrally race --distribution-version=9.2.4 --track=geopoint --challenge=append-fast-with-conflicts

____ ____
/ __ \____ _/ / /_ __
Expand All @@ -61,8 +61,8 @@ Rally will then start racing on this track. If you have never started Rally befo
/_/ |_|\__,_/_/_/\__, /
/____/

[INFO] Racing on track [geopoint], challenge [append-fast-with-conflicts] and car ['defaults'] with version [6.0.0].
[INFO] Downloading Elasticsearch 6.0.0 ... [OK]
[INFO] Racing on track [geopoint], challenge [append-fast-with-conflicts] and car ['defaults'] with version [9.2.4].
[INFO] Downloading Elasticsearch 9.2.4 ... [OK]
[INFO] Rally will delete the benchmark candidate after the benchmark
[INFO] Downloading data from [http://benchmarks.elasticsearch.org.s3.amazonaws.com/corpora/geopoint/documents.json.bz2] (482 MB) to [/Users/dm/.rally/benchmarks/data/geopoint/documents.json.bz2] ... [OK]
[INFO] Decompressing track data from [/Users/dm/.rally/benchmarks/data/geopoint/documents.json.bz2] to [/Users/dm/.rally/benchmarks/data/geopoint/documents.json] (resulting size: 2.28 GB) ... [OK]
Expand Down
Loading