redis-benchmarks-specification 0.1.281__py3-none-any.whl → 0.1.282__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.

@@ -79,7 +79,9 @@ def run_local_command_with_timeout(command_str, timeout_seconds, description="co
79
79
  tuple: (success, stdout, stderr)
80
80
  """
81
81
  try:
82
- logging.info(f"Running {description} with {timeout_seconds}s timeout: {command_str}")
82
+ logging.info(
83
+ f"Running {description} with {timeout_seconds}s timeout: {command_str}"
84
+ )
83
85
 
84
86
  # Use shell=True to support complex command strings with pipes, etc.
85
87
  process = subprocess.Popen(
@@ -87,7 +89,7 @@ def run_local_command_with_timeout(command_str, timeout_seconds, description="co
87
89
  shell=True,
88
90
  stdout=subprocess.PIPE,
89
91
  stderr=subprocess.PIPE,
90
- text=True
92
+ text=True,
91
93
  )
92
94
 
93
95
  try:
@@ -106,7 +108,9 @@ def run_local_command_with_timeout(command_str, timeout_seconds, description="co
106
108
  logging.error(f"{description} timed out after {timeout_seconds} seconds")
107
109
  process.kill()
108
110
  try:
109
- stdout, stderr = process.communicate(timeout=5) # Give 5 seconds to cleanup
111
+ stdout, stderr = process.communicate(
112
+ timeout=5
113
+ ) # Give 5 seconds to cleanup
110
114
  except subprocess.TimeoutExpired:
111
115
  stdout, stderr = "", "Process killed due to timeout"
112
116
  return False, stdout, f"Timeout after {timeout_seconds} seconds. {stderr}"
@@ -136,7 +140,9 @@ def calculate_process_timeout(command_str, buffer_timeout):
136
140
  if test_time_match:
137
141
  test_time = int(test_time_match.group(1))
138
142
  timeout = test_time + buffer_timeout
139
- logging.info(f"Set process timeout to {timeout}s (test-time: {test_time}s + {buffer_timeout}s buffer)")
143
+ logging.info(
144
+ f"Set process timeout to {timeout}s (test-time: {test_time}s + {buffer_timeout}s buffer)"
145
+ )
140
146
  return timeout
141
147
 
142
148
  logging.info(f"Using default process timeout: {default_timeout}s")
@@ -170,7 +176,9 @@ def parse_size(size):
170
176
  return int(number * units[unit])
171
177
 
172
178
 
173
- def extract_expected_benchmark_duration(benchmark_command_str, override_memtier_test_time):
179
+ def extract_expected_benchmark_duration(
180
+ benchmark_command_str, override_memtier_test_time
181
+ ):
174
182
  """
175
183
  Extract expected benchmark duration from command string or override.
176
184
 
@@ -242,7 +250,9 @@ def run_multiple_clients(
242
250
  if "memtier_benchmark" in client_tool:
243
251
  # Set benchmark path based on local install option
244
252
  if args.benchmark_local_install:
245
- full_benchmark_path = getattr(args, 'memtier_bin_path', 'memtier_benchmark')
253
+ full_benchmark_path = getattr(
254
+ args, "memtier_bin_path", "memtier_benchmark"
255
+ )
246
256
  else:
247
257
  full_benchmark_path = f"/usr/local/bin/{client_tool}"
248
258
 
@@ -334,7 +344,9 @@ def run_multiple_clients(
334
344
  # Calculate container timeout
335
345
  container_timeout = 300 # 5 minutes default
336
346
  # Use new timeout_buffer argument, fallback to container_timeout_buffer for backward compatibility
337
- buffer_timeout = getattr(args, 'timeout_buffer', getattr(args, 'container_timeout_buffer', 60))
347
+ buffer_timeout = getattr(
348
+ args, "timeout_buffer", getattr(args, "container_timeout_buffer", 60)
349
+ )
338
350
  if "test-time" in benchmark_command_str:
339
351
  # Try to extract test time and add buffer
340
352
  import re
@@ -520,17 +532,29 @@ def run_multiple_clients(
520
532
  )
521
533
  elif "vector-db-benchmark" in tool:
522
534
  # For vector-db-benchmark, look for summary JSON file
523
- summary_files = [f for f in os.listdir(temporary_dir_client) if f.endswith("-summary.json")]
535
+ summary_files = [
536
+ f
537
+ for f in os.listdir(temporary_dir_client)
538
+ if f.endswith("-summary.json")
539
+ ]
524
540
  if summary_files:
525
- summary_filepath = os.path.join(temporary_dir_client, summary_files[0])
541
+ summary_filepath = os.path.join(
542
+ temporary_dir_client, summary_files[0]
543
+ )
526
544
  try:
527
- with open(summary_filepath, 'r') as f:
545
+ with open(summary_filepath, "r") as f:
528
546
  vector_json = json.load(f)
529
- logging.info(f"Successfully read vector-db-benchmark JSON output from {summary_files[0]}")
547
+ logging.info(
548
+ f"Successfully read vector-db-benchmark JSON output from {summary_files[0]}"
549
+ )
530
550
  except Exception as e:
531
- logging.warning(f"Failed to read vector-db-benchmark JSON from {summary_files[0]}: {e}")
551
+ logging.warning(
552
+ f"Failed to read vector-db-benchmark JSON from {summary_files[0]}: {e}"
553
+ )
532
554
  else:
533
- logging.warning(f"No vector-db-benchmark summary JSON file found for client {client_index}")
555
+ logging.warning(
556
+ f"No vector-db-benchmark summary JSON file found for client {client_index}"
557
+ )
534
558
 
535
559
  logging.info(
536
560
  f"Successfully read JSON output from client {client_index} ({tool})"
@@ -554,25 +578,33 @@ def run_multiple_clients(
554
578
  aggregated_json.update(pubsub_json)
555
579
  aggregated_json.update(vector_json)
556
580
  aggregated_stdout = json.dumps(aggregated_json, indent=2)
557
- logging.info("Using merged JSON results from memtier, pubsub-sub-bench, and vector-db-benchmark clients")
581
+ logging.info(
582
+ "Using merged JSON results from memtier, pubsub-sub-bench, and vector-db-benchmark clients"
583
+ )
558
584
  elif memtier_json and pubsub_json:
559
585
  # Use memtier as base and add pubsub metrics
560
586
  aggregated_json = memtier_json.copy()
561
587
  aggregated_json.update(pubsub_json)
562
588
  aggregated_stdout = json.dumps(aggregated_json, indent=2)
563
- logging.info("Using merged JSON results from memtier and pubsub-sub-bench clients")
589
+ logging.info(
590
+ "Using merged JSON results from memtier and pubsub-sub-bench clients"
591
+ )
564
592
  elif memtier_json and vector_json:
565
593
  # Use memtier as base and add vector metrics
566
594
  aggregated_json = memtier_json.copy()
567
595
  aggregated_json.update(vector_json)
568
596
  aggregated_stdout = json.dumps(aggregated_json, indent=2)
569
- logging.info("Using merged JSON results from memtier and vector-db-benchmark clients")
597
+ logging.info(
598
+ "Using merged JSON results from memtier and vector-db-benchmark clients"
599
+ )
570
600
  elif pubsub_json and vector_json:
571
601
  # Use pubsub as base and add vector metrics
572
602
  aggregated_json = pubsub_json.copy()
573
603
  aggregated_json.update(vector_json)
574
604
  aggregated_stdout = json.dumps(aggregated_json, indent=2)
575
- logging.info("Using merged JSON results from pubsub-sub-bench and vector-db-benchmark clients")
605
+ logging.info(
606
+ "Using merged JSON results from pubsub-sub-bench and vector-db-benchmark clients"
607
+ )
576
608
  elif memtier_json:
577
609
  # Only memtier available
578
610
  aggregated_json = memtier_json
@@ -591,7 +623,9 @@ def run_multiple_clients(
591
623
  else:
592
624
  # Fall back to concatenated stdout
593
625
  aggregated_stdout = "\n".join([r["stdout"] for r in successful_results])
594
- logging.warning("No JSON results found, falling back to concatenated stdout")
626
+ logging.warning(
627
+ "No JSON results found, falling back to concatenated stdout"
628
+ )
595
629
 
596
630
  return aggregated_stdout, results
597
631
 
@@ -913,7 +947,9 @@ def prepare_vector_db_benchmark_parameters(
913
947
 
914
948
  # Add custom arguments if specified
915
949
  if "arguments" in clientconfig:
916
- benchmark_command_str = " ".join(benchmark_command) + " " + clientconfig["arguments"]
950
+ benchmark_command_str = (
951
+ " ".join(benchmark_command) + " " + clientconfig["arguments"]
952
+ )
917
953
  else:
918
954
  benchmark_command_str = " ".join(benchmark_command)
919
955
 
@@ -1156,8 +1192,8 @@ def process_self_contained_coordinator_stream(
1156
1192
 
1157
1193
  # Check if all tested commands are supported by this Redis instance
1158
1194
  supported_commands = get_supported_redis_commands(redis_conns)
1159
- commands_supported, unsupported_commands = check_test_command_support(
1160
- benchmark_config, supported_commands
1195
+ commands_supported, unsupported_commands = (
1196
+ check_test_command_support(benchmark_config, supported_commands)
1161
1197
  )
1162
1198
 
1163
1199
  if not commands_supported:
@@ -1328,7 +1364,11 @@ def process_self_contained_coordinator_stream(
1328
1364
  if "dbconfig" in benchmark_config:
1329
1365
  if "preload_tool" in benchmark_config["dbconfig"]:
1330
1366
  # Get timeout buffer for preload
1331
- buffer_timeout = getattr(args, 'timeout_buffer', getattr(args, 'container_timeout_buffer', 60))
1367
+ buffer_timeout = getattr(
1368
+ args,
1369
+ "timeout_buffer",
1370
+ getattr(args, "container_timeout_buffer", 60),
1371
+ )
1332
1372
 
1333
1373
  res = data_prepopulation_step(
1334
1374
  benchmark_config,
@@ -1397,8 +1437,13 @@ def process_self_contained_coordinator_stream(
1397
1437
  benchmark_tool = "redis-benchmark"
1398
1438
 
1399
1439
  # Set benchmark path based on local install option
1400
- if args.benchmark_local_install and "memtier_benchmark" in benchmark_tool:
1401
- full_benchmark_path = getattr(args, 'memtier_bin_path', 'memtier_benchmark')
1440
+ if (
1441
+ args.benchmark_local_install
1442
+ and "memtier_benchmark" in benchmark_tool
1443
+ ):
1444
+ full_benchmark_path = getattr(
1445
+ args, "memtier_bin_path", "memtier_benchmark"
1446
+ )
1402
1447
  else:
1403
1448
  full_benchmark_path = f"/usr/local/bin/{benchmark_tool}"
1404
1449
 
@@ -1564,7 +1609,7 @@ def process_self_contained_coordinator_stream(
1564
1609
  args.remote_profile_port,
1565
1610
  args.remote_profile_output_dir,
1566
1611
  args.remote_profile_username,
1567
- args.remote_profile_password
1612
+ args.remote_profile_password,
1568
1613
  )
1569
1614
 
1570
1615
  # Extract expected benchmark duration
@@ -1576,13 +1621,17 @@ def process_self_contained_coordinator_stream(
1576
1621
  profiling_started = remote_profiler.start_profiling(
1577
1622
  redis_conns[0] if redis_conns else None,
1578
1623
  test_name,
1579
- expected_duration
1624
+ expected_duration,
1580
1625
  )
1581
1626
 
1582
1627
  if profiling_started:
1583
- logging.info(f"Started remote profiling for test: {test_name}")
1628
+ logging.info(
1629
+ f"Started remote profiling for test: {test_name}"
1630
+ )
1584
1631
  else:
1585
- logging.warning(f"Failed to start remote profiling for test: {test_name}")
1632
+ logging.warning(
1633
+ f"Failed to start remote profiling for test: {test_name}"
1634
+ )
1586
1635
  remote_profiler = None
1587
1636
 
1588
1637
  except Exception as e:
@@ -1634,14 +1683,22 @@ def process_self_contained_coordinator_stream(
1634
1683
  )
1635
1684
 
1636
1685
  # Calculate timeout for local process
1637
- buffer_timeout = getattr(args, 'timeout_buffer', getattr(args, 'container_timeout_buffer', 60))
1638
- process_timeout = calculate_process_timeout(benchmark_command_str, buffer_timeout)
1686
+ buffer_timeout = getattr(
1687
+ args,
1688
+ "timeout_buffer",
1689
+ getattr(args, "container_timeout_buffer", 60),
1690
+ )
1691
+ process_timeout = calculate_process_timeout(
1692
+ benchmark_command_str, buffer_timeout
1693
+ )
1639
1694
 
1640
1695
  # Run with timeout
1641
- success, client_container_stdout, stderr = run_local_command_with_timeout(
1642
- benchmark_command_str,
1643
- process_timeout,
1644
- "memtier benchmark"
1696
+ success, client_container_stdout, stderr = (
1697
+ run_local_command_with_timeout(
1698
+ benchmark_command_str,
1699
+ process_timeout,
1700
+ "memtier benchmark",
1701
+ )
1645
1702
  )
1646
1703
 
1647
1704
  if not success:
@@ -1666,7 +1723,9 @@ def process_self_contained_coordinator_stream(
1666
1723
  # Set working directory based on tool
1667
1724
  working_dir = benchmark_tool_workdir
1668
1725
  if "vector-db-benchmark" in benchmark_tool:
1669
- working_dir = "/app" # vector-db-benchmark needs to run from /app
1726
+ working_dir = (
1727
+ "/app" # vector-db-benchmark needs to run from /app
1728
+ )
1670
1729
 
1671
1730
  # Prepare volumes
1672
1731
  volumes = {
@@ -1697,7 +1756,9 @@ def process_self_contained_coordinator_stream(
1697
1756
 
1698
1757
  # Only add user for non-vector-db-benchmark tools to avoid permission issues
1699
1758
  if "vector-db-benchmark" not in benchmark_tool:
1700
- container_kwargs["user"] = f"{os.getuid()}:{os.getgid()}"
1759
+ container_kwargs["user"] = (
1760
+ f"{os.getuid()}:{os.getgid()}"
1761
+ )
1701
1762
 
1702
1763
  # Add environment variables for vector-db-benchmark
1703
1764
  if "vector-db-benchmark" in benchmark_tool:
@@ -1761,13 +1822,19 @@ def process_self_contained_coordinator_stream(
1761
1822
  if remote_profiler is not None:
1762
1823
  try:
1763
1824
  logging.info("Waiting for remote profiling to complete...")
1764
- profiling_success = remote_profiler.wait_for_completion(timeout=60)
1825
+ profiling_success = remote_profiler.wait_for_completion(
1826
+ timeout=60
1827
+ )
1765
1828
  if profiling_success:
1766
1829
  logging.info("Remote profiling completed successfully")
1767
1830
  else:
1768
- logging.warning("Remote profiling did not complete successfully")
1831
+ logging.warning(
1832
+ "Remote profiling did not complete successfully"
1833
+ )
1769
1834
  except Exception as e:
1770
- logging.error(f"Error waiting for remote profiling completion: {e}")
1835
+ logging.error(
1836
+ f"Error waiting for remote profiling completion: {e}"
1837
+ )
1771
1838
 
1772
1839
  logging.info("Printing client tool stdout output")
1773
1840
  if client_container_stdout:
@@ -1835,21 +1902,36 @@ def process_self_contained_coordinator_stream(
1835
1902
  )
1836
1903
  elif "vector-db-benchmark" in benchmark_tool:
1837
1904
  # For vector-db-benchmark, look for summary JSON file
1838
- summary_files = [f for f in os.listdir(temporary_dir_client) if f.endswith("-summary.json")]
1905
+ summary_files = [
1906
+ f
1907
+ for f in os.listdir(temporary_dir_client)
1908
+ if f.endswith("-summary.json")
1909
+ ]
1839
1910
  if summary_files:
1840
- full_result_path = os.path.join(temporary_dir_client, summary_files[0])
1841
- logging.info(f"Found vector-db-benchmark summary file: {summary_files[0]}")
1911
+ full_result_path = os.path.join(
1912
+ temporary_dir_client, summary_files[0]
1913
+ )
1914
+ logging.info(
1915
+ f"Found vector-db-benchmark summary file: {summary_files[0]}"
1916
+ )
1842
1917
  else:
1843
- logging.warning("No vector-db-benchmark summary JSON file found")
1918
+ logging.warning(
1919
+ "No vector-db-benchmark summary JSON file found"
1920
+ )
1844
1921
  # Create empty results dict to avoid crash
1845
1922
  results_dict = {}
1846
1923
 
1847
1924
  logging.info(f"Reading results json from {full_result_path}")
1848
1925
 
1849
- if "vector-db-benchmark" in benchmark_tool and not os.path.exists(full_result_path):
1926
+ if (
1927
+ "vector-db-benchmark" in benchmark_tool
1928
+ and not os.path.exists(full_result_path)
1929
+ ):
1850
1930
  # Handle case where vector-db-benchmark didn't produce results
1851
1931
  results_dict = {}
1852
- logging.warning("Vector-db-benchmark did not produce results file")
1932
+ logging.warning(
1933
+ "Vector-db-benchmark did not produce results file"
1934
+ )
1853
1935
  else:
1854
1936
  with open(
1855
1937
  full_result_path,
@@ -1990,7 +2072,9 @@ def get_maxmemory(r):
1990
2072
 
1991
2073
  # Check if maxmemory key exists in Redis memory info
1992
2074
  if "maxmemory" not in memory_info:
1993
- logging.warning("maxmemory not present in Redis memory info. Cannot enforce memory checks.")
2075
+ logging.warning(
2076
+ "maxmemory not present in Redis memory info. Cannot enforce memory checks."
2077
+ )
1994
2078
  return 0
1995
2079
 
1996
2080
  maxmemory = int(memory_info["maxmemory"])
@@ -2085,10 +2169,12 @@ def print_results_table_stdout(
2085
2169
  # Use resolved metric name for precision_summary metrics, otherwise use original path
2086
2170
  def get_display_name(x):
2087
2171
  # For precision_summary metrics with wildcards, construct the resolved path
2088
- if (len(x) > 1 and
2089
- isinstance(x[0], str) and
2090
- "precision_summary" in x[0] and
2091
- "*" in x[0]):
2172
+ if (
2173
+ len(x) > 1
2174
+ and isinstance(x[0], str)
2175
+ and "precision_summary" in x[0]
2176
+ and "*" in x[0]
2177
+ ):
2092
2178
 
2093
2179
  # Look for the precision level in the cleaned metrics logs
2094
2180
  # We need to find the corresponding cleaned metric to get the precision level
@@ -2097,17 +2183,19 @@ def print_results_table_stdout(
2097
2183
 
2098
2184
  # Since we know from logs that the precision level is available,
2099
2185
  # let's reconstruct it from the metric context path (x[1]) if available
2100
- if len(x) > 1 and isinstance(x[1], str) and x[1].startswith("'") and x[1].endswith("'"):
2186
+ if (
2187
+ len(x) > 1
2188
+ and isinstance(x[1], str)
2189
+ and x[1].startswith("'")
2190
+ and x[1].endswith("'")
2191
+ ):
2101
2192
  precision_level = x[1] # This should be something like "'1.0000'"
2102
2193
  resolved_path = x[0].replace("*", precision_level)
2103
2194
  return resolved_path
2104
2195
 
2105
2196
  return x[0] # Use original path
2106
2197
 
2107
- results_matrix = [
2108
- [get_display_name(x), f"{x[3]:.3f}"]
2109
- for x in results_matrix
2110
- ]
2198
+ results_matrix = [[get_display_name(x), f"{x[3]:.3f}"] for x in results_matrix]
2111
2199
  writer = MarkdownTableWriter(
2112
2200
  table_name=table_name,
2113
2201
  headers=results_matrix_headers,
@@ -2123,16 +2211,28 @@ def print_redis_info_section(redis_conns):
2123
2211
  redis_info = redis_conns[0].info()
2124
2212
  server_name = "redis"
2125
2213
  if "server_name" in redis_info:
2126
- server_name = redis_info['server_name']
2214
+ server_name = redis_info["server_name"]
2127
2215
 
2128
2216
  print("\n# Redis Server Information")
2129
2217
  redis_info_data = [
2130
- [f"{server_name} version", redis_info.get(f"{server_name}_version", "unknown")],
2218
+ [
2219
+ f"{server_name} version",
2220
+ redis_info.get(f"{server_name}_version", "unknown"),
2221
+ ],
2131
2222
  ["redis version", redis_info.get("redis_version", "unknown")],
2132
2223
  ["io_threads_active", redis_info.get("io_threads_active", "unknown")],
2133
- [f"{server_name} Git SHA1", redis_info.get("redis_git_sha1", "unknown")],
2134
- [f"{server_name} Git Dirty", str(redis_info.get("redis_git_dirty", "unknown"))],
2135
- [f"{server_name} Build ID", redis_info.get("redis_build_id", "unknown")],
2224
+ [
2225
+ f"{server_name} Git SHA1",
2226
+ redis_info.get("redis_git_sha1", "unknown"),
2227
+ ],
2228
+ [
2229
+ f"{server_name} Git Dirty",
2230
+ str(redis_info.get("redis_git_dirty", "unknown")),
2231
+ ],
2232
+ [
2233
+ f"{server_name} Build ID",
2234
+ redis_info.get("redis_build_id", "unknown"),
2235
+ ],
2136
2236
  [f"{server_name} Mode", redis_info.get("redis_mode", "unknown")],
2137
2237
  ["OS", redis_info.get("os", "unknown")],
2138
2238
  ["Arch Bits", str(redis_info.get("arch_bits", "unknown"))],
@@ -2167,7 +2267,9 @@ def get_supported_redis_commands(redis_conns):
2167
2267
  try:
2168
2268
  # Execute COMMAND to get all supported commands
2169
2269
  commands_info = redis_conns[0].execute_command("COMMAND")
2170
- logging.info(f"COMMAND response type: {type(commands_info)}, length: {len(commands_info) if hasattr(commands_info, '__len__') else 'N/A'}")
2270
+ logging.info(
2271
+ f"COMMAND response type: {type(commands_info)}, length: {len(commands_info) if hasattr(commands_info, '__len__') else 'N/A'}"
2272
+ )
2171
2273
 
2172
2274
  # Extract command names
2173
2275
  supported_commands = set()
@@ -2176,7 +2278,7 @@ def get_supported_redis_commands(redis_conns):
2176
2278
  # COMMAND response is a dict with command names as keys
2177
2279
  for cmd_name in commands_info.keys():
2178
2280
  if isinstance(cmd_name, bytes):
2179
- cmd_name = cmd_name.decode('utf-8')
2281
+ cmd_name = cmd_name.decode("utf-8")
2180
2282
  supported_commands.add(str(cmd_name).upper())
2181
2283
  elif isinstance(commands_info, (list, tuple)):
2182
2284
  # Fallback for list format (first element of each command info array)
@@ -2184,10 +2286,12 @@ def get_supported_redis_commands(redis_conns):
2184
2286
  if isinstance(cmd_info, (list, tuple)) and len(cmd_info) > 0:
2185
2287
  cmd_name = cmd_info[0]
2186
2288
  if isinstance(cmd_name, bytes):
2187
- cmd_name = cmd_name.decode('utf-8')
2289
+ cmd_name = cmd_name.decode("utf-8")
2188
2290
  supported_commands.add(str(cmd_name).upper())
2189
2291
 
2190
- logging.info(f"Retrieved {len(supported_commands)} supported Redis commands")
2292
+ logging.info(
2293
+ f"Retrieved {len(supported_commands)} supported Redis commands"
2294
+ )
2191
2295
 
2192
2296
  # Log some sample commands for debugging
2193
2297
  if supported_commands:
@@ -2195,7 +2299,9 @@ def get_supported_redis_commands(redis_conns):
2195
2299
  logging.info(f"Sample commands: {sample_commands}")
2196
2300
 
2197
2301
  # Check specifically for vector commands
2198
- vector_commands = [cmd for cmd in supported_commands if cmd.startswith('V')]
2302
+ vector_commands = [
2303
+ cmd for cmd in supported_commands if cmd.startswith("V")
2304
+ ]
2199
2305
  if vector_commands:
2200
2306
  logging.info(f"Vector commands found: {sorted(vector_commands)}")
2201
2307
 
@@ -2255,13 +2361,20 @@ def prepare_overall_total_test_results(
2255
2361
  # Use the same display name logic as in the individual test results
2256
2362
  def get_overall_display_name(x):
2257
2363
  # For precision_summary metrics with wildcards, construct the resolved path
2258
- if (len(x) > 1 and
2259
- isinstance(x[0], str) and
2260
- "precision_summary" in x[0] and
2261
- "*" in x[0]):
2364
+ if (
2365
+ len(x) > 1
2366
+ and isinstance(x[0], str)
2367
+ and "precision_summary" in x[0]
2368
+ and "*" in x[0]
2369
+ ):
2262
2370
 
2263
2371
  # Reconstruct resolved path from metric context path (x[1]) if available
2264
- if len(x) > 1 and isinstance(x[1], str) and x[1].startswith("'") and x[1].endswith("'"):
2372
+ if (
2373
+ len(x) > 1
2374
+ and isinstance(x[1], str)
2375
+ and x[1].startswith("'")
2376
+ and x[1].endswith("'")
2377
+ ):
2265
2378
  precision_level = x[1] # This should be something like "'1.0000'"
2266
2379
  resolved_path = x[0].replace("*", precision_level)
2267
2380
  return resolved_path
@@ -2269,7 +2382,8 @@ def prepare_overall_total_test_results(
2269
2382
  return x[0] # Use original path
2270
2383
 
2271
2384
  current_test_results_matrix = [
2272
- [test_name, get_overall_display_name(x), f"{x[3]:.3f}"] for x in current_test_results_matrix
2385
+ [test_name, get_overall_display_name(x), f"{x[3]:.3f}"]
2386
+ for x in current_test_results_matrix
2273
2387
  ]
2274
2388
  overall_results_matrix.extend(current_test_results_matrix)
2275
2389
 
@@ -2317,7 +2431,7 @@ def data_prepopulation_step(
2317
2431
 
2318
2432
  # Set preload tool path based on local install option
2319
2433
  if benchmark_local_install and "memtier_benchmark" in preload_tool and args:
2320
- full_benchmark_path = getattr(args, 'memtier_bin_path', 'memtier_benchmark')
2434
+ full_benchmark_path = getattr(args, "memtier_bin_path", "memtier_benchmark")
2321
2435
  else:
2322
2436
  full_benchmark_path = f"/usr/local/bin/{preload_tool}"
2323
2437
  client_mnt_point = "/mnt/client/"
@@ -2364,13 +2478,13 @@ def data_prepopulation_step(
2364
2478
  )
2365
2479
 
2366
2480
  # Calculate timeout for preload process
2367
- process_timeout = calculate_process_timeout(preload_command_str, timeout_buffer)
2481
+ process_timeout = calculate_process_timeout(
2482
+ preload_command_str, timeout_buffer
2483
+ )
2368
2484
 
2369
2485
  # Run with timeout
2370
2486
  success, client_container_stdout, stderr = run_local_command_with_timeout(
2371
- preload_command_str,
2372
- process_timeout,
2373
- "memtier preload"
2487
+ preload_command_str, process_timeout, "memtier preload"
2374
2488
  )
2375
2489
 
2376
2490
  if not success:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: redis-benchmarks-specification
3
- Version: 0.1.281
3
+ Version: 0.1.282
4
4
  Summary: The Redis benchmarks specification describes the cross-language/tools requirements and expectations to foster performance and observability standards around redis related technologies. Members from both industry and academia, including organizations and individuals are encouraged to contribute.
5
5
  Author: filipecosta90
6
6
  Author-email: filipecosta.90@gmail.com
@@ -17,15 +17,15 @@ redis_benchmarks_specification/__common__/github.py,sha256=9TZtnISsSgXTSAN_VQejo
17
17
  redis_benchmarks_specification/__common__/package.py,sha256=4uVt1BAZ999LV2rZkq--Tk6otAVIf9YR3g3KGeUpiW4,834
18
18
  redis_benchmarks_specification/__common__/runner.py,sha256=2IpMl0IEHi2IZvfLc4_h0e-E3ZfnlB8EkCA_SE8VDCY,7033
19
19
  redis_benchmarks_specification/__common__/spec.py,sha256=D_SN48wg6NMthW_-OS1H5bydSDiuZpfd4WPPj7Vfwmc,5760
20
- redis_benchmarks_specification/__common__/timeseries.py,sha256=Jd8kGrLiuIs_1508F0MfiM4qlN_6gZWazG8arHxz9xA,52643
20
+ redis_benchmarks_specification/__common__/timeseries.py,sha256=dae3YF4cX2Css8i5VnOGxAk3DOu8tHfZt-Vy-uiWQDQ,52917
21
21
  redis_benchmarks_specification/__compare__/__init__.py,sha256=DtBXRp0Q01XgCFmY-1OIePMyyYihVNAjZ1Y8zwqSDN0,101
22
- redis_benchmarks_specification/__compare__/args.py,sha256=FlKD1wutBoKxeahpXw1gY2H_1FOPH5y-o5QsIPfFsT0,6802
23
- redis_benchmarks_specification/__compare__/compare.py,sha256=O6ZuB6Ln5xkTX5jRaizpj1PTPhmoETcf-_PY-A_CGr8,57179
22
+ redis_benchmarks_specification/__compare__/args.py,sha256=shER83ddBRBMAlbgxGXJ5H5XziKe-sP_Nyx7t5aLOo8,7650
23
+ redis_benchmarks_specification/__compare__/compare.py,sha256=8mtvlwQRYR4c4oOji2qP_fOgtOQCKBL3caHplgTEB2M,62214
24
24
  redis_benchmarks_specification/__init__.py,sha256=YQIEx2sLPPA0JR9OuCuMNMNtm-f_gqDKgzvNJnkGNKY,491
25
25
  redis_benchmarks_specification/__runner__/__init__.py,sha256=l-G1z-t6twUgi8QLueqoTQLvJmv3hJoEYskGm6H7L6M,83
26
- redis_benchmarks_specification/__runner__/args.py,sha256=PooAscPy7owoZvhrbZDGlJjGH-6s6xgdcVPvb73VnhI,9521
27
- redis_benchmarks_specification/__runner__/remote_profiling.py,sha256=4D5FKfqpkS50RE46iQGCKE-cB9BUho9OO9zqioF89Ns,11910
28
- redis_benchmarks_specification/__runner__/runner.py,sha256=K_YthEGoEX66b0kEAKvWLfjSXq86SJUGyOof33qqo64,99489
26
+ redis_benchmarks_specification/__runner__/args.py,sha256=4NaHTfT3FB0wGrYslWb_DKHGf9Za963TjXKk648cjqw,9679
27
+ redis_benchmarks_specification/__runner__/remote_profiling.py,sha256=oTcV_GbtduUE2jnodkLBmnyO53Kgralvi08peLKMXYk,12030
28
+ redis_benchmarks_specification/__runner__/runner.py,sha256=l0h2uCEtQkkzlP8fHlY4BwnBTm1ysu0u52OgiHOsLNo,102241
29
29
  redis_benchmarks_specification/__self_contained_coordinator__/__init__.py,sha256=l-G1z-t6twUgi8QLueqoTQLvJmv3hJoEYskGm6H7L6M,83
30
30
  redis_benchmarks_specification/__self_contained_coordinator__/args.py,sha256=uxBjdQ78klvsVi6lOfGYQVaWIxc8OI-DwYKY16SgvCY,5952
31
31
  redis_benchmarks_specification/__self_contained_coordinator__/artifacts.py,sha256=OVHqJzDgeSSRfUSiKp1ZTAVv14PvSbk-5yJsAAoUfpw,936
@@ -273,8 +273,8 @@ redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-publi
273
273
  redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-server-time-pipeline-10.yml,sha256=rJuWWXubUeRKQ2GSfHlbPMLeOyM9Eu_MzvN2vgKcAhA,672
274
274
  redis_benchmarks_specification/test-suites/template.txt,sha256=d_edIE7Sxa5X7I2yG-Io0bPdbDIHR0oWFoCA3XUt_EU,435
275
275
  redis_benchmarks_specification/vector-search-test-suites/vector_db_benchmark_test.yml,sha256=uhaSP6YUVmPvZU-qMtPPGdvNEUgUBqOfveUbeJ9WsbI,972
276
- redis_benchmarks_specification-0.1.281.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
277
- redis_benchmarks_specification-0.1.281.dist-info/METADATA,sha256=KON1FQ236D-9xT5JvEFaCo6o51ZHOQd63FV45BBTYHE,22726
278
- redis_benchmarks_specification-0.1.281.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
279
- redis_benchmarks_specification-0.1.281.dist-info/entry_points.txt,sha256=x5WBXCZsnDRTZxV7SBGmC65L2k-ygdDOxV8vuKN00Nk,715
280
- redis_benchmarks_specification-0.1.281.dist-info/RECORD,,
276
+ redis_benchmarks_specification-0.1.282.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
277
+ redis_benchmarks_specification-0.1.282.dist-info/METADATA,sha256=iPeWrG4jBoFKIZ3uGvr_lNUA4w6MgexW1sk8jCKhzjc,22726
278
+ redis_benchmarks_specification-0.1.282.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
279
+ redis_benchmarks_specification-0.1.282.dist-info/entry_points.txt,sha256=x5WBXCZsnDRTZxV7SBGmC65L2k-ygdDOxV8vuKN00Nk,715
280
+ redis_benchmarks_specification-0.1.282.dist-info/RECORD,,