redis-benchmarks-specification 0.2.42__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.
Files changed (336) hide show
  1. redis_benchmarks_specification/__api__/Readme.md +7 -0
  2. redis_benchmarks_specification/__api__/__init__.py +5 -0
  3. redis_benchmarks_specification/__api__/api.py +87 -0
  4. redis_benchmarks_specification/__api__/app.py +191 -0
  5. redis_benchmarks_specification/__builder__/Readme.md +7 -0
  6. redis_benchmarks_specification/__builder__/__init__.py +5 -0
  7. redis_benchmarks_specification/__builder__/builder.py +1010 -0
  8. redis_benchmarks_specification/__builder__/schema.py +23 -0
  9. redis_benchmarks_specification/__cli__/__init__.py +5 -0
  10. redis_benchmarks_specification/__cli__/args.py +226 -0
  11. redis_benchmarks_specification/__cli__/cli.py +624 -0
  12. redis_benchmarks_specification/__cli__/stats.py +1304 -0
  13. redis_benchmarks_specification/__common__/__init__.py +0 -0
  14. redis_benchmarks_specification/__common__/builder_schema.py +256 -0
  15. redis_benchmarks_specification/__common__/env.py +96 -0
  16. redis_benchmarks_specification/__common__/github.py +280 -0
  17. redis_benchmarks_specification/__common__/package.py +28 -0
  18. redis_benchmarks_specification/__common__/runner.py +485 -0
  19. redis_benchmarks_specification/__common__/spec.py +143 -0
  20. redis_benchmarks_specification/__common__/suppress_warnings.py +20 -0
  21. redis_benchmarks_specification/__common__/timeseries.py +1621 -0
  22. redis_benchmarks_specification/__compare__/__init__.py +5 -0
  23. redis_benchmarks_specification/__compare__/args.py +240 -0
  24. redis_benchmarks_specification/__compare__/compare.py +3322 -0
  25. redis_benchmarks_specification/__init__.py +15 -0
  26. redis_benchmarks_specification/__runner__/__init__.py +5 -0
  27. redis_benchmarks_specification/__runner__/args.py +334 -0
  28. redis_benchmarks_specification/__runner__/remote_profiling.py +535 -0
  29. redis_benchmarks_specification/__runner__/runner.py +3837 -0
  30. redis_benchmarks_specification/__self_contained_coordinator__/__init__.py +5 -0
  31. redis_benchmarks_specification/__self_contained_coordinator__/args.py +210 -0
  32. redis_benchmarks_specification/__self_contained_coordinator__/artifacts.py +27 -0
  33. redis_benchmarks_specification/__self_contained_coordinator__/build_info.py +61 -0
  34. redis_benchmarks_specification/__self_contained_coordinator__/clients.py +58 -0
  35. redis_benchmarks_specification/__self_contained_coordinator__/cpuset.py +17 -0
  36. redis_benchmarks_specification/__self_contained_coordinator__/docker.py +108 -0
  37. redis_benchmarks_specification/__self_contained_coordinator__/post_processing.py +19 -0
  38. redis_benchmarks_specification/__self_contained_coordinator__/prepopulation.py +96 -0
  39. redis_benchmarks_specification/__self_contained_coordinator__/runners.py +740 -0
  40. redis_benchmarks_specification/__self_contained_coordinator__/self_contained_coordinator.py +2554 -0
  41. redis_benchmarks_specification/__setups__/__init__.py +0 -0
  42. redis_benchmarks_specification/__setups__/topologies.py +17 -0
  43. redis_benchmarks_specification/__spec__/__init__.py +5 -0
  44. redis_benchmarks_specification/__spec__/args.py +78 -0
  45. redis_benchmarks_specification/__spec__/cli.py +259 -0
  46. redis_benchmarks_specification/__watchdog__/__init__.py +5 -0
  47. redis_benchmarks_specification/__watchdog__/args.py +54 -0
  48. redis_benchmarks_specification/__watchdog__/watchdog.py +175 -0
  49. redis_benchmarks_specification/commands/__init__.py +0 -0
  50. redis_benchmarks_specification/commands/commands.py +15 -0
  51. redis_benchmarks_specification/setups/builders/gcc:15.2.0-amd64-debian-bookworm-default.yml +20 -0
  52. redis_benchmarks_specification/setups/builders/gcc:15.2.0-arm64-debian-bookworm-default.yml +20 -0
  53. redis_benchmarks_specification/setups/platforms/aws-ec2-1node-c5.4xlarge.yml +27 -0
  54. redis_benchmarks_specification/setups/topologies/topologies.yml +153 -0
  55. redis_benchmarks_specification/test-suites/defaults.yml +32 -0
  56. redis_benchmarks_specification/test-suites/generate.py +114 -0
  57. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hexpire-5-fields-10B-values.yml +43 -0
  58. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hexpire-50-fields-10B-values.yml +53 -0
  59. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hexpireat-5-fields-10B-values.yml +43 -0
  60. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hexpireat-50-fields-10B-values.yml +53 -0
  61. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hgetall-50-fields-100B-values.yml +52 -0
  62. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hgetex-5-fields-10B-values.yml +43 -0
  63. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hgetex-50-fields-10B-values.yml +53 -0
  64. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hgetex-persist-50-fields-10B-values.yml +53 -0
  65. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hpexpire-5-fields-10B-values.yml +43 -0
  66. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hpexpire-50-fields-10B-values.yml +53 -0
  67. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hpexpireat-5-fields-10B-values.yml +43 -0
  68. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hpexpireat-50-fields-10B-values.yml +53 -0
  69. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-htll-50-fields-10B-values.yml +53 -0
  70. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-1-fields-with-1000B-values-expiration.yml +35 -0
  71. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-1-fields-with-10B-values-expiration.yml +34 -0
  72. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-1-fields-with-10B-values-long-expiration.yml +35 -0
  73. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-1-fields-with-10B-values-short-expiration.yml +35 -0
  74. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-20-fields-with-1B-values-pipeline-30.yml +43 -0
  75. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-5-fields-with-1000B-values-expiration.yml +36 -0
  76. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-5-fields-with-10B-values-expiration.yml +35 -0
  77. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-5-fields-with-10B-values-long-expiration.yml +36 -0
  78. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-5-fields-with-10B-values-short-expiration.yml +36 -0
  79. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-1000B-values-expiration.yml +45 -0
  80. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-1000B-values.yml +44 -0
  81. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-100B-values.yml +44 -0
  82. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-10B-values-expiration.yml +44 -0
  83. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-10B-values-long-expiration.yml +45 -0
  84. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-10B-values-short-expiration.yml +45 -0
  85. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-10B-values.yml +43 -0
  86. redis_benchmarks_specification/test-suites/memtier_benchmark-10Kkeys-load-hash-50-fields-with-10000B-values.yml +44 -0
  87. redis_benchmarks_specification/test-suites/memtier_benchmark-10Kkeys-load-list-rpush-bulkload-pipeline-50.yml +39 -0
  88. redis_benchmarks_specification/test-suites/memtier_benchmark-10Kkeys-load-list-with-10B-values-pipeline-50.yml +33 -0
  89. redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-load-hash-5-fields-with-100B-values-pipeline-10.yml +33 -0
  90. redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-load-hash-5-fields-with-100B-values.yml +33 -0
  91. redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-load-hash-5-fields-with-10B-values-pipeline-10.yml +34 -0
  92. redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-load-hash-5-fields-with-10B-values.yml +33 -0
  93. redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-string-get-10B-pipeline-100-nokeyprefix.yml +38 -0
  94. redis_benchmarks_specification/test-suites/memtier_benchmark-1Kkeys-hash-listpack-500-fields-update-20-fields-with-1B-to-64B-values.yml +75 -0
  95. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-100B-expire-use-case.yml +50 -0
  96. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-10B-expire-use-case.yml +50 -0
  97. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-10B-psetex-expire-use-case.yml +43 -0
  98. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-10B-setex-expire-use-case.yml +43 -0
  99. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-1KiB-expire-use-case.yml +49 -0
  100. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-4KiB-expire-use-case.yml +50 -0
  101. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-bitmap-getbit-pipeline-10.yml +42 -0
  102. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-exists-pipeline-10.yml +41 -0
  103. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-expire-pipeline-10.yml +41 -0
  104. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-expireat-pipeline-10.yml +41 -0
  105. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-pexpire-pipeline-10.yml +41 -0
  106. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-scan-count-500-pipeline-10.yml +41 -0
  107. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-scan-cursor-count-500-pipeline-10.yml +42 -0
  108. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-scan-cursor-count-5000-pipeline-10.yml +42 -0
  109. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-scan-cursor-pipeline-10.yml +42 -0
  110. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-scan-pipeline-10.yml +41 -0
  111. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-scan-type-pipeline-10.yml +41 -0
  112. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-touch-pipeline-10.yml +41 -0
  113. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-ttl-pipeline-10.yml +41 -0
  114. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hexists.yml +45 -0
  115. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hget-hgetall-hkeys-hvals-with-100B-values.yml +48 -0
  116. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hgetall-50-fields-10B-values.yml +53 -0
  117. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hincrby.yml +42 -0
  118. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hincrbyfloat.yml +42 -0
  119. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hkeys-10-fields-with-10B-values-with-expiration-pipeline-10.yml +45 -0
  120. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hkeys-5-fields-with-100B-values-with-expiration-pipeline-10.yml +44 -0
  121. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hkeys-5-fields-with-10B-values-with-expiration-pipeline-10.yml +44 -0
  122. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hkeys-50-fields-with-10B-values-with-expiration-pipeline-10.yml +54 -0
  123. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hmget-5-fields-with-100B-values-pipeline-10.yml +44 -0
  124. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-transactions-multi-exec-pipeline-20.yml +43 -0
  125. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-list-lpop-rpop-with-100B-values.yml +44 -0
  126. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-list-lpop-rpop-with-10B-values.yml +44 -0
  127. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-list-lpop-rpop-with-1KiB-values.yml +44 -0
  128. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-list-rpoplpush-with-10B-values.yml +42 -0
  129. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-hash-5-fields-with-1000B-values-pipeline-10.yml +34 -0
  130. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-hash-5-fields-with-1000B-values.yml +33 -0
  131. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-hash-50-fields-with-10B-values-long-expiration-pipeline-10.yml +46 -0
  132. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-hash-hmset-5-fields-with-1000B-values.yml +33 -0
  133. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-list-rpush-with-10B-values.yml +32 -0
  134. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-list-with-100B-values.yml +32 -0
  135. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-list-with-10B-values-pipeline-10.yml +33 -0
  136. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-list-with-10B-values.yml +32 -0
  137. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-list-with-1KiB-values.yml +32 -0
  138. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-set-intset-with-100-elements-19-digits-pipeline-10.yml +58 -0
  139. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-set-intset-with-100-elements-19-digits.yml +58 -0
  140. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-set-intset-with-100-elements-pipeline-10.yml +41 -0
  141. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-set-intset-with-100-elements.yml +40 -0
  142. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-stream-1-fields-with-100B-values-pipeline-10.yml +33 -0
  143. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-stream-1-fields-with-100B-values.yml +33 -0
  144. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-stream-5-fields-with-100B-values-pipeline-10.yml +34 -0
  145. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-stream-5-fields-with-100B-values.yml +33 -0
  146. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-100B-values-pipeline-10.yml +32 -0
  147. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-100B-values.yml +35 -0
  148. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-10B-values-pipeline-10.yml +33 -0
  149. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-10B-values-pipeline-100-nokeyprefix.yml +29 -0
  150. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-10B-values-pipeline-100.yml +33 -0
  151. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-10B-values-pipeline-50.yml +33 -0
  152. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-10B-values-pipeline-500.yml +33 -0
  153. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-10B-values.yml +32 -0
  154. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-1KiB-values-pipeline-10.yml +32 -0
  155. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-1KiB-values.yml +32 -0
  156. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-20KiB-values.yml +35 -0
  157. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-zset-listpack-with-100-elements-double-score.yml +91 -0
  158. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-zset-with-10-elements-double-score.yml +35 -0
  159. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-zset-with-10-elements-int-score.yml +34 -0
  160. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-append-1-100B-pipeline-10.yml +43 -0
  161. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-append-1-100B.yml +42 -0
  162. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-decr.yml +41 -0
  163. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-100B-pipeline-10.yml +41 -0
  164. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-100B.yml +41 -0
  165. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-10B-pipeline-10.yml +41 -0
  166. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-10B-pipeline-100-nokeyprefix.yml +38 -0
  167. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-10B-pipeline-100.yml +41 -0
  168. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-10B-pipeline-50.yml +41 -0
  169. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-10B-pipeline-500.yml +41 -0
  170. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-10B.yml +41 -0
  171. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-1KiB-pipeline-10.yml +41 -0
  172. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-1KiB.yml +41 -0
  173. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-32B-pipeline-10.yml +40 -0
  174. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-32B.yml +40 -0
  175. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-incr-pipeline-10.yml +30 -0
  176. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-incrby-pipeline-10.yml +30 -0
  177. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-incrby.yml +30 -0
  178. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-incrbyfloat-pipeline-10.yml +30 -0
  179. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-incrbyfloat.yml +30 -0
  180. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-int-encoding-strlen-pipeline-10.yml +40 -0
  181. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mget-1KiB.yml +41 -0
  182. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-100B-expire-pipeline-10.yml +45 -0
  183. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-100B-expire.yml +45 -0
  184. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-100B-pipeline-10.yml +43 -0
  185. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-100B.yml +42 -0
  186. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-1KB-pipeline-10.yml +42 -0
  187. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-1KB.yml +41 -0
  188. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-32B-pipeline-10.yml +43 -0
  189. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-32B.yml +42 -0
  190. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-512B-pipeline-10.yml +43 -0
  191. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-512B.yml +42 -0
  192. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mixed-50-50-set-get-with-expiration-240B-400_conns.yml +47 -0
  193. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-set-with-ex-100B-pipeline-10.yml +41 -0
  194. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setex-100B-pipeline-10.yml +41 -0
  195. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setget200c-1KiB-pipeline-1.yml +43 -0
  196. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setget200c-1KiB-pipeline-10.yml +43 -0
  197. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setget200c-4KiB-pipeline-1.yml +43 -0
  198. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setget200c-4KiB-pipeline-10.yml +43 -0
  199. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setget200c-512B-pipeline-1.yml +43 -0
  200. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setget200c-512B-pipeline-10.yml +43 -0
  201. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setrange-100B-pipeline-10.yml +42 -0
  202. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setrange-100B.yml +42 -0
  203. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-100M-bits-bitmap-bitcount.yml +45 -0
  204. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-1Billion-bits-bitmap-bitcount.yml +45 -0
  205. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-2-elements-geopos.yml +38 -0
  206. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-2-elements-geosearch-fromlonlat-withcoord.yml +39 -0
  207. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geodist-pipeline-10.yml +36 -0
  208. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geodist.yml +36 -0
  209. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geohash-pipeline-10.yml +35 -0
  210. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geohash.yml +34 -0
  211. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geopos-pipeline-10.yml +35 -0
  212. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geopos.yml +34 -0
  213. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geosearch-fromlonlat-bybox.yml +36 -0
  214. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geosearch-fromlonlat-pipeline-10.yml +36 -0
  215. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geosearch-fromlonlat.yml +36 -0
  216. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-hash-1K-fields-hgetall-pipeline-10.yml +285 -0
  217. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-hash-1K-fields-hgetall.yml +284 -0
  218. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-hash-hscan-1K-fields-100B-values-cursor-count-1000.yml +291 -0
  219. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-hash-hscan-1K-fields-10B-values-cursor-count-100.yml +291 -0
  220. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-hash-hscan-1K-fields-10B-values.yml +290 -0
  221. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-hash-hscan-50-fields-10B-values.yml +54 -0
  222. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10-elements-lrange-all-elements-pipeline-10.yml +37 -0
  223. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10-elements-lrange-all-elements.yml +36 -0
  224. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-100-elements-int-7bit-uint-lrange-all-elements-pipeline-10.yml +44 -0
  225. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-100-elements-int-lrange-all-elements-pipeline-10.yml +52 -0
  226. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-100-elements-llen-pipeline-10.yml +52 -0
  227. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-100-elements-lrange-all-elements-pipeline-10.yml +52 -0
  228. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-100-elements-lrange-all-elements.yml +51 -0
  229. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-lindex-integer.yml +41 -0
  230. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-lindex-string-pipeline-10.yml +42 -0
  231. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-lindex-string.yml +41 -0
  232. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-linsert-lrem-integer.yml +45 -0
  233. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-linsert-lrem-string.yml +45 -0
  234. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-lpos-integer.yml +41 -0
  235. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-lpos-string.yml +41 -0
  236. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-1K-elements-lrange-all-elements-pipeline-10.yml +202 -0
  237. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-1K-elements-lrange-all-elements.yml +201 -0
  238. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-2K-elements-quicklist-lrange-all-elements-longs.yml +258 -0
  239. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-load-hash-1K-fields-with-5B-values.yml +282 -0
  240. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-load-zset-with-5-elements-parsing-float-score.yml +36 -0
  241. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-load-zset-with-5-elements-parsing-hexa-score.yml +36 -0
  242. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-pfadd-4KB-values-pipeline-10.yml +32 -0
  243. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-10-elements-smembers-pipeline-10.yml +37 -0
  244. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-10-elements-smembers.yml +36 -0
  245. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-10-elements-smismember.yml +38 -0
  246. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-100-elements-sismember-is-a-member.yml +53 -0
  247. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-100-elements-sismember-not-a-member.yml +53 -0
  248. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-100-elements-smembers.yml +50 -0
  249. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-100-elements-smismember.yml +54 -0
  250. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-100-elements-sscan.yml +50 -0
  251. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-10M-elements-sismember-50pct-chance.yml +41 -0
  252. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-10M-elements-srem-50pct-chance.yml +40 -0
  253. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-1K-elements-smembers.yml +200 -0
  254. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-1K-elements-sscan-cursor-count-100.yml +201 -0
  255. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-1K-elements-sscan.yml +200 -0
  256. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-1M-elements-sismember-50pct-chance.yml +40 -0
  257. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-200K-elements-sadd-constant.yml +41 -0
  258. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-2M-elements-sadd-increasing.yml +32 -0
  259. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zincrby-1M-elements-pipeline-1.yml +40 -0
  260. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrank-100K-elements-pipeline-1.yml +40 -0
  261. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrank-10M-elements-pipeline-1.yml +41 -0
  262. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrank-1M-elements-pipeline-1.yml +40 -0
  263. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrem-5M-elements-pipeline-1.yml +47 -0
  264. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrevrangebyscore-256K-elements-pipeline-1.yml +41 -0
  265. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrevrangebyscore-256K-elements-pipeline-10.yml +41 -0
  266. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrevrank-1M-elements-pipeline-1.yml +40 -0
  267. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-10-elements-zrange-all-elements-long-scores.yml +41 -0
  268. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-10-elements-zrange-all-elements.yml +40 -0
  269. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-100-elements-zrange-all-elements.yml +66 -0
  270. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-100-elements-zrangebyscore-all-elements-long-scores.yml +66 -0
  271. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-100-elements-zrangebyscore-all-elements.yml +66 -0
  272. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-100-elements-zscan.yml +65 -0
  273. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1K-elements-zrange-all-elements.yml +322 -0
  274. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1K-elements-zscan.yml +321 -0
  275. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1M-elements-zcard-pipeline-10.yml +39 -0
  276. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1M-elements-zremrangebyscore-pipeline-10.yml +41 -0
  277. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1M-elements-zrevrange-5-elements.yml +40 -0
  278. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1M-elements-zrevrange-withscores-5-elements-pipeline-10.yml +41 -0
  279. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1M-elements-zscore-pipeline-10.yml +40 -0
  280. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-600K-elements-zrangestore-1K-elements.yml +41 -0
  281. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-600K-elements-zrangestore-300K-elements.yml +43 -0
  282. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-listpack-zrank-100-elements-pipeline-1.yml +50 -0
  283. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-lua-eval-hset-expire.yml +37 -0
  284. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-lua-evalsha-hset-expire.yml +41 -0
  285. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-set-10-100-elements-sdiff.yml +57 -0
  286. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-set-10-100-elements-sinter.yml +57 -0
  287. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-set-10-100-elements-sunion.yml +57 -0
  288. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-stream-5-entries-xread-all-entries-pipeline-10.yml +46 -0
  289. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-stream-5-entries-xread-all-entries.yml +46 -0
  290. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-zset-300-elements-skiplist-encoded-zunion.yml +434 -0
  291. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-zset-300-elements-skiplist-encoded-zunionstore.yml +434 -0
  292. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-load-string-with-512B-values-pipeline-10.yml +37 -0
  293. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-load-string-with-512B-values.yml +37 -0
  294. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-400_conns.yml +45 -0
  295. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-40_conns.yml +45 -0
  296. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-pipeline-10-2000_conns.yml +46 -0
  297. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-pipeline-10-400_conns.yml +46 -0
  298. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-pipeline-10-40_conns.yml +46 -0
  299. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-400_conns.yml +45 -0
  300. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-pipeline-10-2000_conns.yml +46 -0
  301. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-pipeline-10-400_conns.yml +46 -0
  302. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-pipeline-10-5200_conns.yml +46 -0
  303. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-50-50-with-512B-values-with-expiration-pipeline-10-400_conns.yml +43 -0
  304. redis_benchmarks_specification/test-suites/memtier_benchmark-connection-hello-pipeline-10.yml +32 -0
  305. redis_benchmarks_specification/test-suites/memtier_benchmark-connection-hello.yml +32 -0
  306. redis_benchmarks_specification/test-suites/memtier_benchmark-multiple-hll-pfcount-100B-values.yml +34 -0
  307. redis_benchmarks_specification/test-suites/memtier_benchmark-multiple-hll-pfmerge-100B-values.yml +34 -0
  308. redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-connection-ping-pipeline-10.yml +29 -0
  309. redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-100-subscribers.yml +40 -0
  310. redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-1000-subscribers.yml +40 -0
  311. redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-5000-subscribers.yml +40 -0
  312. redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-mixed-100-channels-128B-100-publishers-50K-subscribers-5k-conns.yml +40 -0
  313. redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-pubsub-publish-1K-channels-10B-no-subscribers.yml +30 -0
  314. redis_benchmarks_specification/test-suites/memtier_benchmark-nokeys-server-time-pipeline-10.yml +29 -0
  315. redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-leaderboard-top-10.yml +68 -0
  316. redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-leaderboard-top-100.yml +69 -0
  317. redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-leaderboard-top-1000.yml +68 -0
  318. redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-rate-limiting-lua-100k-sessions.yml +64 -0
  319. redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-realtime-analytics-membership-pipeline-10.yml +56 -0
  320. redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-realtime-analytics-membership.yml +56 -0
  321. redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-caching-hash-100k-sessions.yml +108 -0
  322. redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-caching-json-100k-sessions.yml +109 -0
  323. redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-caching-string-100k-sessions.yml +98 -0
  324. redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-storage-100k-sessions.yml +205 -0
  325. redis_benchmarks_specification/test-suites/memtier_benchmark-playbook-session-storage-1k-sessions.yml +205 -0
  326. redis_benchmarks_specification/test-suites/memtier_benchmark-stream-10M-entries-xread-count-100.yml +36 -0
  327. redis_benchmarks_specification/test-suites/memtier_benchmark-stream-10M-entries-xreadgroup-count-100-noack.yml +38 -0
  328. redis_benchmarks_specification/test-suites/memtier_benchmark-stream-10M-entries-xreadgroup-count-100.yml +38 -0
  329. redis_benchmarks_specification/test-suites/memtier_benchmark-stream-concurrent-xadd-xreadgroup-70-30.yml +50 -0
  330. redis_benchmarks_specification/test-suites/template.txt +18 -0
  331. redis_benchmarks_specification/vector-search-test-suites/vector_db_benchmark_test.yml +41 -0
  332. redis_benchmarks_specification-0.2.42.dist-info/LICENSE +201 -0
  333. redis_benchmarks_specification-0.2.42.dist-info/METADATA +434 -0
  334. redis_benchmarks_specification-0.2.42.dist-info/RECORD +336 -0
  335. redis_benchmarks_specification-0.2.42.dist-info/WHEEL +4 -0
  336. redis_benchmarks_specification-0.2.42.dist-info/entry_points.txt +10 -0
