redis-benchmarks-specification 0.1.72__py3-none-any.whl → 0.1.74__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 (49) hide show
  1. redis_benchmarks_specification/__builder__/builder.py +2 -0
  2. redis_benchmarks_specification/__cli__/args.py +6 -0
  3. redis_benchmarks_specification/__cli__/cli.py +5 -1
  4. redis_benchmarks_specification/__compare__/__init__.py +5 -0
  5. redis_benchmarks_specification/__compare__/args.py +135 -0
  6. redis_benchmarks_specification/__compare__/compare.py +1153 -0
  7. redis_benchmarks_specification/__runner__/runner.py +120 -59
  8. redis_benchmarks_specification/__self_contained_coordinator__/self_contained_coordinator.py +21 -10
  9. redis_benchmarks_specification/test-suites/create-re-string.py +286 -0
  10. redis_benchmarks_specification/test-suites/generate.py +108 -0
  11. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hincrby.yml +1 -1
  12. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-200KiB-values.yml +37 -0
  13. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-20KiB-values.yml +37 -0
  14. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-2MB-values.yml +37 -0
  15. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-200KiB.yml +33 -0
  16. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-20KiB.yml +33 -0
  17. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-2MB.yml +33 -0
  18. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-100-elements-zrangebyscore-all-elements-long-scores.yml +2 -2
  19. redis_benchmarks_specification/test-suites/string/memtier_benchmark-100Kkeys-load-string200c-with-20KiB-values-pipeline-10.yml +20 -0
  20. redis_benchmarks_specification/test-suites/string/memtier_benchmark-100Kkeys-load-string200c-with-20KiB-values.yml +20 -0
  21. redis_benchmarks_specification/test-suites/string/memtier_benchmark-100Kkeys-load-string50c-with-20KiB-values-pipeline-10.yml +20 -0
  22. redis_benchmarks_specification/test-suites/string/memtier_benchmark-100Kkeys-load-string50c-with-20KiB-values.yml +20 -0
  23. redis_benchmarks_specification/test-suites/string/memtier_benchmark-100Kkeys-string-setget200c-20KiB-pipeline-10.yml +26 -0
  24. redis_benchmarks_specification/test-suites/string/memtier_benchmark-100Kkeys-string-setget200c-20KiB.yml +26 -0
  25. redis_benchmarks_specification/test-suites/string/memtier_benchmark-100Kkeys-string-setget50c-20KiB-pipeline-10.yml +26 -0
  26. redis_benchmarks_specification/test-suites/string/memtier_benchmark-100Kkeys-string-setget50c-20KiB.yml +26 -0
  27. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-load-string200c-with-100B-values-pipeline-10.yml +20 -0
  28. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-load-string200c-with-100B-values.yml +20 -0
  29. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-load-string200c-with-1KiB-values-pipeline-10.yml +20 -0
  30. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-load-string200c-with-1KiB-values.yml +20 -0
  31. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-load-string50c-with-100B-values-pipeline-10.yml +20 -0
  32. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-load-string50c-with-100B-values.yml +20 -0
  33. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-load-string50c-with-1KiB-values-pipeline-10.yml +20 -0
  34. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-load-string50c-with-1KiB-values.yml +20 -0
  35. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-string-mget-1KiB.yml +27 -0
  36. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-string-setget200c-100B-pipeline-10.yml +26 -0
  37. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-string-setget200c-100B.yml +26 -0
  38. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-string-setget200c-1KiB-pipeline-10.yml +26 -0
  39. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-string-setget200c-1KiB.yml +26 -0
  40. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-string-setget50c-100B-pipeline-10.yml +26 -0
  41. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-string-setget50c-100B.yml +26 -0
  42. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-string-setget50c-1KiB-pipeline-10.yml +26 -0
  43. redis_benchmarks_specification/test-suites/string/memtier_benchmark-1Mkeys-string-setget50c-1KiB.yml +26 -0
  44. redis_benchmarks_specification/test-suites/template.txt +16 -0
  45. {redis_benchmarks_specification-0.1.72.dist-info → redis_benchmarks_specification-0.1.74.dist-info}/METADATA +2 -1
  46. {redis_benchmarks_specification-0.1.72.dist-info → redis_benchmarks_specification-0.1.74.dist-info}/RECORD +49 -12
  47. {redis_benchmarks_specification-0.1.72.dist-info → redis_benchmarks_specification-0.1.74.dist-info}/WHEEL +1 -1
  48. {redis_benchmarks_specification-0.1.72.dist-info → redis_benchmarks_specification-0.1.74.dist-info}/entry_points.txt +1 -0
  49. {redis_benchmarks_specification-0.1.72.dist-info → redis_benchmarks_specification-0.1.74.dist-info}/LICENSE +0 -0
