redis-benchmarks-specification 0.1.272__py3-none-any.whl → 0.1.273__py3-none-any.whl
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.
Potentially problematic release.
This version of redis-benchmarks-specification might be problematic. Click here for more details.
- redis_benchmarks_specification/__cli__/stats.py +37 -6
- redis_benchmarks_specification/__common__/spec.py +64 -3
- redis_benchmarks_specification/__runner__/args.py +6 -0
- redis_benchmarks_specification/__runner__/runner.py +700 -94
- redis_benchmarks_specification/test-suites/defaults.yml +1 -0
- redis_benchmarks_specification/test-suites/generate.py +7 -1
- redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-string-set-update-del-ex-36000-pipeline-10.yml +32 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-150Mkeys-string-set-ex-20-pipeline-10.yml +30 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-set-intset-with-100-elements-19-digits-pipeline-10.yml +30 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-set-intset-with-100-elements-19-digits.yml +30 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-400_conns.yml +38 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-40_conns.yml +38 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-pipeline-10-2000_conns.yml +1 -1
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-pipeline-10-400_conns.yml +1 -1
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-pipeline-10-40_conns.yml +1 -1
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-400_conns.yml +38 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-pipeline-10-2000_conns.yml +1 -1
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-pipeline-10-400_conns.yml +1 -1
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-pipeline-10-5200_conns.yml +1 -1
- redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-50-50-with-512B-values-with-expiration-pipeline-10-400_conns.yml +1 -1
- redis_benchmarks_specification/test-suites/memtier_benchmark-50Mkeys-string-set-ex-10-with-precondition-pipeline-10.yml +34 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-50Mkeys-string-set-ex-10years-pipeline-10.yml +30 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-50Mkeys-string-set-ex-3-pipeline-10.yml +30 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-50Mkeys-string-set-ex-random-range-pipeline-10.yml +30 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-50Mkeys-string-set-update-del-ex-120-pipeline-10.yml +32 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-80Mkeys-string-set-ex-20-precodition-multiclient-pipeline-10.yml +34 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-100-subscribers.yml +35 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-1000-subscribers.yml +35 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-5000-subscribers.yml +35 -0
- redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-50K-subscribers-5k-conns.yml +35 -0
- {redis_benchmarks_specification-0.1.272.dist-info → redis_benchmarks_specification-0.1.273.dist-info}/METADATA +1 -1
- {redis_benchmarks_specification-0.1.272.dist-info → redis_benchmarks_specification-0.1.273.dist-info}/RECORD +35 -19
- redis_benchmarks_specification/setups/builders/gcc:10.5.0-amd64-debian-bullseye-redisearch.yml +0 -24
- {redis_benchmarks_specification-0.1.272.dist-info → redis_benchmarks_specification-0.1.273.dist-info}/LICENSE +0 -0
- {redis_benchmarks_specification-0.1.272.dist-info → redis_benchmarks_specification-0.1.273.dist-info}/WHEEL +0 -0
- {redis_benchmarks_specification-0.1.272.dist-info → redis_benchmarks_specification-0.1.273.dist-info}/entry_points.txt +0 -0
|
@@ -123,6 +123,25 @@ def generate_stats_cli_command_logic(args, project_name, project_version):
|
|
|
123
123
|
)
|
|
124
124
|
test_result = False
|
|
125
125
|
|
|
126
|
+
# Validate client configuration format
|
|
127
|
+
has_clientconfig = "clientconfig" in benchmark_config
|
|
128
|
+
has_clientconfigs = "clientconfigs" in benchmark_config
|
|
129
|
+
|
|
130
|
+
if has_clientconfig and has_clientconfigs:
|
|
131
|
+
logging.error(
|
|
132
|
+
"Test {} has both 'clientconfig' and 'clientconfigs'. Only one format is allowed.".format(
|
|
133
|
+
test_name
|
|
134
|
+
)
|
|
135
|
+
)
|
|
136
|
+
test_result = False
|
|
137
|
+
elif not has_clientconfig and not has_clientconfigs:
|
|
138
|
+
logging.error(
|
|
139
|
+
"Test {} is missing client configuration. Must have either 'clientconfig' or 'clientconfigs'.".format(
|
|
140
|
+
test_name
|
|
141
|
+
)
|
|
142
|
+
)
|
|
143
|
+
test_result = False
|
|
144
|
+
|
|
126
145
|
test_names.append(test_name)
|
|
127
146
|
group = ""
|
|
128
147
|
is_memtier = False
|
|
@@ -150,12 +169,24 @@ def generate_stats_cli_command_logic(args, project_name, project_version):
|
|
|
150
169
|
for tested_command in origin_tested_commands:
|
|
151
170
|
tested_commands.append(tested_command.lower())
|
|
152
171
|
if is_memtier:
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
172
|
+
# Handle both clientconfig and clientconfigs formats
|
|
173
|
+
if "clientconfigs" in benchmark_config:
|
|
174
|
+
# For multiple configs, use the first one for stats analysis
|
|
175
|
+
# TODO: Consider aggregating stats from all configs
|
|
176
|
+
arguments = benchmark_config["clientconfigs"][0]["arguments"]
|
|
177
|
+
arg_list = (
|
|
178
|
+
benchmark_config["clientconfigs"][0]["arguments"]
|
|
179
|
+
.replace('"', "")
|
|
180
|
+
.split()
|
|
181
|
+
)
|
|
182
|
+
else:
|
|
183
|
+
# Legacy single clientconfig format
|
|
184
|
+
arguments = benchmark_config["clientconfig"]["arguments"]
|
|
185
|
+
arg_list = (
|
|
186
|
+
benchmark_config["clientconfig"]["arguments"]
|
|
187
|
+
.replace('"', "")
|
|
188
|
+
.split()
|
|
189
|
+
)
|
|
159
190
|
|
|
160
191
|
data_size = get_arg_value(arg_list, "--data-size", data_size)
|
|
161
192
|
data_size = get_arg_value(arg_list, "-d", data_size)
|
|
@@ -54,9 +54,19 @@ def extract_redis_configuration_from_topology(topologies_map, topology_spec_name
|
|
|
54
54
|
|
|
55
55
|
|
|
56
56
|
def extract_client_cpu_limit(benchmark_config):
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
57
|
+
# Handle both clientconfig (single) and clientconfigs (multiple) formats
|
|
58
|
+
if "clientconfigs" in benchmark_config:
|
|
59
|
+
# For multiple configs, return the sum of all CPU limits
|
|
60
|
+
total_cpu_limit = 0
|
|
61
|
+
for client_config in benchmark_config["clientconfigs"]:
|
|
62
|
+
cpu_limit = client_config["resources"]["requests"]["cpus"]
|
|
63
|
+
total_cpu_limit += float(cpu_limit)
|
|
64
|
+
return math.ceil(total_cpu_limit)
|
|
65
|
+
else:
|
|
66
|
+
# Legacy single clientconfig format
|
|
67
|
+
db_cpu_limit = benchmark_config["clientconfig"]["resources"]["requests"]["cpus"]
|
|
68
|
+
ceil_db_cpu_limit = math.ceil(float(db_cpu_limit))
|
|
69
|
+
return ceil_db_cpu_limit
|
|
60
70
|
|
|
61
71
|
|
|
62
72
|
def extract_build_variant_variations(benchmark_config, keyname="build-variants"):
|
|
@@ -74,9 +84,60 @@ def extract_client_container_image(benchmark_config, keyname="clientconfig"):
|
|
|
74
84
|
return client_container_image
|
|
75
85
|
|
|
76
86
|
|
|
87
|
+
def extract_client_container_images(benchmark_config):
|
|
88
|
+
"""Extract container images for both single and multiple client configs"""
|
|
89
|
+
if "clientconfigs" in benchmark_config:
|
|
90
|
+
# Multiple client configs - return list of images
|
|
91
|
+
images = []
|
|
92
|
+
for client_config in benchmark_config["clientconfigs"]:
|
|
93
|
+
if "run_image" in client_config:
|
|
94
|
+
images.append(client_config["run_image"])
|
|
95
|
+
else:
|
|
96
|
+
images.append(None)
|
|
97
|
+
return images
|
|
98
|
+
elif "clientconfig" in benchmark_config:
|
|
99
|
+
# Single client config - return list with one image for consistency
|
|
100
|
+
if "run_image" in benchmark_config["clientconfig"]:
|
|
101
|
+
return [benchmark_config["clientconfig"]["run_image"]]
|
|
102
|
+
else:
|
|
103
|
+
return [None]
|
|
104
|
+
return []
|
|
105
|
+
|
|
106
|
+
|
|
77
107
|
def extract_client_tool(benchmark_config, keyname="clientconfig"):
|
|
78
108
|
client_tool = None
|
|
79
109
|
if keyname in benchmark_config:
|
|
80
110
|
if "tool" in benchmark_config[keyname]:
|
|
81
111
|
client_tool = benchmark_config[keyname]["tool"]
|
|
82
112
|
return client_tool
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
def extract_client_tools(benchmark_config):
|
|
116
|
+
"""Extract tools for both single and multiple client configs"""
|
|
117
|
+
if "clientconfigs" in benchmark_config:
|
|
118
|
+
# Multiple client configs - return list of tools
|
|
119
|
+
tools = []
|
|
120
|
+
for client_config in benchmark_config["clientconfigs"]:
|
|
121
|
+
if "tool" in client_config:
|
|
122
|
+
tools.append(client_config["tool"])
|
|
123
|
+
else:
|
|
124
|
+
tools.append(None)
|
|
125
|
+
return tools
|
|
126
|
+
elif "clientconfig" in benchmark_config:
|
|
127
|
+
# Single client config - return list with one tool for consistency
|
|
128
|
+
if "tool" in benchmark_config["clientconfig"]:
|
|
129
|
+
return [benchmark_config["clientconfig"]["tool"]]
|
|
130
|
+
else:
|
|
131
|
+
return [None]
|
|
132
|
+
return []
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def extract_client_configs(benchmark_config):
|
|
136
|
+
"""Extract client configurations as a list for both single and multiple formats"""
|
|
137
|
+
if "clientconfigs" in benchmark_config:
|
|
138
|
+
# Multiple client configs
|
|
139
|
+
return benchmark_config["clientconfigs"]
|
|
140
|
+
elif "clientconfig" in benchmark_config:
|
|
141
|
+
# Single client config - return as list for consistency
|
|
142
|
+
return [benchmark_config["clientconfig"]]
|
|
143
|
+
return []
|
|
@@ -208,6 +208,12 @@ def create_client_runner_args(project_name):
|
|
|
208
208
|
type=int,
|
|
209
209
|
help="override memtier number of runs for each benchmark. By default will run once each test",
|
|
210
210
|
)
|
|
211
|
+
parser.add_argument(
|
|
212
|
+
"--container-timeout-buffer",
|
|
213
|
+
default=60,
|
|
214
|
+
type=int,
|
|
215
|
+
help="Buffer time in seconds to add to test-time for container timeout. Default is 60 seconds.",
|
|
216
|
+
)
|
|
211
217
|
parser.add_argument(
|
|
212
218
|
"--cluster-mode",
|
|
213
219
|
default=False,
|