@@ -0,0 +1,485 @@
1
+ import csv
2
+ import logging
3
+ import os
4
+ import pathlib
5
+ import re
6
+ import datetime as dt
7
+ import redis
8
+
9
+ from redis_benchmarks_specification.__common__.timeseries import (
10
+ timeseries_test_sucess_flow,
11
+ push_data_to_redistimeseries,
12
+ get_project_ts_tags,
13
+ )
14
+
15
+
16
+ def execute_init_commands(benchmark_config, r, dbconfig_keyname="dbconfig"):
17
+ cmds = None
18
+ lua_scripts = None
19
+ res = 0
20
+ if dbconfig_keyname in benchmark_config:
21
+ for k, v in benchmark_config[dbconfig_keyname].items():
22
+ if "init_commands" in k:
23
+ cmds = v
24
+ elif "init_lua" in k:
25
+ lua_scripts = v
26
+
27
+ if type(cmds) == str:
28
+ cmds = [cmds]
29
+ if cmds is not None:
30
+ for cmd in cmds:
31
+ is_array = False
32
+ if type(cmd) == list:
33
+ is_array = True
34
+ if '"' in cmd:
35
+ cols = []
36
+ for lines in csv.reader(
37
+ cmd,
38
+ quotechar='"',
39
+ delimiter=" ",
40
+ quoting=csv.QUOTE_ALL,
41
+ skipinitialspace=True,
42
+ ):
43
+ if len(lines) > 0 and lines[0] != " " and len(lines[0]) > 0:
44
+ cols.append(lines[0])
45
+ cmd = cols
46
+ is_array = True
47
+ try:
48
+ logging.info("Sending init command: {}".format(cmd))
49
+ stdout = ""
50
+ if is_array:
51
+ stdout = r.execute_command(*cmd)
52
+ else:
53
+ stdout = r.execute_command(cmd)
54
+ res = res + 1
55
+ logging.info("Command reply: {}".format(stdout))
56
+ except redis.connection.ConnectionError as e:
57
+ logging.error(
58
+ "Error establishing connection to Redis. Message: {}".format(
59
+ e.__str__()
60
+ )
61
+ )
62
+
63
+ # Process init_lua scripts
64
+ if lua_scripts is not None:
65
+ if type(lua_scripts) == str:
66
+ lua_scripts = [lua_scripts]
67
+
68
+ for lua_script in lua_scripts:
69
+ try:
70
+ logging.info(
71
+ "Executing Lua script (length: {} chars)".format(len(lua_script))
72
+ )
73
+ # Execute the Lua script using EVAL command with 0 keys
74
+ stdout = r.execute_command("EVAL", lua_script, 0)
75
+ logging.info("Lua script result: {}".format(stdout))
76
+ res = res + 1
77
+ except Exception as e:
78
+ logging.error("Lua script execution failed: {}".format(e))
79
+
80
+ return res
81
+
82
+
83
+ def get_benchmark_specs(testsuites_folder, test="", test_regex=".*"):
84
+ final_files = []
85
+ if test == "":
86
+ files = pathlib.Path(testsuites_folder).glob("*.yml")
87
+ original_files = [str(x) for x in files]
88
+ if test_regex == ".*":
89
+ logging.info(
90
+ "Acception all test files. If you need further filter specify a regular expression via --tests-regexp"
91
+ )
92
+ "Running all specified benchmarks: {}".format(" ".join(original_files))
93
+ final_files = original_files
94
+ else:
95
+ logging.info(
96
+ "Filtering all test names via a regular expression: {}".format(
97
+ test_regex
98
+ )
99
+ )
100
+ test_regexp_string = re.compile(test_regex)
101
+ for test_name in original_files:
102
+ match_obj = re.search(test_regexp_string, test_name)
103
+ if match_obj is None:
104
+ logging.debug(
105
+ "Skipping test file: {} given it does not match regex {}".format(
106
+ test_name, test_regexp_string
107
+ )
108
+ )
109
+ else:
110
+ final_files.append(test_name)
111
+
112
+ else:
113
+ files = test.split(",")
114
+ final_files = ["{}/{}".format(testsuites_folder, x) for x in files]
115
+ logging.info(
116
+ "Running specific benchmark in {} files: {}".format(
117
+ len(final_files), final_files
118
+ )
119
+ )
120
+ return final_files
121
+
122
+
123
+ def extract_testsuites(args):
124
+ testsuites_folder = os.path.abspath(args.test_suites_folder)
125
+ logging.info("Using test-suites folder dir {}".format(testsuites_folder))
126
+ testsuite_spec_files = get_benchmark_specs(
127
+ testsuites_folder, args.test, args.tests_regexp
128
+ )
129
+ testsuite_spec_files.sort()
130
+ logging.info(
131
+ "There are a total of {} test-suites in folder {}".format(
132
+ len(testsuite_spec_files), testsuites_folder
133
+ )
134
+ )
135
+ if len(testsuite_spec_files) < 11:
136
+ for test in testsuite_spec_files:
137
+ logging.info(f"Test {test}")
138
+
139
+ return testsuite_spec_files
140
+
141
+
142
+ def commandstats_latencystats_process_name(
143
+ metric_name, prefix, setup_name, variant_labels_dict
144
+ ):
145
+ if prefix in metric_name:
146
+ command_and_metric_and_shard = metric_name[len(prefix) :]
147
+ command = (
148
+ command_and_metric_and_shard[0]
149
+ + command_and_metric_and_shard[1:].split("_", 1)[0]
150
+ )
151
+ metric_and_shard = command_and_metric_and_shard[1:].split("_", 1)[1]
152
+ metric = metric_and_shard
153
+ shard = "1"
154
+ if "_shard_" in metric_and_shard:
155
+ metric = metric_and_shard.split("_shard_")[0]
156
+ shard = metric_and_shard.split("_shard_")[1]
157
+ variant_labels_dict["metric"] = metric
158
+ variant_labels_dict["command"] = command
159
+ variant_labels_dict["command_and_metric"] = "{} - {}".format(command, metric)
160
+ variant_labels_dict["command_and_metric_and_setup"] = "{} - {} - {}".format(
161
+ command, metric, setup_name
162
+ )
163
+ variant_labels_dict["command_and_setup"] = "{} - {}".format(command, setup_name)
164
+ variant_labels_dict["shard"] = shard
165
+ variant_labels_dict["metric_and_shard"] = metric_and_shard
166
+
167
+ version = None
168
+ branch = None
169
+ if "version" in variant_labels_dict:
170
+ version = variant_labels_dict["version"]
171
+ if "branch" in variant_labels_dict:
172
+ branch = variant_labels_dict["branch"]
173
+
174
+ if version is not None:
175
+ variant_labels_dict["command_and_metric_and_version"] = (
176
+ "{} - {} - {}".format(command, metric, version)
177
+ )
178
+ variant_labels_dict["command_and_metric_and_setup_and_version"] = (
179
+ "{} - {} - {} - {}".format(command, metric, setup_name, version)
180
+ )
181
+
182
+ if branch is not None:
183
+ variant_labels_dict["command_and_metric_and_branch"] = (
184
+ "{} - {} - {}".format(command, metric, branch)
185
+ )
186
+ variant_labels_dict["command_and_metric_and_setup_and_branch"] = (
187
+ "{} - {} - {} - {}".format(command, metric, setup_name, branch)
188
+ )
189
+
190
+
191
+ def collect_redis_metrics(
192
+ redis_conns,
193
+ sections=["memory", "cpu", "commandstats", "latencystats"],
194
+ section_filter=None,
195
+ ):
196
+ start_time = dt.datetime.utcnow()
197
+ start_time_ms = int((start_time - dt.datetime(1970, 1, 1)).total_seconds() * 1000)
198
+ res = []
199
+ overall = {}
200
+ multi_shard = False
201
+ if len(redis_conns) > 1:
202
+ multi_shard = True
203
+ for conn_n, conn in enumerate(redis_conns):
204
+ conn_res = {}
205
+ for section in sections:
206
+ info = conn.info(section)
207
+ conn_res[section] = info
208
+ if section not in overall:
209
+ overall[section] = {}
210
+ for k, v in info.items():
211
+ collect = True
212
+ if section_filter is not None:
213
+ if section in section_filter:
214
+ if k not in section_filter[section]:
215
+ collect = False
216
+ if collect and type(v) is float or type(v) is int:
217
+ if k not in overall[section]:
218
+ overall[section][k] = 0
219
+ overall[section][k] += v
220
+ if collect and type(v) is dict:
221
+ for inner_k, inner_v in v.items():
222
+ if type(inner_v) is float or type(inner_v) is int:
223
+ final_str_k = "{}_{}".format(k, inner_k)
224
+ if multi_shard:
225
+ final_str_k += "_shard_{}".format(conn_n + 1)
226
+ if final_str_k not in overall[section]:
227
+ overall[section][final_str_k] = inner_v
228
+
229
+ res.append(conn_res)
230
+
231
+ kv_overall = {}
232
+ for sec, kv_detail in overall.items():
233
+ for k, metric_value in kv_detail.items():
234
+ metric_name = "{}_{}".format(sec, k)
235
+ kv_overall[metric_name] = metric_value
236
+
237
+ return start_time_ms, res, kv_overall
238
+
239
+
240
+ def export_redis_metrics(
241
+ artifact_version,
242
+ end_time_ms,
243
+ overall_end_time_metrics,
244
+ rts,
245
+ setup_name,
246
+ setup_type,
247
+ test_name,
248
+ tf_github_branch,
249
+ tf_github_org,
250
+ tf_github_repo,
251
+ tf_triggering_env,
252
+ metadata_dict=None,
253
+ expire_ms=0,
254
+ git_hash=None,
255
+ running_platform=None,
256
+ ):
257
+ datapoint_errors = 0
258
+ datapoint_inserts = 0
259
+ sprefix = (
260
+ "ci.benchmarks.redis/"
261
+ + "{triggering_env}/{github_org}/{github_repo}".format(
262
+ triggering_env=tf_triggering_env,
263
+ github_org=tf_github_org,
264
+ github_repo=tf_github_repo,
265
+ )
266
+ )
267
+ logging.info(
268
+ "Adding a total of {} server side metrics collected at the end of benchmark".format(
269
+ len(list(overall_end_time_metrics.items()))
270
+ )
271
+ )
272
+ timeseries_dict = {}
273
+ by_variants = {}
274
+ if tf_github_branch is not None and tf_github_branch != "":
275
+ by_variants["by.branch/{}".format(tf_github_branch)] = {
276
+ "branch": tf_github_branch
277
+ }
278
+ if git_hash is not None and git_hash != "":
279
+ by_variants["by.hash/{}".format(git_hash)] = {"hash": git_hash}
280
+ if artifact_version is not None and artifact_version != "":
281
+ by_variants["by.hash/{}".format(git_hash)]["version"] = artifact_version
282
+ if artifact_version is not None and artifact_version != "":
283
+ by_variants["by.version/{}".format(artifact_version)] = {
284
+ "version": artifact_version
285
+ }
286
+ for (
287
+ by_variant,
288
+ variant_labels_dict,
289
+ ) in by_variants.items():
290
+ for (
291
+ metric_name,
292
+ metric_value,
293
+ ) in overall_end_time_metrics.items():
294
+ tsname_metric = f"{sprefix}/{test_name}/{by_variant}/benchmark_end/{running_platform}/{setup_name}/{metric_name}"
295
+
296
+ logging.debug(
297
+ "Adding a redis server side metric collected at the end of benchmark."
298
+ + " metric_name={} metric_value={} time-series name: {}".format(
299
+ metric_name,
300
+ metric_value,
301
+ tsname_metric,
302
+ )
303
+ )
304
+ variant_labels_dict["metric"] = metric_name
305
+ commandstats_latencystats_process_name(
306
+ metric_name, "commandstats_cmdstat_", setup_name, variant_labels_dict
307
+ )
308
+ commandstats_latencystats_process_name(
309
+ metric_name,
310
+ "latencystats_latency_percentiles_usec_",
311
+ setup_name,
312
+ variant_labels_dict,
313
+ )
314
+
315
+ variant_labels_dict["test_name"] = test_name
316
+ if metadata_dict is not None:
317
+ variant_labels_dict.update(metadata_dict)
318
+
319
+ timeseries_dict[tsname_metric] = {
320
+ "labels": get_project_ts_tags(
321
+ tf_github_org,
322
+ tf_github_repo,
323
+ setup_name,
324
+ setup_type,
325
+ tf_triggering_env,
326
+ variant_labels_dict,
327
+ None,
328
+ running_platform,
329
+ ),
330
+ "data": {end_time_ms: metric_value},
331
+ }
332
+ i_errors, i_inserts = push_data_to_redistimeseries(rts, timeseries_dict, expire_ms)
333
+ datapoint_errors = datapoint_errors + i_errors
334
+ datapoint_inserts = datapoint_inserts + i_inserts
335
+ return datapoint_errors, datapoint_inserts
336
+
337
+
338
+ def reset_commandstats(redis_conns):
339
+ for pos, redis_conn in enumerate(redis_conns):
340
+ logging.info("Resetting commmandstats for shard {}".format(pos))
341
+ try:
342
+ redis_conn.config_resetstat()
343
+ except redis.exceptions.ResponseError as e:
344
+ logging.warning(
345
+ "Catched an error while resetting status: {}".format(e.__str__())
346
+ )
347
+
348
+
349
+ def exporter_datasink_common(
350
+ benchmark_config,
351
+ benchmark_duration_seconds,
352
+ build_variant_name,
353
+ datapoint_time_ms,
354
+ dataset_load_duration_seconds,
355
+ datasink_conn,
356
+ datasink_push_results_redistimeseries,
357
+ git_branch,
358
+ git_version,
359
+ metadata,
360
+ redis_conns,
361
+ results_dict,
362
+ running_platform,
363
+ setup_name,
364
+ setup_type,
365
+ test_name,
366
+ tf_github_org,
367
+ tf_github_repo,
368
+ tf_triggering_env,
369
+ topology_spec_name,
370
+ default_metrics=None,
371
+ git_hash=None,
372
+ collect_commandstats=True,
373
+ collect_memory_metrics=True,
374
+ ):
375
+ logging.info(
376
+ f"Using datapoint_time_ms: {datapoint_time_ms}. git_hash={git_hash}, git_branch={git_branch}, git_version={git_version}. gh_org={tf_github_org}, gh_repo={tf_github_repo}"
377
+ )
378
+ timeseries_test_sucess_flow(
379
+ datasink_push_results_redistimeseries,
380
+ git_version,
381
+ benchmark_config,
382
+ benchmark_duration_seconds,
383
+ dataset_load_duration_seconds,
384
+ default_metrics,
385
+ topology_spec_name,
386
+ setup_name,
387
+ None,
388
+ results_dict,
389
+ datasink_conn,
390
+ datapoint_time_ms,
391
+ test_name,
392
+ git_branch,
393
+ tf_github_org,
394
+ tf_github_repo,
395
+ tf_triggering_env,
396
+ metadata,
397
+ build_variant_name,
398
+ running_platform,
399
+ None,
400
+ git_hash,
401
+ disable_target_tables=True,
402
+ )
403
+ if collect_memory_metrics:
404
+ logging.info("Collecting memory metrics")
405
+ (
406
+ _,
407
+ _,
408
+ overall_end_time_metrics,
409
+ ) = collect_redis_metrics(
410
+ redis_conns,
411
+ ["memory"],
412
+ {
413
+ "memory": [
414
+ "used_memory",
415
+ "used_memory_dataset",
416
+ ]
417
+ },
418
+ )
419
+ print(overall_end_time_metrics)
420
+ # 7 days from now
421
+ expire_redis_metrics_ms = 7 * 24 * 60 * 60 * 1000
422
+ export_redis_metrics(
423
+ git_version,
424
+ datapoint_time_ms,
425
+ overall_end_time_metrics,
426
+ datasink_conn,
427
+ setup_name,
428
+ setup_type,
429
+ test_name,
430
+ git_branch,
431
+ tf_github_org,
432
+ tf_github_repo,
433
+ tf_triggering_env,
434
+ {"metric-type": "redis-memory-metrics"},
435
+ expire_redis_metrics_ms,
436
+ git_hash,
437
+ running_platform,
438
+ )
439
+ if collect_commandstats:
440
+ logging.info("Collecting commandstat metrics")
441
+ (
442
+ _,
443
+ _,
444
+ overall_commandstats_metrics,
445
+ ) = collect_redis_metrics(redis_conns, ["commandstats"])
446
+ export_redis_metrics(
447
+ git_version,
448
+ datapoint_time_ms,
449
+ overall_commandstats_metrics,
450
+ datasink_conn,
451
+ setup_name,
452
+ setup_type,
453
+ test_name,
454
+ git_branch,
455
+ tf_github_org,
456
+ tf_github_repo,
457
+ tf_triggering_env,
458
+ {"metric-type": "commandstats"},
459
+ expire_redis_metrics_ms,
460
+ git_hash,
461
+ running_platform,
462
+ )
463
+
464
+ # Update deployment tracking sets
465
+ deployment_type_and_name = f"{setup_type}_AND_{setup_name}"
466
+ deployment_type_and_name_and_version = (
467
+ f"{setup_type}_AND_{setup_name}_AND_{git_version}"
468
+ )
469
+
470
+ # Add to deployment-specific set (only if datasink connection is available)
471
+ if datasink_conn is not None:
472
+ deployment_set_key = f"ci.benchmarks.redis/{tf_triggering_env}/{deployment_type_and_name_and_version}:set"
473
+ datasink_conn.sadd(deployment_set_key, test_name)
474
+
475
+ # Add to testcases set
476
+ testcases_set_key = f"ci.benchmarks.redis/{tf_triggering_env}/testcases:set"
477
+ datasink_conn.sadd(testcases_set_key, test_name)
478
+ else:
479
+ logging.debug("Datasink connection not available, skipping set operations")
480
+
481
+ # Add metadata fields to timeseries metadata
482
+ metadata["deployment_type_AND_deployment_name"] = deployment_type_and_name
483
+ metadata["deployment_type_AND_deployment_name_AND_version"] = (
484
+ deployment_type_and_name_and_version
485
+ )
@@ -0,0 +1,143 @@
1
+ import math
2
+ import logging
3
+
4
+
5
+ def extract_redis_dbconfig_parameters(benchmark_config, dbconfig_keyname):
6
+ redis_configuration_parameters = {}
7
+ modules_configuration_parameters_map = {}
8
+ dataset_load_timeout_secs = 120
9
+ dataset_name = None
10
+ dbconfig_present = False
11
+ if dbconfig_keyname in benchmark_config:
12
+ dbconfig_present = True
13
+ if type(benchmark_config[dbconfig_keyname]) == list:
14
+ for k in benchmark_config[dbconfig_keyname]:
15
+ if "configuration-parameters" in k:
16
+ cp = k["configuration-parameters"]
17
+ for item in cp:
18
+ for k, v in item.items():
19
+ redis_configuration_parameters[k] = v
20
+ if "dataset_load_timeout_secs" in k:
21
+ dataset_load_timeout_secs = k["dataset_load_timeout_secs"]
22
+ if "dataset_name" in k:
23
+ dataset_name = k["dataset_name"]
24
+ if type(benchmark_config[dbconfig_keyname]) == dict:
25
+ if "configuration-parameters" in benchmark_config[dbconfig_keyname]:
26
+ cp = benchmark_config[dbconfig_keyname]["configuration-parameters"]
27
+ for k, v in cp.items():
28
+ redis_configuration_parameters[k] = v
29
+ if "dataset_load_timeout_secs" in benchmark_config[dbconfig_keyname]:
30
+ dataset_load_timeout_secs = benchmark_config[dbconfig_keyname][
31
+ "dataset_load_timeout_secs"
32
+ ]
33
+ if "dataset_name" in benchmark_config[dbconfig_keyname]:
34
+ dataset_name = benchmark_config[dbconfig_keyname]["dataset_name"]
35
+
36
+ return (
37
+ dbconfig_present,
38
+ dataset_name,
39
+ redis_configuration_parameters,
40
+ dataset_load_timeout_secs,
41
+ modules_configuration_parameters_map,
42
+ )
43
+
44
+
45
+ def extract_redis_configuration_from_topology(topologies_map, topology_spec_name):
46
+ redis_arguments = ""
47
+ topology_spec = topologies_map[topology_spec_name]
48
+ if "redis_arguments" in topology_spec:
49
+ redis_arguments = topology_spec["redis_arguments"]
50
+ logging.info(
51
+ f"extracted redis_arguments: {redis_arguments} from topology: {topology_spec_name}"
52
+ )
53
+ return redis_arguments
54
+
55
+
56
+ def extract_client_cpu_limit(benchmark_config):
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
70
+
71
+
72
+ def extract_build_variant_variations(benchmark_config, keyname="build-variants"):
73
+ result = None
74
+ if keyname in benchmark_config:
75
+ result = benchmark_config[keyname]
76
+ return result
77
+
78
+
79
+ def extract_client_container_image(benchmark_config, keyname="clientconfig"):
80
+ client_container_image = None
81
+ if keyname in benchmark_config:
82
+ if "run_image" in benchmark_config[keyname]:
83
+ client_container_image = benchmark_config[keyname]["run_image"]
84
+ return client_container_image
85
+
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
+
107
+ def extract_client_tool(benchmark_config, keyname="clientconfig"):
108
+ client_tool = None
109
+ if keyname in benchmark_config:
110
+ if "tool" in benchmark_config[keyname]:
111
+ client_tool = benchmark_config[keyname]["tool"]
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 []
@@ -0,0 +1,20 @@
1
+ """
2
+ Warning suppression module that should be imported first to suppress known warnings.
3
+ """
4
+
5
+ import warnings
6
+
7
+ # Suppress cryptography deprecation warnings from paramiko
8
+ warnings.filterwarnings("ignore", category=DeprecationWarning, module="paramiko")
9
+ warnings.filterwarnings("ignore", message=".*TripleDES.*", category=DeprecationWarning)
10
+ warnings.filterwarnings(
11
+ "ignore", message=".*cryptography.*", category=DeprecationWarning
12
+ )
13
+
14
+ # Also suppress the specific CryptographyDeprecationWarning if it exists
15
+ try:
16
+ from cryptography.utils import CryptographyDeprecationWarning
17
+
18
+ warnings.filterwarnings("ignore", category=CryptographyDeprecationWarning)
19
+ except ImportError:
20
+ pass