@@ -358,7 +358,21 @@ def process_self_contained_coordinator_stream(
358
358
  preserve_temporary_client_dirs=False,
359
359
  resp_version=None,
360
360
  override_memtier_test_time=0,
361
+ used_memory_check_fail=False,
361
362
  ):
363
+ def delete_temporary_files(
364
+ temporary_dir_client, full_result_path, benchmark_tool_global
365
+ ):
366
+ if preserve_temporary_client_dirs is True:
367
+ logging.info(f"Preserving temporary client dir {temporary_dir_client}")
368
+ else:
369
+ if "redis-benchmark" in benchmark_tool_global:
370
+ if full_result_path is not None:
371
+ os.remove(full_result_path)
372
+ logging.info("Removing temporary JSON file")
373
+ shutil.rmtree(temporary_dir_client, ignore_errors=True)
374
+ logging.info(f"Removing temporary client dir {temporary_dir_client}")
375
+
362
376
  overall_result = True
363
377
  results_matrix = []
364
378
  total_test_suite_runs = 0
@@ -507,6 +521,11 @@ def process_self_contained_coordinator_stream(
507
521
  test_name, maxmemory, benchmark_required_memory
508
522
  )
509
523
  )
524
+ delete_temporary_files(
525
+ temporary_dir_client=temporary_dir_client,
526
+ full_result_path=None,
527
+ benchmark_tool_global=benchmark_tool_global,
528
+ )
510
529
  continue
511
530
 
512
531
  reset_commandstats(redis_conns)
@@ -543,6 +562,11 @@ def process_self_contained_coordinator_stream(
543
562
  test_name, priority_upper_limit, priority
544
563
  )
545
564
  )
565
+ delete_temporary_files(
566
+ temporary_dir_client=temporary_dir_client,
567
+ full_result_path=None,
568
+ benchmark_tool_global=benchmark_tool_global,
569
+ )
546
570
  continue
547
571
  if priority < priority_lower_limit:
548
572
  logging.warning(
@@ -550,6 +574,11 @@ def process_self_contained_coordinator_stream(
550
574
  test_name, priority_lower_limit, priority
551
575
  )
552
576
  )
577
+ delete_temporary_files(
578
+ temporary_dir_client=temporary_dir_client,
579
+ full_result_path=None,
580
+ benchmark_tool_global=benchmark_tool_global,
581
+ )
553
582
  continue
