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.

Files changed (36) hide show
  1. redis_benchmarks_specification/__cli__/stats.py +37 -6
  2. redis_benchmarks_specification/__common__/spec.py +64 -3
  3. redis_benchmarks_specification/__runner__/args.py +6 -0
  4. redis_benchmarks_specification/__runner__/runner.py +700 -94
  5. redis_benchmarks_specification/test-suites/defaults.yml +1 -0
  6. redis_benchmarks_specification/test-suites/generate.py +7 -1
  7. redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-string-set-update-del-ex-36000-pipeline-10.yml +32 -0
  8. redis_benchmarks_specification/test-suites/memtier_benchmark-150Mkeys-string-set-ex-20-pipeline-10.yml +30 -0
  9. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-set-intset-with-100-elements-19-digits-pipeline-10.yml +30 -0
  10. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-set-intset-with-100-elements-19-digits.yml +30 -0
  11. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-400_conns.yml +38 -0
  12. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-40_conns.yml +38 -0
  13. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-pipeline-10-2000_conns.yml +1 -1
  14. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-pipeline-10-400_conns.yml +1 -1
  15. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-pipeline-10-40_conns.yml +1 -1
  16. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-400_conns.yml +38 -0
  17. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-pipeline-10-2000_conns.yml +1 -1
  18. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-pipeline-10-400_conns.yml +1 -1
  19. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-pipeline-10-5200_conns.yml +1 -1
  20. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-50-50-with-512B-values-with-expiration-pipeline-10-400_conns.yml +1 -1
  21. redis_benchmarks_specification/test-suites/memtier_benchmark-50Mkeys-string-set-ex-10-with-precondition-pipeline-10.yml +34 -0
  22. redis_benchmarks_specification/test-suites/memtier_benchmark-50Mkeys-string-set-ex-10years-pipeline-10.yml +30 -0
  23. redis_benchmarks_specification/test-suites/memtier_benchmark-50Mkeys-string-set-ex-3-pipeline-10.yml +30 -0
  24. redis_benchmarks_specification/test-suites/memtier_benchmark-50Mkeys-string-set-ex-random-range-pipeline-10.yml +30 -0
  25. redis_benchmarks_specification/test-suites/memtier_benchmark-50Mkeys-string-set-update-del-ex-120-pipeline-10.yml +32 -0
  26. redis_benchmarks_specification/test-suites/memtier_benchmark-80Mkeys-string-set-ex-20-precodition-multiclient-pipeline-10.yml +34 -0
  27. redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-100-subscribers.yml +35 -0
  28. redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-1000-subscribers.yml +35 -0
  29. redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-5000-subscribers.yml +35 -0
  30. redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-50K-subscribers-5k-conns.yml +35 -0
  31. {redis_benchmarks_specification-0.1.272.dist-info → redis_benchmarks_specification-0.1.273.dist-info}/METADATA +1 -1
  32. {redis_benchmarks_specification-0.1.272.dist-info → redis_benchmarks_specification-0.1.273.dist-info}/RECORD +35 -19
  33. redis_benchmarks_specification/setups/builders/gcc:10.5.0-amd64-debian-bullseye-redisearch.yml +0 -24
  34. {redis_benchmarks_specification-0.1.272.dist-info → redis_benchmarks_specification-0.1.273.dist-info}/LICENSE +0 -0
  35. {redis_benchmarks_specification-0.1.272.dist-info → redis_benchmarks_specification-0.1.273.dist-info}/WHEEL +0 -0
  36. {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
- arguments = benchmark_config["clientconfig"]["arguments"]
154
- arg_list = (
155
- benchmark_config["clientconfig"]["arguments"]
156
- .replace('"', "")
157
- .split()
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
- db_cpu_limit = benchmark_config["clientconfig"]["resources"]["requests"]["cpus"]
58
- ceil_db_cpu_limit = math.ceil(float(db_cpu_limit))
59
- return ceil_db_cpu_limit
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,