diff --git a/docs/command_line_reference.rst b/docs/command_line_reference.rst
index 42858950..6146b16d 100644
--- a/docs/command_line_reference.rst
+++ b/docs/command_line_reference.rst
@@ -64,6 +64,11 @@ Examples::
 
 Selects the track repository that Rally should use to resolve tracks. By default the ``default`` track repository is used, which is available in the Github project `rally-tracks <https://github.com/elastic/rally-tracks>`_. See the :doc:`track reference </track>` on how to add your own track repositories. ``--track-path`` and ``--track-repository`` as well as ``--track`` are mutually exclusive.
 
+``track-revision``
+~~~~~~~~~~~~~~~~~~
+
+Selects a specific revision in the track repository. By default, Rally will choose the most appropriate branch on its own but in some cases it is necessary to specify a certain commit. This is mostly needed when testing whether a change in performance has occurred due to a change in the workload. 
+
 ``track``
 ~~~~~~~~~
 
diff --git a/docs/track.rst b/docs/track.rst
index f477b563..bf632cce 100644
--- a/docs/track.rst
+++ b/docs/track.rst
@@ -793,6 +793,18 @@ With the operation ``raw-request`` you can execute arbitrary HTTP requests again
 * ``request-params`` (optional): A structure containing HTTP request parameters.
 * ``ignore`` (optional): An array of HTTP response status codes to ignore (i.e. consider as successful).
 
+sleep
+~~~~~
+
+With the operation ``sleep`` you can sleep for a certain duration to ensure no requests are executed by the corresponding clients. The ``sleep`` operation supports the following parameter:
+
+* ``duration`` (mandatory): A non-negative number that defines the sleep duration in seconds.
+
+.. note::
+    The ``sleep`` operation is only useful in very limited circumstances. To throttle throughput, specify a ``target-throughput`` on the corresponding task instead.
+
+This is an administrative operation. Metrics are not reported by default. Reporting can be forced by setting ``include-in-reporting`` to ``true``.
+
 schedule
 ~~~~~~~~
 
diff --git a/esrally/driver/runner.py b/esrally/driver/runner.py
index 1b13228c..5223f96d 100644
--- a/esrally/driver/runner.py
+++ b/esrally/driver/runner.py
@@ -36,6 +36,8 @@ def register_default_runners():
     register_runner(track.OperationType.NodesStats.name, NodeStats())
     register_runner(track.OperationType.Search.name, Query())
     register_runner(track.OperationType.RawRequest.name, RawRequest())
+    # This is an administrative operation but there is no need for a retry here as we don't issue a request
+    register_runner(track.OperationType.Sleep.name, Sleep())
 
     # We treat the following as administrative commands and thus already start to wrap them in a retry.
     register_runner(track.OperationType.ClusterHealth.name, Retry(ClusterHealth()))
@@ -1070,6 +1072,18 @@ class RawRequest(Runner):
         return "raw-request"
 
 
+class Sleep(Runner):
+    """
+    Sleeps for the specified duration not issuing any request.
+    """
+
+    def __call__(self, es, params):
+        time.sleep(mandatory(params, "duration", "sleep"))
+
+    def __repr__(self, *args, **kwargs):
+        return "sleep"
+
+
 # TODO: Allow to use this from (selected) regular runners and add user documentation.
 # TODO: It would maybe be interesting to add meta-data on how many retries there were.
 class Retry(Runner):
diff --git a/esrally/rally.py b/esrally/rally.py
index 3a89ec35..b4e91454 100644
--- a/esrally/rally.py
+++ b/esrally/rally.py
@@ -167,6 +167,10 @@ def create_arg_parser():
         track_source_group.add_argument(
             "--track-path",
             help="Define the path to a track.")