554
583
  logging.info(
555
584
  "Test {} priority ({}) is within the priority limit [{},{}]".format(
@@ -559,46 +588,61 @@ def process_self_contained_coordinator_stream(
559
588
  priority_upper_limit,
560
589
  )
561
590
  )
562
-
563
- if "dataset" in benchmark_config["dbconfig"]:
564
- if args.run_tests_with_dataset is False:
565
- logging.warning(
566
- "Skipping test {} giving it implies dataset preload".format(
567
- test_name
591
+ if "dbconfig" in benchmark_config:
592
+ if "dataset" in benchmark_config["dbconfig"]:
593
+ if args.run_tests_with_dataset is False:
594
+ logging.warning(
595
+ "Skipping test {} giving it implies dataset preload".format(
596
+ test_name
597
+ )
568
598
  )
569
- )
570
- continue
599
+ delete_temporary_files(
600
+ temporary_dir_client=temporary_dir_client,
601
+ full_result_path=None,
602
+ benchmark_tool_global=benchmark_tool_global,
603
+ )
604
+ continue
571
605
 
572
606
  if dry_run is True:
573
607
  dry_run_count = dry_run_count + 1
574
- continue
575
-
576
- if "preload_tool" in benchmark_config["dbconfig"]:
577
- res = data_prepopulation_step(
578
- benchmark_config,
579
- benchmark_tool_workdir,
580
- client_cpuset_cpus,
581
- docker_client,
582
- git_hash,
583
- port,
584
- temporary_dir_client,
585
- test_name,
586
- host,
587
- tls_enabled,
588
- tls_skip_verify,
589
- test_tls_cert,
590
- test_tls_key,
591
- test_tls_cacert,
592
- resp_version,
593
- args.benchmark_local_install,
594
- password,
595
- oss_cluster_api_enabled,
608
+ delete_temporary_files(
609
+ temporary_dir_client=temporary_dir_client,
610
+ full_result_path=None,
611
+ benchmark_tool_global=benchmark_tool_global,
596
612
  )
597
- if res is False:
598
- logging.warning(
599
- "Skipping this test given preload result was false"
613
+ continue
614
+ if "dbconfig" in benchmark_config:
615
+ if "preload_tool" in benchmark_config["dbconfig"]:
616
+ res = data_prepopulation_step(
617
+ benchmark_config,
618
+ benchmark_tool_workdir,
619
+ client_cpuset_cpus,
620
+ docker_client,
621
+ git_hash,
622
+ port,
623
+ temporary_dir_client,
624
+ test_name,
625
+ host,
626
+ tls_enabled,
627
+ tls_skip_verify,
628
+ test_tls_cert,
629
+ test_tls_key,
630
+ test_tls_cacert,
631
+ resp_version,
632
+ args.benchmark_local_install,
633
+ password,
634
+ oss_cluster_api_enabled,
600
635
  )
601
- continue
636
+ if res is False:
637
+ logging.warning(
638
+ "Skipping this test given preload result was false"
639
+ )
640
+ delete_temporary_files(
641
+ temporary_dir_client=temporary_dir_client,
642
+ full_result_path=None,
643
+ benchmark_tool_global=benchmark_tool_global,
644
+ )
645
+ continue
602
646
  execute_init_commands(
603
647
  benchmark_config, r, dbconfig_keyname="dbconfig"
604
648
  )
@@ -608,6 +652,7 @@ def process_self_contained_coordinator_stream(
608
652
  benchmark_required_memory,
609
653
  redis_conns,
610
654
  "start of benchmark",
655
+ used_memory_check_fail,
611
656
  )
612
657
 
613
658
  logging.info("Checking if there is a keyspace check being enforced")
@@ -618,6 +663,11 @@ def process_self_contained_coordinator_stream(
618
663
 
619
664
  if dry_run_include_preload is True:
620
665
  dry_run_count = dry_run_count + 1
666
+ delete_temporary_files(
667
+ temporary_dir_client=temporary_dir_client,
668
+ full_result_path=None,
669
+ benchmark_tool_global=benchmark_tool_global,
670
+ )
621
671
  continue
622
672
 
623
673
  benchmark_tool = extract_client_tool(benchmark_config)
@@ -692,6 +742,11 @@ def process_self_contained_coordinator_stream(
692
742
  logging.warning(
693
743
  "Forcing skip this test given there is an arbitrary commmand and memtier usage. Check https://github.com/RedisLabs/memtier_benchmark/pull/117 ."
694
744
  )
745
+ delete_temporary_files(
746
+ temporary_dir_client=temporary_dir_client,
747
+ full_result_path=None,
748
+ benchmark_tool_global=benchmark_tool_global,
749
+ )
695
750
  continue
696
751
 
697
752
  client_container_image = extract_client_container_image(
@@ -789,6 +844,7 @@ def process_self_contained_coordinator_stream(
789
844
  benchmark_required_memory,
790
845
  redis_conns,
791
846
  "end of benchmark",
847
+ used_memory_check_fail,
792
848
  )
793
849
 
794
850
  if args.flushall_on_every_test_end:
@@ -899,18 +955,11 @@ def process_self_contained_coordinator_stream(
899
955
  shutil.copy(full_result_path, dest_fpath)
900
956
  overall_result &= test_result
901
957
 
902
- if preserve_temporary_client_dirs is True:
903
- logging.info(
904
- f"Preserving temporary client dir {temporary_dir_client}"
905
- )
906
- else:
907
- if "redis-benchmark" in benchmark_tool_global:
908
- os.remove(full_result_path)
909
- logging.info("Removing temporary JSON file")
910
- shutil.rmtree(temporary_dir_client, ignore_errors=True)
911
- logging.info(
912
- f"Removing temporary client dir {temporary_dir_client}"
913
- )
958
+ delete_temporary_files(
959
+ temporary_dir_client=temporary_dir_client,
960
+ full_result_path=full_result_path,
961
+ benchmark_tool_global=benchmark_tool_global,
962
+ )
914
963
 
915
964
  table_name = "Results for entire test-suite"
916
965
  results_matrix_headers = [
@@ -957,22 +1006,33 @@ def get_maxmemory(r):
957
1006
 
958
1007
  def get_benchmark_required_memory(benchmark_config):
959
1008
  benchmark_required_memory = 0
960
- if "resources" in benchmark_config["dbconfig"]:
961
- resources = benchmark_config["dbconfig"]["resources"]
962
- if "requests" in resources:
963
- resources_requests = benchmark_config["dbconfig"]["resources"]["requests"]
964
- if "memory" in resources_requests:
965
- benchmark_required_memory = resources_requests["memory"]
966
- benchmark_required_memory = int(parse_size(benchmark_required_memory))
967
- logging.info(
968
- "Benchmark required memory: {} Bytes".format(
969
- benchmark_required_memory
1009
+ if "dbconfig" in benchmark_config:
1010
+ if "resources" in benchmark_config["dbconfig"]:
1011
+ resources = benchmark_config["dbconfig"]["resources"]
1012
+ if "requests" in resources:
1013
+ resources_requests = benchmark_config["dbconfig"]["resources"][
1014
+ "requests"
1015
+ ]
1016
+ if "memory" in resources_requests:
1017
+ benchmark_required_memory = resources_requests["memory"]
1018
+ benchmark_required_memory = int(
1019
+ parse_size(benchmark_required_memory)
1020
+ )
1021
+ logging.info(
1022
+ "Benchmark required memory: {} Bytes".format(
1023
+ benchmark_required_memory
1024
+ )
970
1025
  )
971
- )
972
1026
  return benchmark_required_memory
973
1027
 
974
1028
 
975
- def used_memory_check(test_name, benchmark_required_memory, redis_conns, stage):
1029
+ def used_memory_check(
1030
+ test_name,
1031
+ benchmark_required_memory,
1032
+ redis_conns,
1033
+ stage,
1034
+ used_memory_check_fail=False,
1035
+ ):
976
1036
  used_memory = 0
977
1037
  for conn in redis_conns:
978
1038
  used_memory = used_memory + conn.info("memory")["used_memory"]
@@ -984,7 +1044,8 @@ def used_memory_check(test_name, benchmark_required_memory, redis_conns, stage):
984
1044
  test_name, benchmark_required_memory, used_memory_gb
985
1045
  )
986
1046
  )
987
- exit(1)
1047
+ if used_memory_check_fail:
1048
+ exit(1)
988
1049
 
989
1050
 
990
1051
  def cp_to_workdir(benchmark_tool_workdir, srcfile):
@@ -433,7 +433,26 @@ def process_self_contained_coordinator_stream(
433
433
  run_arch,
434
434
  ) = extract_build_info_from_streamdata(testDetails)
435
435
 
436
- if run_arch == arch:
436
+ skip_test = False
437
+ if b"platform" in testDetails:
438
+ platform = testDetails[b"platform"]
439
+ if running_platform != platform:
440
+ skip_test = True
441
+ logging.info(
442
+ "skipping stream_id {} given plaform {}!={}".format(
443
+ stream_id, running_platform, platform
444
+ )
445
+ )
446
+
447
+ if run_arch != arch:
448
+ skip_test = True
449
+ logging.info(
450
+ "skipping stream_id {} given arch {}!={}".format(
451
+ stream_id, run_arch, arch
452
+ )
453
+ )
454
+
455
+ if skip_test is False:
437
456
  overall_result = True
438
457
  profiler_dashboard_links = []
439
458
  if docker_air_gap:
@@ -912,9 +931,7 @@ def process_self_contained_coordinator_stream(
912
931
  logging.critical("Printing redis container log....")
913
932
  print("-" * 60)
914
933
  print(
915
- redis_container.logs(
916
- stdout=True, stderr=True, logs=True
917
- )
934
+ redis_container.logs(stdout=True, stderr=True)
918
935
  )
919
936
  print("-" * 60)
920
937
  test_result = False
@@ -953,12 +970,6 @@ def process_self_contained_coordinator_stream(
953
970
 
954
971
  overall_result &= test_result
955
972
 
956
- else:
957
- logging.info(
958
- "skipping stream_id {} given arch {}!={}".format(
959
- stream_id, run_arch, arch
960
- )
961
- )
962
973
  else:
963
974
  logging.error("Missing commit information within received message.")
964
975
  except:
@@ -0,0 +1,286 @@
1
+ tests = [
2
+ {
3
+ "name": "memtier_benchmark-100Kkeys-string-setget50c-20KiB",
4
+ "precommand": "--data-size 20000 --ratio 1:0 --key-pattern P:P -c 25 -t 2 --hide-histogram --key-minimum=1 --key-maximum=100000 -n allkeys",
5
+ "check": {"keyspacelen": 100000},
6
+ "command": "--data-size 20000 --ratio 1:10 --key-pattern R:R -c 25 -t 2 --hide-histogram --key-minimum=1 --key-maximum=100000 --test-time 180",
7
+ "kpis": {},
8
+ "tested-commands": ["setget-20k"],
9
+ "tested-groups": ["string"],
10
+ },
11
+ {
12
+ "name": "memtier_benchmark-100Kkeys-string-setget50c-20KiB-pipeline-10",
13
+ "precommand": "--data-size 20000 --ratio 1:0 --key-pattern P:P -c 25 -t 2 --hide-histogram --key-minimum=1 --key-maximum=100000 -n allkeys",
14
+ "check": {"keyspacelen": 100000},
15
+ "command": "--pipeline 10 --data-size 20000 --ratio 1:10 --key-pattern R:R -c 25 -t 2 --key-minimum=1 --key-maximum=100000 --hide-histogram --test-time 180",
16
+ "kpis": {},
17
+ "tested-commands": ["setget-20k"],
18
+ "tested-groups": ["string"],
19
+ },
20
+ {
21
+ "name": "memtier_benchmark-100Kkeys-string-setget200c-20KiB",
22
+ "precommand": "--data-size 20000 --ratio 1:0 --key-pattern P:P -c 50 -t 4 --hide-histogram --key-minimum=1 --key-maximum=100000 -n allkeys",
23
+ "check": {"keyspacelen": 100000},
24
+ "command": "--data-size 20000 --ratio 1:10 --key-pattern R:R -c 50 -t 4 --hide-histogram --key-minimum=1 --key-maximum=100000 --test-time 180",
25
+ "kpis": {},
26
+ "tested-commands": ["setget-20k"],
27
+ "tested-groups": ["string"],
28
+ },
29
+ {
30
+ "name": "memtier_benchmark-100Kkeys-string-setget200c-20KiB-pipeline-10",
31
+ "precommand": "--data-size 20000 --ratio 1:0 --key-pattern P:P -c 50 -t 4 --hide-histogram --key-minimum=1 --key-maximum=100000 -n allkeys",
32
+ "check": {"keyspacelen": 100000},
33
+ "command": "--pipeline 10 --data-size 20000 --ratio 1:10 --key-pattern R:R -c 50 -t 4 --key-minimum=1 --key-maximum=100000 --hide-histogram --test-time 180",
34
+ "kpis": {},
35
+ "tested-commands": ["setget-20k"],
36
+ "tested-groups": ["string"],
37
+ },
38
+ {
39
+ "name": "memtier_benchmark-100Kkeys-load-string50c-with-20KiB-values",
40
+ "precommand": "",
41
+ "check": {"keyspacelen": 0},
42
+ "command": "--data-size 20000 --ratio 1:0 --key-pattern P:P --key-minimum=1 --key-maximum=100000 --test-time 180 -c 25 -t 2 --hide-histogram",
43
+ "kpis": {},
44
+ "tested-commands": ["set-20k"],
45
+ "tested-groups": ["string"],
46
+ },
47
+ {
48
+ "name": "memtier_benchmark-100Kkeys-load-string50c-with-20KiB-values-pipeline-10",
49
+ "precommand": "",
50
+ "check": {"keyspacelen": 0},
51
+ "command": "--pipeline 10 --data-size 20000 --ratio 1:0 --key-pattern P:P --key-minimum=1 --key-maximum=100000 --test-time 180 -c 25 -t 2 --hide-histogram",
52
+ "kpis": {},
53
+ "tested-commands": ["set-20k"],
54
+ "tested-groups": ["string"],
55
+ },
56
+ {
57
+ "name": "memtier_benchmark-100Kkeys-load-string200c-with-20KiB-values",
58
+ "precommand": "",
59
+ "check": {"keyspacelen": 0},
60
+ "command": "--data-size 20000 --ratio 1:0 --key-pattern P:P --key-minimum=1 --key-maximum=100000 --test-time 180 -c 50 -t 4 --hide-histogram",
61
+ "kpis": {},
62
+ "tested-commands": ["set-20k"],
63
+ "tested-groups": ["string"],
64
+ },
65
+ {
66
+ "name": "memtier_benchmark-100Kkeys-load-string200c-with-20KiB-values-pipeline-10",
67
+ "precommand": "",
68
+ "check": {"keyspacelen": 0},
69
+ "command": "--pipeline 10 --data-size 20000 --ratio 1:0 --key-pattern P:P --key-minimum=1 --key-maximum=100000 --test-time 180 -c 50 -t 4 --hide-histogram",
70
+ "kpis": {},
71
+ "tested-commands": ["set-20k"],
72
+ "tested-groups": ["string"],
73
+ },
74
+ {
75
+ "name": "memtier_benchmark-1Mkeys-string-setget50c-100B",
76
+ "precommand": "--data-size 100 --ratio 1:0 --key-pattern P:P -c 25 -t 2 --hide-histogram --key-minimum=1 --key-maximum=1000000 -n allkeys",
77
+ "check": {"keyspacelen": 1000000},
78
+ "command": "--data-size 100 --ratio 1:10 --key-pattern R:R -c 25 -t 2 --hide-histogram --test-time 180",
79
+ "kpis": {},
80
+ "tested-commands": ["setget"],
81
+ "tested-groups": ["string"],
82
+ },
83
+ {
84
+ "name": "memtier_benchmark-1Mkeys-string-setget50c-1KiB",
85
+ "precommand": "--data-size 1000 --ratio 1:0 --key-pattern P:P -c 25 -t 2 --hide-histogram --key-minimum=1 --key-maximum=1000000 -n allkeys",
86
+ "check": {"keyspacelen": 1000000},
87
+ "command": "--data-size 1000 --ratio 1:10 --key-pattern R:R -c 25 -t 2 --hide-histogram --test-time 180",
88
+ "kpis": {},
89
+ "tested-commands": ["setget"],
90
+ "tested-groups": ["string"],
91
+ },
92
+ {
93
+ "name": "memtier_benchmark-1Mkeys-string-setget50c-100B-pipeline-10",
94
+ "precommand": "--data-size 100 --ratio 1:0 --key-pattern P:P -c 25 -t 2 --hide-histogram --key-minimum=1 --key-maximum=1000000 -n allkeys",
95
+ "check": {"keyspacelen": 1000000},
96
+ "command": "--pipeline 10 --data-size 100 --ratio 1:10 --key-pattern R:R -c 25 -t 2 --hide-histogram --test-time 180",
97
+ "kpis": {},
98
+ "tested-commands": ["setget"],
99
+ "tested-groups": ["string"],
100
+ },
101
+ {
102
+ "name": "memtier_benchmark-1Mkeys-string-setget50c-1KiB-pipeline-10",
103
+ "precommand": "--data-size 1000 --ratio 1:0 --key-pattern P:P -c 25 -t 2 --hide-histogram --key-minimum=1 --key-maximum=1000000 -n allkeys",
104
+ "check": {"keyspacelen": 1000000},
105
+ "command": "--pipeline 10 --data-size 1000 --ratio 1:10 --key-pattern R:R -c 25 -t 2 --hide-histogram --test-time 180",
106
+ "kpis": {},
107
+ "tested-commands": ["setget"],
108
+ "tested-groups": ["string"],
109
+ },
110
+ {
111
+ "name": "memtier_benchmark-1Mkeys-string-setget200c-100B",
112
+ "precommand": "--data-size 100 --ratio 1:0 --key-pattern P:P -c 50 -t 4 --hide-histogram --key-minimum=1 --key-maximum=1000000 -n allkeys",
113
+ "check": {"keyspacelen": 1000000},
114
+ "command": "--data-size 100 --ratio 1:10 --key-pattern R:R -c 50 -t 4 --hide-histogram --test-time 180",
115
+ "kpis": {},
116
+ "tested-commands": ["setget"],
117
+ "tested-groups": ["string"],
118
+ },
119
+ {
120
+ "name": "memtier_benchmark-1Mkeys-string-setget200c-1KiB",
121
+ "precommand": "--data-size 1000 --ratio 1:0 --key-pattern P:P -c 50 -t 4 --hide-histogram --key-minimum=1 --key-maximum=1000000 -n allkeys",
122
+ "check": {"keyspacelen": 1000000},
123
+ "command": "--data-size 1000 --ratio 1:10 --key-pattern R:R -c 50 -t 4 --hide-histogram --test-time 180",
124
+ "kpis": {},
125
+ "tested-commands": ["setget"],
126
+ "tested-groups": ["string"],
127
+ },
128
+ {
129
+ "name": "memtier_benchmark-1Mkeys-string-setget200c-100B-pipeline-10",
130
+ "precommand": "--data-size 100 --ratio 1:0 --key-pattern P:P -c 50 -t 4 --hide-histogram --key-minimum=1 --key-maximum=1000000 -n allkeys",
131
+ "check": {"keyspacelen": 1000000},
132
+ "command": "--pipeline 10 --data-size 100 --ratio 1:10 --key-pattern R:R -c 50 -t 4 --hide-histogram --test-time 180",
133
+ "kpis": {},
134
+ "tested-commands": ["setget"],
135
+ "tested-groups": ["string"],
136
+ },
137
+ {
138
+ "name": "memtier_benchmark-1Mkeys-string-setget200c-1KiB-pipeline-10",
139
+ "precommand": "--data-size 1000 --ratio 1:0 --key-pattern P:P -c 50 -t 4 --hide-histogram --key-minimum=1 --key-maximum=1000000 -n allkeys",
140
+ "check": {"keyspacelen": 1000000},
141
+ "command": "--pipeline 10 --data-size 1000 --ratio 1:10 --key-pattern R:R -c 50 -t 4 --hide-histogram --test-time 180",
142
+ "kpis": {},
143
+ "tested-commands": ["setget"],
144
+ "tested-groups": ["string"],
145
+ },
146
+ {
147
+ "name": "memtier_benchmark-1Mkeys-load-string50c-with-100B-values",
148
+ "precommand": "",
149
+ "check": {"keyspacelen": 0},
150
+ "command": "--data-size 100 --ratio 1:0 --key-pattern P:P --key-minimum=1 --key-maximum 1000000 --test-time 180 -c 25 -t 2 --hide-histogram",
151
+ "kpis": {},
152
+ "tested-commands": ["set"],
153
+ "tested-groups": ["string"],
154
+ },
155
+ {
156
+ "name": "memtier_benchmark-1Mkeys-load-string50c-with-1KiB-values",
157
+ "precommand": "",
158
+ "check": {"keyspacelen": 0},
159
+ "command": "--data-size 1000 --ratio 1:0 --key-pattern P:P --key-minimum=1 --key-maximum 1000000 --test-time 180 -c 25 -t 2 --hide-histogram",
160
+ "kpis": {},
161
+ "tested-commands": ["set"],
162
+ "tested-groups": ["string"],
163
+ },
164
+ {
165
+ "name": "memtier_benchmark-1Mkeys-load-string50c-with-100B-values-pipeline-10",
166
+ "precommand": "",
167
+ "check": {"keyspacelen": 0},
168
+ "command": "--pipeline 10 --data-size 100 --ratio 1:0 --key-pattern P:P --key-minimum=1 --key-maximum 1000000 --test-time 180 -c 25 -t 2 --hide-histogram",
169
+ "kpis": {},
170
+ "tested-commands": ["set"],
171
+ "tested-groups": ["string"],
172
+ },
173
+ {
174
+ "name": "memtier_benchmark-1Mkeys-load-string50c-with-1KiB-values-pipeline-10",
175
+ "precommand": "",
176
+ "check": {"keyspacelen": 0},
177
+ "command": "--pipeline 10 --data-size 1000 --ratio 1:0 --key-pattern P:P --key-minimum=1 --key-maximum 1000000 --test-time 180 -c 25 -t 2 --hide-histogram",
178
+ "kpis": {},
179
+ "tested-commands": ["set"],
180
+ "tested-groups": ["string"],
181
+ },
182
+ {
183
+ "name": "memtier_benchmark-1Mkeys-load-string200c-with-100B-values",
184
+ "precommand": "",
185
+ "check": {"keyspacelen": 0},
186
+ "command": "--data-size 100 --ratio 1:0 --key-pattern P:P --key-minimum=1 --key-maximum 1000000 --test-time 180 -c 50 -t 4 --hide-histogram",
187
+ "kpis": {},
188
+ "tested-commands": ["set"],
189
+ "tested-groups": ["string"],
190
+ },
191
+ {
192
+ "name": "memtier_benchmark-1Mkeys-load-string200c-with-1KiB-values",
193
+ "precommand": "",
194
+ "check": {"keyspacelen": 0},
195
+ "command": "--data-size 1000 --ratio 1:0 --key-pattern P:P --key-minimum=1 --key-maximum 1000000 --test-time 180 -c 50 -t 4 --hide-histogram",
196
+ "kpis": {},
197
+ "tested-commands": ["set"],
198
+ "tested-groups": ["string"],
199
+ },
200
+ {
201
+ "name": "memtier_benchmark-1Mkeys-load-string200c-with-100B-values-pipeline-10",
202
+ "precommand": "",
203
+ "check": {"keyspacelen": 0},
204
+ "command": "--pipeline 10 --data-size 100 --ratio 1:0 --key-pattern P:P --key-minimum=1 --key-maximum 1000000 --test-time 180 -c 50 -t 4 --hide-histogram",
205
+ "kpis": {},
206
+ "tested-commands": ["set"],
207
+ "tested-groups": ["string"],
208
+ },
209
+ {
210
+ "name": "memtier_benchmark-1Mkeys-load-string200c-with-1KiB-values-pipeline-10",
211
+ "precommand": "",
212
+ "check": {"keyspacelen": 0},
213
+ "command": "--pipeline 10 --data-size 1000 --ratio 1:0 --key-pattern P:P --key-minimum=1 --key-maximum 1000000 --test-time 180 -c 50 -t 4 --hide-histogram",
214
+ "kpis": {},
215
+ "tested-commands": ["set"],
216
+ "tested-groups": ["string"],
217
+ },
218
+ {
219
+ "name": "memtier_benchmark-1Mkeys-string-mget-1KiB",
220
+ "precommand": "--data-size 1000 --key-minimum=1 --key-maximum 1000000 -n allkeys --ratio=1:0 --key-pattern P:P --hide-histogram -t 2 -c 100",
221
+ "check": {"keyspacelen": 1000000},
222
+ "command": ' --command="MGET __key__ memtier-1 memtier-2 memtier-3 memtier-4 memtier-5 memtier-6 memtier-7 memtier-8 memtier-9" --command-key-pattern=R -c 50 -t 2 --hide-histogram --test-time 180',
223
+ "kpis": {},
224
+ "tested-commands": ["mget"],
225
+ "tested-groups": ["string"],
226
+ },
227
+ ]
228
+
229
+ print(len(tests))
230
+ re_filenames = [x["name"] for x in tests]
231
+ re_test_specs = {}
232
+ for x in tests:
233
+ re_test_specs[x["name"]] = x
234
+
235
+ import yaml
236
+ import json
237
+ import pathlib
238
+
239
+
240
+ defaults_filename = "default.yml"
241
+ prefix = "memtier_benchmark-"
242
+ test_glob = "memtier_*.yml"
243
+ files = pathlib.Path().glob(test_glob)
244
+ files = [str(x) for x in files]
245
+
246
+ base_yaml = yaml.safe_load(open("memtier_benchmark-1Mkeys-string-get-1KiB.yml"))
247
+ del base_yaml["description"]
248
+ # del base_yaml["clientconfig"]["resources"]
249
+ # del base_yaml["build-variants"]
250
+ # del base_yaml["priority"]
251
+ # del base_yaml["redis-topologies"]
252
+ # del base_yaml["tested-commands"]
253
+ # del base_yaml["version"]
254
+ # del base_yaml["tested-groups"]
255
+ #
256
+
257
+
258
+ #
259
+ # for file in files:
260
+ # if defaults_filename in file:
261
+ # files.remove(file)
262
+
263
+ for re_file in re_filenames:
264
+ re_spec = re_test_specs[re_file]
265
+ precommand = ""
266
+ if "precommand" in re_spec:
267
+ precommand = re_spec["precommand"]
268
+
269
+ command = ""
270
+ if "command" in re_spec:
271
+ command = re_spec["command"]
272
+ if "dbconfig" in base_yaml:
273
+ del base_yaml["dbconfig"]
274
+ if precommand != "":
275
+ base_yaml["dbconfig"] = {}
276
+ base_yaml["dbconfig"]["preload_tool"] = {}
277
+ base_yaml["dbconfig"]["preload_tool"][
278
+ "run_image"
279
+ ] = "redislabs/memtier_benchmark:edge"
280
+ base_yaml["dbconfig"]["preload_tool"]["tool"] = "memtier_benchmark"
281
+ base_yaml["dbconfig"]["preload_tool"]["arguments"] = f"{precommand}"
282
+
283
+ base_yaml["clientconfig"]["arguments"] = command
284
+ base_yaml["name"] = re_file
285
+ with open(f"re-string/{re_file}.yml", "w") as outfile:
286
+ yaml.dump(base_yaml, outfile)