redisbench-admin 0.11.72__tar.gz → 0.11.74__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/PKG-INFO +1 -1
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/pyproject.toml +1 -1
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/common.py +45 -3
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_local/local_db.py +13 -3
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/remote_db.py +16 -4
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/remote_helpers.py +5 -4
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/standalone.py +11 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/utils/utils.py +126 -1
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/LICENSE +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/README.md +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/cli.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/commands/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/commands/commands.json.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/compare/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/compare/args.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/compare/compare.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/deploy/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/deploy/args.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/deploy/deploy.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/environments/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/environments/oss_cluster.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/environments/oss_standalone.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/args.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/common/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/common/common.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/export.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/google_benchmark/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/google_benchmark/google_benchmark_json_format.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/memtier_benchmark/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/memtier_benchmark/memtier_benchmark_json_format.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/pyperf/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/pyperf/pyperf_json_format.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/redis_benchmark/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/redis_benchmark/metrics_definition.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/redis_benchmark/redis_benchmark_csv_format.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/extract/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/extract/args.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/extract/extract.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/grafana_api/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/grafana_api/app.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/grafana_api/args.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/grafana_api/grafana_api.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/daemon.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/flamegraph.pl +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/perf.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/perf_daemon_caller.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/pprof.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/profilers.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/profilers_local.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/profilers_schema.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/stackcollapse-perf.pl +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/vtune.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/aibench_run_inference_redisai_vision/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/aibench_run_inference_redisai_vision/aibench_run_inference_redisai_vision.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/ann/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/ann/ann.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/args.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/asm.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/cluster.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/ftsb/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/ftsb/ftsb.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/git.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/grafana.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/memtier_benchmark/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/memtier_benchmark/memtier_benchmark.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/metrics.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/modules.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/redis_benchmark/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/redis_benchmark/redis_benchmark.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/redisgraph_benchmark_go/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/redisgraph_benchmark_go/redisgraph_benchmark_go.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/redistimeseries.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/run.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/s3.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/ssh.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/tsbs_run_queries_redistimeseries/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/tsbs_run_queries_redistimeseries/tsbs_run_queries_redistimeseries.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/ycsb/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/ycsb/ycsb.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_async/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_async/async_env.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_async/async_terraform.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_async/benchmark.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_async/log.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_async/render_files.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_async/run_async.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_local/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_local/args.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_local/local_client.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_local/local_helpers.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_local/run_local.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/args.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/consts.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/log.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/notifications.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/remote_client.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/remote_env.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/remote_failures.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/run_remote.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/terraform.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/utils/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/utils/benchmark_config.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/utils/local.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/utils/redisearch.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/utils/redisgraph_benchmark_go.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/utils/remote.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/utils/results.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/utils/ssh.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/watchdog/__init__.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/watchdog/args.py +0 -0
- {redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/watchdog/watchdog.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: redisbench-admin
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.74
|
|
4
4
|
Summary: Redis benchmark run helper. A wrapper around Redis and Redis Modules benchmark tools ( ftsb_redisearch, memtier_benchmark, redis-benchmark, aibench, etc... ).
|
|
5
5
|
License-File: LICENSE
|
|
6
6
|
Author: filipecosta90
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "redisbench-admin"
|
|
3
|
-
version = "0.11.
|
|
3
|
+
version = "0.11.74"
|
|
4
4
|
description = "Redis benchmark run helper. A wrapper around Redis and Redis Modules benchmark tools ( ftsb_redisearch, memtier_benchmark, redis-benchmark, aibench, etc... )."
|
|
5
5
|
authors = ["filipecosta90 <filipecosta.90@gmail.com>","Redis Performance Group <performance@redis.com>"]
|
|
6
6
|
readme = "README.md"
|
|
@@ -38,6 +38,7 @@ from redisbench_admin.run.ycsb.ycsb import (
|
|
|
38
38
|
prepare_ycsb_benchmark_command,
|
|
39
39
|
prepare_go_ycsb_benchmark_command,
|
|
40
40
|
)
|
|
41
|
+
from redisbench_admin.utils.utils import get_remote_input_file_from_url
|
|
41
42
|
from redisbench_admin.run_remote.args import OVERRIDE_MODULES
|
|
42
43
|
from redisbench_admin.run_remote.remote_helpers import (
|
|
43
44
|
extract_module_semver_from_info_modules_cmd,
|
|
@@ -66,6 +67,38 @@ PERFORMANCE_GH_TOKEN = os.getenv("PERFORMANCE_GH_TOKEN", None)
|
|
|
66
67
|
REDIS_BINARY = os.getenv("REDIS_BINARY", "redis-server")
|
|
67
68
|
|
|
68
69
|
|
|
70
|
+
def extract_input_file_url_from_parameters(entry, benchmark_tool):
|
|
71
|
+
"""
|
|
72
|
+
Extract the input file URL from the parameters entry.
|
|
73
|
+
Different tools use different parameter names:
|
|
74
|
+
- ftsb_*: uses "input" parameter
|
|
75
|
+
- tsbs_*, aibench_*: uses "file" parameter
|
|
76
|
+
|
|
77
|
+
Args:
|
|
78
|
+
entry: The benchmark config entry containing "parameters"
|
|
79
|
+
benchmark_tool: The benchmark tool name
|
|
80
|
+
|
|
81
|
+
Returns:
|
|
82
|
+
The file URL if found, None otherwise
|
|
83
|
+
"""
|
|
84
|
+
if "parameters" not in entry:
|
|
85
|
+
return None
|
|
86
|
+
|
|
87
|
+
# Determine which parameter name to look for based on the tool
|
|
88
|
+
if "ftsb_" in benchmark_tool:
|
|
89
|
+
param_name = "input"
|
|
90
|
+
elif "tsbs_" in benchmark_tool or "aibench_" in benchmark_tool:
|
|
91
|
+
param_name = "file"
|
|
92
|
+
else:
|
|
93
|
+
return None
|
|
94
|
+
|
|
95
|
+
for param in entry["parameters"]:
|
|
96
|
+
if param_name in param:
|
|
97
|
+
return param[param_name]
|
|
98
|
+
|
|
99
|
+
return None
|
|
100
|
+
|
|
101
|
+
|
|
69
102
|
def prepare_benchmark_parameters(
|
|
70
103
|
benchmark_config,
|
|
71
104
|
benchmark_tool,
|
|
@@ -88,6 +121,10 @@ def prepare_benchmark_parameters(
|
|
|
88
121
|
if type(benchmark_config[config_key]) == list:
|
|
89
122
|
for entry in benchmark_config[config_key]:
|
|
90
123
|
if "parameters" in entry:
|
|
124
|
+
# Extract input file URL from parameters
|
|
125
|
+
input_file_url = extract_input_file_url_from_parameters(
|
|
126
|
+
entry, benchmark_tool
|
|
127
|
+
)
|
|
91
128
|
command_arr, command_str = prepare_benchmark_parameters_specif_tooling(
|
|
92
129
|
benchmark_tool,
|
|
93
130
|
cluster_api_enabled,
|
|
@@ -104,10 +141,13 @@ def prepare_benchmark_parameters(
|
|
|
104
141
|
private_key,
|
|
105
142
|
client_ssh_port,
|
|
106
143
|
redis_password,
|
|
144
|
+
input_file_url,
|
|
107
145
|
)
|
|
108
146
|
# v0.4 spec
|
|
109
147
|
elif type(benchmark_config[config_key]) == dict:
|
|
110
148
|
entry = benchmark_config[config_key]
|
|
149
|
+
# Extract input file URL from parameters
|
|
150
|
+
input_file_url = extract_input_file_url_from_parameters(entry, benchmark_tool)
|
|
111
151
|
command_arr, command_str = prepare_benchmark_parameters_specif_tooling(
|
|
112
152
|
benchmark_tool,
|
|
113
153
|
cluster_api_enabled,
|
|
@@ -124,6 +164,7 @@ def prepare_benchmark_parameters(
|
|
|
124
164
|
private_key,
|
|
125
165
|
client_ssh_port,
|
|
126
166
|
redis_password,
|
|
167
|
+
input_file_url,
|
|
127
168
|
)
|
|
128
169
|
printed_command_str = command_str
|
|
129
170
|
printed_command_arr = command_arr
|
|
@@ -154,6 +195,7 @@ def prepare_benchmark_parameters_specif_tooling(
|
|
|
154
195
|
private_key,
|
|
155
196
|
client_ssh_port,
|
|
156
197
|
redis_password=None,
|
|
198
|
+
input_file_url=None,
|
|
157
199
|
):
|
|
158
200
|
if "redis-benchmark" in benchmark_tool:
|
|
159
201
|
command_arr, command_str = prepare_redis_benchmark_command(
|
|
@@ -207,7 +249,7 @@ def prepare_benchmark_parameters_specif_tooling(
|
|
|
207
249
|
input_data_file = None
|
|
208
250
|
if isremote is True:
|
|
209
251
|
benchmark_tool = "/tmp/{}".format(benchmark_tool)
|
|
210
|
-
input_data_file =
|
|
252
|
+
input_data_file = get_remote_input_file_from_url(input_file_url)
|
|
211
253
|
(
|
|
212
254
|
command_arr,
|
|
213
255
|
command_str,
|
|
@@ -260,7 +302,7 @@ def prepare_benchmark_parameters_specif_tooling(
|
|
|
260
302
|
input_data_file = None
|
|
261
303
|
if isremote is True:
|
|
262
304
|
benchmark_tool = "/tmp/{}".format(benchmark_tool)
|
|
263
|
-
input_data_file =
|
|
305
|
+
input_data_file = get_remote_input_file_from_url(input_file_url)
|
|
264
306
|
(
|
|
265
307
|
command_arr,
|
|
266
308
|
command_str,
|
|
@@ -280,7 +322,7 @@ def prepare_benchmark_parameters_specif_tooling(
|
|
|
280
322
|
input_data_file = None
|
|
281
323
|
if isremote is True:
|
|
282
324
|
benchmark_tool = "/tmp/{}".format(benchmark_tool)
|
|
283
|
-
input_data_file =
|
|
325
|
+
input_data_file = get_remote_input_file_from_url(input_file_url)
|
|
284
326
|
(
|
|
285
327
|
command_arr,
|
|
286
328
|
command_str,
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_local/local_db.py
RENAMED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
# All rights reserved.
|
|
5
5
|
#
|
|
6
6
|
import logging
|
|
7
|
+
import os
|
|
7
8
|
import tempfile
|
|
8
9
|
import datetime
|
|
9
10
|
|
|
@@ -32,6 +33,7 @@ from redisbench_admin.utils.local import (
|
|
|
32
33
|
check_dataset_local_requirements,
|
|
33
34
|
is_process_alive,
|
|
34
35
|
)
|
|
36
|
+
from redisbench_admin.utils.utils import setup_search_clusterset
|
|
35
37
|
|
|
36
38
|
|
|
37
39
|
def local_db_spin(
|
|
@@ -163,6 +165,9 @@ def local_db_spin(
|
|
|
163
165
|
r.client_setname("redisbench-admin-standalone")
|
|
164
166
|
redis_conns.append(r)
|
|
165
167
|
|
|
168
|
+
# Setup search CLUSTERSET if enabled (after all servers are started and cluster is set up)
|
|
169
|
+
setup_search_clusterset(redis_conns, args.host, args.port, args.password)
|
|
170
|
+
|
|
166
171
|
if dataset is None:
|
|
167
172
|
if flushall_on_every_test_start:
|
|
168
173
|
logging.info("Will flush all data at test start...")
|
|
@@ -213,8 +218,13 @@ def local_db_spin(
|
|
|
213
218
|
)
|
|
214
219
|
dbconfig_keyspacelen_check(benchmark_config, redis_conns, ignore_keyspace_errors)
|
|
215
220
|
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
221
|
+
if 'SEARCH_CLUSTERSET' in os.environ:
|
|
222
|
+
logging.info("SEARCH_CLUSTERSET is set. Running run_redis_pre_steps for each shard")
|
|
223
|
+
for conn in redis_conns:
|
|
224
|
+
artifact_version = run_redis_pre_steps(benchmark_config, conn, required_modules)
|
|
225
|
+
else:
|
|
226
|
+
artifact_version = run_redis_pre_steps(
|
|
227
|
+
benchmark_config, redis_conns[0], required_modules
|
|
228
|
+
)
|
|
219
229
|
|
|
220
230
|
return result, artifact_version, cluster_api_enabled, redis_conns, redis_processes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/remote_db.py
RENAMED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
#
|
|
6
6
|
import datetime
|
|
7
7
|
import logging
|
|
8
|
-
|
|
8
|
+
import os
|
|
9
9
|
import redis
|
|
10
10
|
|
|
11
11
|
from redisbench_admin.environments.oss_cluster import setup_redis_cluster_from_conns
|
|
@@ -37,6 +37,7 @@ from redisbench_admin.utils.remote import (
|
|
|
37
37
|
check_dataset_remote_requirements,
|
|
38
38
|
get_run_full_filename,
|
|
39
39
|
)
|
|
40
|
+
from redisbench_admin.utils.utils import setup_search_clusterset
|
|
40
41
|
|
|
41
42
|
|
|
42
43
|
def remote_tmpdir_prune(
|
|
@@ -277,6 +278,14 @@ def remote_db_spin(
|
|
|
277
278
|
)
|
|
278
279
|
server_plaintext_port = cluster_start_port
|
|
279
280
|
|
|
281
|
+
# Setup BigRedis CLUSTERSET if enabled (after all servers are started and cluster is set up)
|
|
282
|
+
setup_search_clusterset(
|
|
283
|
+
redis_conns,
|
|
284
|
+
server_private_ip,
|
|
285
|
+
cluster_start_port if cluster_enabled else server_plaintext_port,
|
|
286
|
+
redis_password,
|
|
287
|
+
)
|
|
288
|
+
|
|
280
289
|
topology_setup_end_time = datetime.datetime.now()
|
|
281
290
|
topology_setup_duration_seconds = (
|
|
282
291
|
topology_setup_end_time - topology_setup_start_time
|
|
@@ -406,9 +415,12 @@ def remote_db_spin(
|
|
|
406
415
|
ignore_keyspace_errors,
|
|
407
416
|
keyspace_check_timeout,
|
|
408
417
|
)
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
418
|
+
if 'SEARCH_CLUSTERSET' in os.environ:
|
|
419
|
+
logging.info("SEARCH_CLUSTERSET is set. Running run_redis_pre_steps for each shard")
|
|
420
|
+
for conn in redis_conns:
|
|
421
|
+
artifact_version = run_redis_pre_steps(benchmark_config, conn, required_modules)
|
|
422
|
+
else:
|
|
423
|
+
artifact_version = run_redis_pre_steps(benchmark_config, redis_conns[0], required_modules)
|
|
412
424
|
return (
|
|
413
425
|
artifact_version,
|
|
414
426
|
cluster_enabled,
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/remote_helpers.py
RENAMED
|
@@ -28,6 +28,7 @@ from redisbench_admin.utils.remote import (
|
|
|
28
28
|
extract_redisgraph_version_from_resultdict,
|
|
29
29
|
)
|
|
30
30
|
from redisbench_admin.utils.results import post_process_benchmark_results
|
|
31
|
+
from redisbench_admin.utils.utils import get_remote_input_file_from_url
|
|
31
32
|
|
|
32
33
|
|
|
33
34
|
def absoluteFilePaths(directory):
|
|
@@ -166,7 +167,7 @@ def remote_tool_pre_bench_step(
|
|
|
166
167
|
queries_file_link, remote_tool_link, tool_link
|
|
167
168
|
)
|
|
168
169
|
)
|
|
169
|
-
remote_input_file =
|
|
170
|
+
remote_input_file = get_remote_input_file_from_url(queries_file_link)
|
|
170
171
|
setup_remote_benchmark_tool_requirements_ftsb(
|
|
171
172
|
client_public_ip,
|
|
172
173
|
username,
|
|
@@ -191,7 +192,7 @@ def remote_tool_pre_bench_step(
|
|
|
191
192
|
"redisearch",
|
|
192
193
|
"go-ycsb",
|
|
193
194
|
)
|
|
194
|
-
remote_input_file =
|
|
195
|
+
remote_input_file = get_remote_input_file_from_url(queries_file_link)
|
|
195
196
|
setup_remote_benchmark_tool_requirements_tsbs(
|
|
196
197
|
client_public_ip,
|
|
197
198
|
username,
|
|
@@ -211,7 +212,7 @@ def remote_tool_pre_bench_step(
|
|
|
211
212
|
) = extract_remote_tool_extra_links(
|
|
212
213
|
benchmark_config, benchmark_tool, config_key, os_str, arch_str
|
|
213
214
|
)
|
|
214
|
-
remote_input_file =
|
|
215
|
+
remote_input_file = get_remote_input_file_from_url(queries_file_link)
|
|
215
216
|
setup_remote_benchmark_tool_requirements_tsbs(
|
|
216
217
|
client_public_ip,
|
|
217
218
|
username,
|
|
@@ -228,7 +229,7 @@ def remote_tool_pre_bench_step(
|
|
|
228
229
|
remote_tool_link,
|
|
229
230
|
tool_link,
|
|
230
231
|
) = extract_aibench_extra_links(benchmark_config, benchmark_tool)
|
|
231
|
-
remote_input_file =
|
|
232
|
+
remote_input_file = get_remote_input_file_from_url(queries_file_link)
|
|
232
233
|
setup_remote_benchmark_tool_requirements_tsbs(
|
|
233
234
|
client_public_ip,
|
|
234
235
|
username,
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/standalone.py
RENAMED
|
@@ -583,6 +583,17 @@ def generate_remote_standalone_redis_cmd(
|
|
|
583
583
|
)
|
|
584
584
|
if remote_module_files is not None:
|
|
585
585
|
initial_redis_cmd += " " + " ".join(command)
|
|
586
|
+
|
|
587
|
+
# Add BigRedis configuration if enabled via environment variable
|
|
588
|
+
if os.getenv("BIGREDIS_ENABLED") is not None:
|
|
589
|
+
bigredis_path = os.getenv("BIGREDIS_PATH", f"{temporary_dir}/redis.big")
|
|
590
|
+
bigredis_use_async = os.getenv("BIGREDIS_USE_ASYNC", "no")
|
|
591
|
+
logging.info(f"BigRedis enabled. Using bigredis-path: {bigredis_path}")
|
|
592
|
+
initial_redis_cmd += " --bigredis-enabled yes"
|
|
593
|
+
initial_redis_cmd += " --bigredis-driver speedb"
|
|
594
|
+
initial_redis_cmd += f" --bigredis-use-async {bigredis_use_async}"
|
|
595
|
+
initial_redis_cmd += f" --bigredis-path {bigredis_path}"
|
|
596
|
+
|
|
586
597
|
return full_logfile, initial_redis_cmd
|
|
587
598
|
|
|
588
599
|
|
|
@@ -11,10 +11,12 @@ import logging
|
|
|
11
11
|
import operator
|
|
12
12
|
import os
|
|
13
13
|
import os.path
|
|
14
|
+
import re
|
|
14
15
|
import tarfile
|
|
15
16
|
import time
|
|
16
17
|
from functools import reduce
|
|
17
|
-
from
|
|
18
|
+
from pathlib import PurePosixPath
|
|
19
|
+
from urllib.parse import quote_plus, urlparse, unquote
|
|
18
20
|
from zipfile import ZipFile
|
|
19
21
|
|
|
20
22
|
import boto3
|
|
@@ -135,6 +137,75 @@ def generate_common_server_args(
|
|
|
135
137
|
return command
|
|
136
138
|
|
|
137
139
|
|
|
140
|
+
def setup_search_clusterset(redis_conns, host="127.0.0.1", start_port=6379, password=None):
|
|
141
|
+
"""
|
|
142
|
+
Configure SEARCH.CLUSTERSET for Redis instances.
|
|
143
|
+
This is required when SEARCH_CLUSTERSET is set to configure the search module
|
|
144
|
+
to work with BigRedis. Supports both standalone (single conn) and cluster (multiple conns).
|
|
145
|
+
|
|
146
|
+
Args:
|
|
147
|
+
redis_conns: List of Redis connection objects (or single connection)
|
|
148
|
+
host: Redis host address (default: 127.0.0.1)
|
|
149
|
+
start_port: Starting port number (default: 6379)
|
|
150
|
+
password: Redis password (optional)
|
|
151
|
+
"""
|
|
152
|
+
if os.getenv("SEARCH_CLUSTERSET") is None:
|
|
153
|
+
return
|
|
154
|
+
|
|
155
|
+
# Handle single connection case
|
|
156
|
+
if not isinstance(redis_conns, list):
|
|
157
|
+
redis_conns = [redis_conns]
|
|
158
|
+
|
|
159
|
+
shard_count = len(redis_conns)
|
|
160
|
+
logging.info(f"Search Clusterset enabled - configuring SEARCH.CLUSTERSET for {shard_count} shard(s)")
|
|
161
|
+
|
|
162
|
+
# Calculate slots per shard
|
|
163
|
+
total_slots = 16384
|
|
164
|
+
slots_per_shard = total_slots // shard_count
|
|
165
|
+
|
|
166
|
+
for shard_id, conn in enumerate(redis_conns, start=1):
|
|
167
|
+
port = start_port + shard_id - 1
|
|
168
|
+
|
|
169
|
+
# Calculate slot range for this shard
|
|
170
|
+
slot_start = (shard_id - 1) * slots_per_shard
|
|
171
|
+
if shard_id == shard_count:
|
|
172
|
+
# Last shard gets remaining slots
|
|
173
|
+
slot_end = total_slots - 1
|
|
174
|
+
else:
|
|
175
|
+
slot_end = shard_id * slots_per_shard - 1
|
|
176
|
+
|
|
177
|
+
# Build the address string with optional password
|
|
178
|
+
if password:
|
|
179
|
+
addr = f"{password}@{host}:{port}"
|
|
180
|
+
else:
|
|
181
|
+
addr = f"{host}:{port}"
|
|
182
|
+
|
|
183
|
+
logging.info(
|
|
184
|
+
f"Sending SEARCH.CLUSTERSET to shard {shard_id}: "
|
|
185
|
+
f"slots {slot_start}-{slot_end}, addr {host}:{port}"
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
try:
|
|
189
|
+
conn.execute_command(
|
|
190
|
+
"SEARCH.CLUSTERSET",
|
|
191
|
+
"MYID",
|
|
192
|
+
str(shard_id),
|
|
193
|
+
"RANGES",
|
|
194
|
+
"1",
|
|
195
|
+
"SHARD",
|
|
196
|
+
str(shard_id),
|
|
197
|
+
"SLOTRANGE",
|
|
198
|
+
str(slot_start),
|
|
199
|
+
str(slot_end),
|
|
200
|
+
"ADDR",
|
|
201
|
+
addr,
|
|
202
|
+
"MASTER",
|
|
203
|
+
)
|
|
204
|
+
logging.info(f"SEARCH.CLUSTERSET command executed successfully for shard {shard_id}")
|
|
205
|
+
except Exception as e:
|
|
206
|
+
logging.warning(f"Failed to execute SEARCH.CLUSTERSET for shard {shard_id}: {e}")
|
|
207
|
+
|
|
208
|
+
|
|
138
209
|
def upload_artifacts_to_s3(
|
|
139
210
|
artifacts,
|
|
140
211
|
s3_bucket_name,
|
|
@@ -484,6 +555,60 @@ def make_dashboard_callback(
|
|
|
484
555
|
)
|
|
485
556
|
|
|
486
557
|
|
|
558
|
+
def get_remote_input_file_from_url(url):
|
|
559
|
+
"""
|
|
560
|
+
Generate a unique remote input file path based on the file name from the URL.
|
|
561
|
+
This ensures each input file has its own path and avoids reuse issues between benchmark runs.
|
|
562
|
+
|
|
563
|
+
Example:
|
|
564
|
+
url = "https://s3.amazonaws.com/.../AND_QUERY.CSV"
|
|
565
|
+
returns "/tmp/input-AND_QUERY.data"
|
|
566
|
+
|
|
567
|
+
Args:
|
|
568
|
+
url: The URL or path to the input file
|
|
569
|
+
|
|
570
|
+
Returns:
|
|
571
|
+
A unique remote file path like /tmp/input-{file_name}.data,
|
|
572
|
+
or "/tmp/input.data" as fallback if url is None or empty
|
|
573
|
+
"""
|
|
574
|
+
default_path = PurePosixPath("/tmp/input.data")
|
|
575
|
+
|
|
576
|
+
if url is None or url == "":
|
|
577
|
+
return str(default_path)
|
|
578
|
+
|
|
579
|
+
# Parse the URL to extract the path component
|
|
580
|
+
# This handles both http(s):// URLs and s3:// URIs
|
|
581
|
+
parsed = urlparse(url)
|
|
582
|
+
url_path = parsed.path if parsed.path else url
|
|
583
|
+
|
|
584
|
+
# Use PurePosixPath to extract the file name (works for both URLs and paths)
|
|
585
|
+
path = PurePosixPath(url_path)
|
|
586
|
+
file_name = path.name
|
|
587
|
+
|
|
588
|
+
# If no file name could be extracted, return default
|
|
589
|
+
if not file_name:
|
|
590
|
+
return str(default_path)
|
|
591
|
+
|
|
592
|
+
# Decode URL-encoded characters (e.g., %3A -> :)
|
|
593
|
+
file_name = unquote(file_name)
|
|
594
|
+
|
|
595
|
+
# Remove extension using pathlib's stem property
|
|
596
|
+
base_name = PurePosixPath(file_name).stem
|
|
597
|
+
|
|
598
|
+
# If stem is empty (e.g., hidden file like ".data"), use the full name
|
|
599
|
+
if not base_name:
|
|
600
|
+
base_name = file_name
|
|
601
|
+
|
|
602
|
+
# Sanitize the base name: replace characters that might cause issues in file paths
|
|
603
|
+
# Keep only alphanumeric, underscore, hyphen, and dot
|
|
604
|
+
base_name = re.sub(r"[^a-zA-Z0-9_\-.]", "_", base_name)
|
|
605
|
+
|
|
606
|
+
# Construct the final path using PurePosixPath for proper path joining
|
|
607
|
+
result_path = PurePosixPath("/tmp") / f"input-{base_name}.data"
|
|
608
|
+
|
|
609
|
+
return str(result_path)
|
|
610
|
+
|
|
611
|
+
|
|
487
612
|
EC2_REGION = os.getenv("AWS_DEFAULT_REGION", None)
|
|
488
613
|
EC2_SECRET_KEY = os.getenv("AWS_SECRET_ACCESS_KEY", None)
|
|
489
614
|
EC2_PRIVATE_PEM = os.getenv("EC2_PRIVATE_PEM", None)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/commands/commands.json.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/environments/__init__.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/environments/oss_cluster.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/common/__init__.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/common/common.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/export/pyperf/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/grafana_api/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/grafana_api/grafana_api.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/flamegraph.pl
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/profilers.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/profilers_local.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/profilers/profilers_schema.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run/redistimeseries.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_async/__init__.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_async/async_env.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_async/async_terraform.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_async/benchmark.py
RENAMED
|
File without changes
|
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_async/render_files.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_async/run_async.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_local/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_local/local_client.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_local/local_helpers.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_local/run_local.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/notifications.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/remote_client.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/remote_env.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/remote_failures.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/run_remote.py
RENAMED
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/run_remote/terraform.py
RENAMED
|
File without changes
|
|
File without changes
|
{redisbench_admin-0.11.72 → redisbench_admin-0.11.74}/redisbench_admin/utils/benchmark_config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|