+        track_source_group.add_argument(
+            "--track-revision",
+            help="Define a specific revision in the track repository that Rally should use.",
+            default=None)
         p.add_argument(
             "--team-repository",
             help="Define the repository from where Rally will load teams and cars (default: default).",
@@ -573,6 +577,7 @@ def main():
     if args.track_path:
         cfg.add(config.Scope.applicationOverride, "track", "track.path", os.path.abspath(io.normalize_path(args.track_path)))
         cfg.add(config.Scope.applicationOverride, "track", "repository.name", None)
+        cfg.add(config.Scope.applicationOverride, "track", "repository.revision", None)
         if args.track:
             # stay as close as possible to argparse errors although we have a custom validation.
             arg_parser.error("argument --track not allowed with argument --track-path")
@@ -580,6 +585,7 @@ def main():
     else:
         # cfg.add(config.Scope.applicationOverride, "track", "track.path", None)
         cfg.add(config.Scope.applicationOverride, "track", "repository.name", args.track_repository)
+        cfg.add(config.Scope.applicationOverride, "track", "repository.revision", args.track_revision)
         # set the default programmatically because we need to determine whether the user has provided a value
         chosen_track = args.track if args.track else "geonames"
         cfg.add(config.Scope.applicationOverride, "track", "track.name", chosen_track)
diff --git a/esrally/track/loader.py b/esrally/track/loader.py
index 8035a12e..ebccef34 100644
--- a/esrally/track/loader.py
+++ b/esrally/track/loader.py
@@ -185,6 +185,7 @@ class GitTrackRepository:
         self.track_name = cfg.opts("track", "track.name", mandatory=False)
         distribution_version = cfg.opts("mechanic", "distribution.version", mandatory=False)
         repo_name = cfg.opts("track", "repository.name")
+        repo_revision = cfg.opts("track", "repository.revision", mandatory=False)
         offline = cfg.opts("system", "offline.mode")
         remote_url = cfg.opts("tracks", "%s.url" % repo_name, mandatory=False)
         root = cfg.opts("node", "root.dir")
@@ -193,7 +194,10 @@ class GitTrackRepository:
 
         self.repo = repo_class(remote_url, tracks_dir, repo_name, "tracks", offline, fetch)
         if update:
-            self.repo.update(distribution_version)
+            if repo_revision:
+                self.repo.checkout(repo_revision)
+            else:
+                self.repo.update(distribution_version)
 
     @property
     def track_names(self):
diff --git a/esrally/track/params.py b/esrally/track/params.py
index 6b342f43..a87bca49 100644
--- a/esrally/track/params.py
+++ b/esrally/track/params.py
@@ -21,6 +21,7 @@ import time
 import math
 import types
 import operator
+import numbers
 from enum import Enum
 
 from esrally import exceptions
@@ -130,6 +131,23 @@ class DelegatingParamSource(ParamSource):
         return self.delegate(self.track, self._params, **self.kwargs)
 
 
+class SleepParamSource(ParamSource):
+    def __init__(self, track, params, **kwargs):
+        super().__init__(track, params, **kwargs)
+        try:
+            duration = params["duration"]
+        except KeyError:
+            raise exceptions.InvalidSyntax("parameter 'duration' is mandatory for sleep operation")
+
+        if not isinstance(duration, numbers.Number):
+            raise exceptions.InvalidSyntax("parameter 'duration' for sleep operation must be a number")
+        if duration < 0:
+            raise exceptions.InvalidSyntax("parameter 'duration' must be non-negative but was {}".format(duration))
+
+    def params(self):
+        return dict(self._params)
+
+
 class CreateIndexParamSource(ParamSource):
     def __init__(self, track, params, **kwargs):
         super().__init__(track, params, **kwargs)
@@ -889,6 +907,7 @@ register_param_source_for_operation(track.OperationType.CreateIndex, CreateIndex
 register_param_source_for_operation(track.OperationType.DeleteIndex, DeleteIndexParamSource)
 register_param_source_for_operation(track.OperationType.CreateIndexTemplate, CreateIndexTemplateParamSource)
 register_param_source_for_operation(track.OperationType.DeleteIndexTemplate, DeleteIndexTemplateParamSource)
+register_param_source_for_operation(track.OperationType.Sleep, SleepParamSource)
 
 # Also register by name, so users can use it too
 register_param_source_for_name("file-reader", BulkIndexParamSource)
diff --git a/esrally/track/track.py b/esrally/track/track.py
index e3e382d6..0dde287f 100644
--- a/esrally/track/track.py
+++ b/esrally/track/track.py
@@ -436,6 +436,7 @@ class OperationType(Enum):
     DeleteMlJob = 1015
     OpenMlJob = 1016
     CloseMlJob = 1017
+    Sleep = 1018
 
     @property
     def admin_op(self):
@@ -487,6 +488,8 @@ class OperationType(Enum):
             return OperationType.OpenMlJob
         elif v == "close-ml-job":
             return OperationType.CloseMlJob
+        elif v == "sleep":
+            return OperationType.Sleep
         else:
             raise KeyError("No enum value for [%s]" % v)
 

Add configurable "sleep" operation
When running benchmarks against nodes that are expected to see few but long-running queries it is possible to combine request timeout with `target-interval` to ensure there is a bit of quiet time between queries. This however results in a longer quiet time for queries that return quickly. It would be useful to have an operation that just adds a configurable pause to the track so that the same quiet time can be achieved no matter how fast the query returns.
diff --git a/tests/driver/runner_test.py b/tests/driver/runner_test.py
index fe344e38..2ef53314 100644
--- a/tests/driver/runner_test.py
+++ b/tests/driver/runner_test.py
@@ -1798,6 +1798,31 @@ class RawRequestRunnerTests(TestCase):
                                                              params={})
 
 
+class SleepTests(TestCase):
+    @mock.patch("elasticsearch.Elasticsearch")
+    # To avoid real sleeps in unit tests
+    @mock.patch("time.sleep")
+    def test_missing_parameter(self, sleep, es):
+        r = runner.Sleep()
+        with self.assertRaisesRegex(exceptions.DataError,
+                                    "Parameter source for operation 'sleep' did not provide the mandatory parameter "
+                                    "'duration'. Please add it to your parameter source."):
+            r(es, params={})
+
+        self.assertEqual(0, es.call_count)
+        self.assertEqual(0, sleep.call_count)
+
+    @mock.patch("elasticsearch.Elasticsearch")
+    # To avoid real sleeps in unit tests
+    @mock.patch("time.sleep")
+    def test_sleep(self, sleep, es):
+        r = runner.Sleep()
+        r(es, params={"duration": 4.3})
+
+        self.assertEqual(0, es.call_count)
+        sleep.assert_called_once_with(4.3)
+
+
 class ShrinkIndexTests(TestCase):
     @mock.patch("elasticsearch.Elasticsearch")
     # To avoid real sleeps in unit tests
diff --git a/tests/track/params_test.py b/tests/track/params_test.py
index b94d9c72..8c3b7dda 100644
--- a/tests/track/params_test.py
+++ b/tests/track/params_test.py
@@ -1184,6 +1184,26 @@ class ParamsRegistrationTests(TestCase):
         params._unregister_param_source_for_name(source_name)
 
 
+class SleepParamSourceTests(TestCase):
+    def test_missing_duration_parameter(self):
+        with self.assertRaisesRegex(exceptions.InvalidSyntax, "parameter 'duration' is mandatory for sleep operation"):
+            params.SleepParamSource(track.Track(name="unit-test"), params={})
+
+    def test_duration_parameter_wrong_type(self):
+        with self.assertRaisesRegex(exceptions.InvalidSyntax,
+                                    "parameter 'duration' for sleep operation must be a number"):
+            params.SleepParamSource(track.Track(name="unit-test"), params={"duration": "this is a string"})
+
+    def test_duration_parameter_negative_number(self):
+        with self.assertRaisesRegex(exceptions.InvalidSyntax,
+                                    "parameter 'duration' must be non-negative but was -1.0"):
+            params.SleepParamSource(track.Track(name="unit-test"), params={"duration": -1.0})
+
+    def test_param_source_passes_all_parameters(self):
+        p = params.SleepParamSource(track.Track(name="unit-test"), params={"duration": 3.4, "additional": True})
+        self.assertDictEqual({"duration": 3.4, "additional": True}, p.params())
+
+
 class CreateIndexParamSourceTests(TestCase):
     def test_create_index_inline_with_body(self):
         source = params.CreateIndexParamSource(track.Track(name="unit-test"), params={

pip install -e .
parse_log_pytest
pytest
pytest pytest-benchmark
apt-get update apt-get install -y gcc python3-pip python3-dev
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
certifi==2021.5.30
elasticsearch==6.2.0
-e git+https://github.com/elastic/rally.git@799e0642c27a0067931f305359a615cbf9fe2e20#egg=esrally
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
Jinja2==2.9.5
jsonschema==2.5.1
MarkupSafe==2.0.1
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
psutil==5.4.0
py @ file:///opt/conda/conda-bld/py_1644396412707/work
py-cpuinfo==3.2.0
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pytest==6.2.4
pytest-benchmark==3.4.1
tabulate==0.8.1
thespian==3.9.3
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
urllib3==1.22
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: rally
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - elasticsearch==6.2.0
      - jinja2==2.9.5
      - jsonschema==2.5.1
      - markupsafe==2.0.1
      - psutil==5.4.0
      - py-cpuinfo==3.2.0
      - pytest-benchmark==3.4.1
      - tabulate==0.8.1
      - thespian==3.9.3
      - urllib3==1.22
prefix: /opt/conda/envs/rally

tests/driver/runner_test.py::SleepTests::test_missing_parameter tests/driver/runner_test.py::SleepTests::test_sleep tests/track/params_test.py::SleepParamSourceTests::test_duration_parameter_negative_number tests/track/params_test.py::SleepParamSourceTests::test_duration_parameter_wrong_type tests/track/params_test.py::SleepParamSourceTests::test_missing_duration_parameter tests/track/params_test.py::SleepParamSourceTests::test_param_source_passes_all_parameters
tests/driver/runner_test.py::RegisterRunnerTests::test_multi_cluster_runner_class_should_be_wrapped tests/driver/runner_test.py::RegisterRunnerTests::test_multi_cluster_runner_class_with_context_manager_should_be_wrapped_with_context_manager_enabled tests/driver/runner_test.py::RegisterRunnerTests::test_runner_function_should_be_wrapped tests/driver/runner_test.py::RegisterRunnerTests::test_single_cluster_runner_class_should_be_wrapped tests/driver/runner_test.py::RegisterRunnerTests::test_single_cluster_runner_class_with_context_manager_should_be_wrapped_with_context_manager_enabled tests/driver/runner_test.py::BulkIndexRunnerTests::test_bulk_index_error tests/driver/runner_test.py::BulkIndexRunnerTests::test_bulk_index_error_no_shards tests/driver/runner_test.py::BulkIndexRunnerTests::test_bulk_index_missing_params tests/driver/runner_test.py::BulkIndexRunnerTests::test_bulk_index_success_with_metadata tests/driver/runner_test.py::BulkIndexRunnerTests::test_bulk_index_success_without_metadata_and_without_doc_type tests/driver/runner_test.py::BulkIndexRunnerTests::test_bulk_index_success_without_metadata_with_doc_type tests/driver/runner_test.py::BulkIndexRunnerTests::test_mixed_bulk_with_detailed_stats tests/driver/runner_test.py::BulkIndexRunnerTests::test_mixed_bulk_with_simple_stats tests/driver/runner_test.py::QueryRunnerTests::test_query_hits_total_as_number tests/driver/runner_test.py::QueryRunnerTests::test_query_match_all tests/driver/runner_test.py::QueryRunnerTests::test_query_match_only_request_body_defined tests/driver/runner_test.py::QueryRunnerTests::test_query_match_using_request_params tests/driver/runner_test.py::QueryRunnerTests::test_scroll_query_cannot_clear_scroll tests/driver/runner_test.py::QueryRunnerTests::test_scroll_query_early_termination tests/driver/runner_test.py::QueryRunnerTests::test_scroll_query_only_one_page tests/driver/runner_test.py::QueryRunnerTests::test_scroll_query_only_one_page_only_request_body_defined tests/driver/runner_test.py::QueryRunnerTests::test_scroll_query_request_all_pages tests/driver/runner_test.py::QueryRunnerTests::test_scroll_query_with_explicit_number_of_pages tests/driver/runner_test.py::PutPipelineRunnerTests::test_create_pipeline tests/driver/runner_test.py::PutPipelineRunnerTests::test_param_body_mandatory tests/driver/runner_test.py::PutPipelineRunnerTests::test_param_id_mandatory tests/driver/runner_test.py::ClusterHealthRunnerTests::test_accepts_better_cluster_status tests/driver/runner_test.py::ClusterHealthRunnerTests::test_rejects_relocating_shards tests/driver/runner_test.py::ClusterHealthRunnerTests::test_rejects_unknown_cluster_status tests/driver/runner_test.py::ClusterHealthRunnerTests::test_waits_for_expected_cluster_status tests/driver/runner_test.py::CreateIndexRunnerTests::test_creates_multiple_indices tests/driver/runner_test.py::CreateIndexRunnerTests::test_param_indices_mandatory tests/driver/runner_test.py::DeleteIndexRunnerTests::test_deletes_all_indices tests/driver/runner_test.py::DeleteIndexRunnerTests::test_deletes_existing_indices tests/driver/runner_test.py::CreateIndexTemplateRunnerTests::test_create_index_templates tests/driver/runner_test.py::CreateIndexTemplateRunnerTests::test_param_templates_mandatory tests/driver/runner_test.py::DeleteIndexTemplateRunnerTests::test_deletes_all_index_templates tests/driver/runner_test.py::DeleteIndexTemplateRunnerTests::test_deletes_only_existing_index_templates tests/driver/runner_test.py::DeleteIndexTemplateRunnerTests::test_param_templates_mandatory tests/driver/runner_test.py::CreateMlDatafeedTests::test_create_ml_datafeed tests/driver/runner_test.py::DeleteMlDatafeedTests::test_delete_ml_datafeed tests/driver/runner_test.py::StartMlDatafeedTests::test_start_ml_datafeed_with_body tests/driver/runner_test.py::StartMlDatafeedTests::test_start_ml_datafeed_with_params tests/driver/runner_test.py::StopMlDatafeedTests::test_stop_ml_datafeed tests/driver/runner_test.py::CreateMlJobTests::test_create_ml_job tests/driver/runner_test.py::DeleteMlJobTests::test_delete_ml_job tests/driver/runner_test.py::OpenMlJobTests::test_open_ml_job tests/driver/runner_test.py::CloseMlJobTests::test_close_ml_job tests/driver/runner_test.py::RawRequestRunnerTests::test_issue_create_index tests/driver/runner_test.py::RawRequestRunnerTests::test_issue_delete_index tests/driver/runner_test.py::RawRequestRunnerTests::test_issue_msearch tests/driver/runner_test.py::RawRequestRunnerTests::test_issue_request_with_defaults tests/driver/runner_test.py::ShrinkIndexTests::test_shrink_index_derives_shrink_node tests/driver/runner_test.py::ShrinkIndexTests::test_shrink_index_with_shrink_node tests/driver/runner_test.py::RetryTests::test_assumes_success_if_runner_returns_non_dict tests/driver/runner_test.py::RetryTests::test_does_not_retry_on_application_error_if_not_wanted tests/driver/runner_test.py::RetryTests::test_does_not_retry_on_timeout_if_not_wanted tests/driver/runner_test.py::RetryTests::test_is_does_not_retry_on_success tests/driver/runner_test.py::RetryTests::test_is_transparent_on_application_error_when_no_retries tests/driver/runner_test.py::RetryTests::test_is_transparent_on_exception_when_no_retries tests/driver/runner_test.py::RetryTests::test_is_transparent_on_success_when_no_retries tests/driver/runner_test.py::RetryTests::test_retries_mixed_timeout_and_application_errors tests/driver/runner_test.py::RetryTests::test_retries_on_application_error_if_wanted tests/driver/runner_test.py::RetryTests::test_retries_on_timeout_if_wanted_and_raises_if_no_recovery tests/driver/runner_test.py::RetryTests::test_retries_on_timeout_if_wanted_and_returns_first_call tests/track/params_test.py::SliceTests::test_slice_with_slice_larger_than_source tests/track/params_test.py::SliceTests::test_slice_with_source_larger_than_slice tests/track/params_test.py::ConflictingIdsBuilderTests::test_no_id_conflicts tests/track/params_test.py::ConflictingIdsBuilderTests::test_random_conflicts tests/track/params_test.py::ConflictingIdsBuilderTests::test_sequential_conflicts tests/track/params_test.py::ActionMetaDataTests::test_generate_action_meta_data_typeless tests/track/params_test.py::ActionMetaDataTests::test_generate_action_meta_data_with_id_and_zero_conflict_probability tests/track/params_test.py::ActionMetaDataTests::test_generate_action_meta_data_with_id_conflicts tests/track/params_test.py::ActionMetaDataTests::test_generate_action_meta_data_with_id_conflicts_and_recency_bias tests/track/params_test.py::ActionMetaDataTests::test_generate_action_meta_data_without_id_conflicts tests/track/params_test.py::ActionMetaDataTests::test_source_file_action_meta_data tests/track/params_test.py::IndexDataReaderTests::test_read_bulk_larger_than_number_of_docs tests/track/params_test.py::IndexDataReaderTests::test_read_bulk_smaller_than_number_of_docs tests/track/params_test.py::IndexDataReaderTests::test_read_bulk_smaller_than_number_of_docs_and_multiple_clients tests/track/params_test.py::IndexDataReaderTests::test_read_bulk_with_external_id_and_zero_conflict_probability tests/track/params_test.py::IndexDataReaderTests::test_read_bulk_with_id_conflicts tests/track/params_test.py::IndexDataReaderTests::test_read_bulk_with_offset tests/track/params_test.py::IndexDataReaderTests::test_read_bulks_and_assume_metadata_line_in_source_file tests/track/params_test.py::InvocationGeneratorTests::test_build_conflicting_ids tests/track/params_test.py::InvocationGeneratorTests::test_calculate_bounds tests/track/params_test.py::InvocationGeneratorTests::test_calculate_non_multiple_bounds tests/track/params_test.py::InvocationGeneratorTests::test_calculate_number_of_bulks tests/track/params_test.py::InvocationGeneratorTests::test_iterator_chaining_respects_context_manager tests/track/params_test.py::BulkIndexParamSourceTests::test_create_valid_param_source tests/track/params_test.py::BulkIndexParamSourceTests::test_create_with_conflict_probability_not_numeric tests/track/params_test.py::BulkIndexParamSourceTests::test_create_with_conflict_probability_too_high tests/track/params_test.py::BulkIndexParamSourceTests::test_create_with_conflict_probability_too_low tests/track/params_test.py::BulkIndexParamSourceTests::test_create_with_conflict_probability_zero tests/track/params_test.py::BulkIndexParamSourceTests::test_create_with_fraction_larger_batch_size tests/track/params_test.py::BulkIndexParamSourceTests::test_create_with_fraction_smaller_batch_size tests/track/params_test.py::BulkIndexParamSourceTests::test_create_with_ingest_percentage_not_numeric tests/track/params_test.py::BulkIndexParamSourceTests::test_create_with_ingest_percentage_too_high tests/track/params_test.py::BulkIndexParamSourceTests::test_create_with_ingest_percentage_too_low tests/track/params_test.py::BulkIndexParamSourceTests::test_create_with_metadata_in_source_file_but_conflicts tests/track/params_test.py::BulkIndexParamSourceTests::test_create_with_negative_bulk_size tests/track/params_test.py::BulkIndexParamSourceTests::test_create_with_non_numeric_bulk_size tests/track/params_test.py::BulkIndexParamSourceTests::test_create_with_unknown_id_conflicts tests/track/params_test.py::BulkIndexParamSourceTests::test_create_with_unknown_on_conflict_setting tests/track/params_test.py::BulkIndexParamSourceTests::test_create_without_params tests/track/params_test.py::BulkIndexParamSourceTests::test_filters_corpora tests/track/params_test.py::BulkIndexParamSourceTests::test_ingests_all_documents_by_default tests/track/params_test.py::BulkIndexParamSourceTests::test_passes_all_corpora_by_default tests/track/params_test.py::BulkIndexParamSourceTests::test_raises_exception_if_no_corpus_matches tests/track/params_test.py::BulkIndexParamSourceTests::test_restricts_number_of_bulks_if_required tests/track/params_test.py::BulkDataGeneratorTests::test_generate_bulks_from_multiple_corpora tests/track/params_test.py::BulkDataGeneratorTests::test_generate_two_bulks tests/track/params_test.py::BulkDataGeneratorTests::test_internal_params_take_precedence tests/track/params_test.py::ParamsRegistrationTests::test_can_register_class_as_param_source tests/track/params_test.py::ParamsRegistrationTests::test_can_register_function_as_param_source tests/track/params_test.py::ParamsRegistrationTests::test_can_register_legacy_class_as_param_source tests/track/params_test.py::ParamsRegistrationTests::test_can_register_legacy_function_as_param_source tests/track/params_test.py::CreateIndexParamSourceTests::test_create_index_from_track_with_settings tests/track/params_test.py::CreateIndexParamSourceTests::test_create_index_from_track_without_settings tests/track/params_test.py::CreateIndexParamSourceTests::test_create_index_inline_with_body tests/track/params_test.py::CreateIndexParamSourceTests::test_create_index_inline_without_body tests/track/params_test.py::CreateIndexParamSourceTests::test_filter_index tests/track/params_test.py::DeleteIndexParamSourceTests::test_delete_index_by_name tests/track/params_test.py::DeleteIndexParamSourceTests::test_delete_index_from_track tests/track/params_test.py::DeleteIndexParamSourceTests::test_delete_no_index tests/track/params_test.py::DeleteIndexParamSourceTests::test_filter_index_from_track tests/track/params_test.py::CreateIndexTemplateParamSourceTests::test_create_index_template_from_track tests/track/params_test.py::CreateIndexTemplateParamSourceTests::test_create_index_template_inline tests/track/params_test.py::DeleteIndexTemplateParamSourceTests::test_delete_index_template_by_name tests/track/params_test.py::DeleteIndexTemplateParamSourceTests::test_delete_index_template_by_name_and_matching_indices tests/track/params_test.py::DeleteIndexTemplateParamSourceTests::test_delete_index_template_by_name_and_matching_indices_missing_index_pattern tests/track/params_test.py::DeleteIndexTemplateParamSourceTests::test_delete_index_template_from_track tests/track/params_test.py::SearchParamSourceTests::test_passes_request_parameters tests/track/params_test.py::SearchParamSourceTests::test_replaces_body_params tests/track/params_test.py::SearchParamSourceTests::test_user_specified_overrides_defaults
esrally/track/params.py docs/command_line_reference.rst esrally/rally.py esrally/track/track.py docs/track.rst esrally/driver/runner.py esrally/track/loader.py
esrally/track/params.py docs/command_line_reference.rst esrally/rally.py esrally/track/track.py docs/track.rst esrally/driver/runner.py esrally/track/loader.py