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,740 @@
1
+ import datetime
2
+ import json
3
+ import logging
4
+ import shutil
5
+ import sys
6
+ import tempfile
7
+ import traceback
8
+
9
+ import redis
10
+ from redisbench_admin.environments.oss_cluster import generate_cluster_redis_server_args
11
+
12
+ from redisbench_admin.utils.local import check_dataset_local_requirements
13
+
14
+ from redisbench_admin.run.common import (
15
+ dbconfig_keyspacelen_check,
16
+ )
17
+
18
+ from redisbench_admin.profilers.profilers_local import (
19
+ local_profilers_platform_checks,
20
+ profilers_start_if_required,
21
+ profilers_stop_if_required,
22
+ )
23
+
24
+ from redisbench_admin.profilers.profilers_local import (
25
+ local_profilers_platform_checks,
26
+ profilers_start_if_required,
27
+ profilers_stop_if_required,
28
+ )
29
+ from redisbench_admin.run.common import (
30
+ get_start_time_vars,
31
+ prepare_benchmark_parameters,
32
+ )
33
+ from redisbench_admin.run.grafana import generate_artifacts_table_grafana_redis
34
+ from redisbench_admin.run.redistimeseries import (
35
+ datasink_profile_tabular_data,
36
+ timeseries_test_sucess_flow,
37
+ )
38
+ from redisbench_admin.run.run import calculate_client_tool_duration_and_check
39
+ from redisbench_admin.utils.benchmark_config import (
40
+ get_final_benchmark_config,
41
+ )
42
+ from redisbench_admin.utils.local import get_local_run_full_filename
43
+ from redisbench_admin.utils.results import post_process_benchmark_results
44
+
45
+ from redis_benchmarks_specification.__common__.env import (
46
+ STREAM_KEYNAME_NEW_BUILD_EVENTS,
47
+ get_arch_specific_stream_name,
48
+ STREAM_GH_NEW_BUILD_RUNNERS_CG,
49
+ S3_BUCKET_NAME,
50
+ )
51
+ from redis_benchmarks_specification.__common__.spec import (
52
+ extract_build_variant_variations,
53
+ extract_client_cpu_limit,
54
+ extract_client_tool,
55
+ extract_client_container_image,
56
+ extract_redis_dbconfig_parameters,
57
+ )
58
+ from redis_benchmarks_specification.__self_contained_coordinator__.artifacts import (
59
+ restore_build_artifacts_from_test_details,
60
+ )
61
+ from redis_benchmarks_specification.__self_contained_coordinator__.build_info import (
62
+ extract_build_info_from_streamdata,
63
+ )
64
+ from redis_benchmarks_specification.__self_contained_coordinator__.clients import (
65
+ prepare_memtier_benchmark_parameters,
66
+ prepare_vector_db_benchmark_parameters,
67
+ )
68
+ from redis_benchmarks_specification.__self_contained_coordinator__.cpuset import (
69
+ extract_db_cpu_limit,
70
+ generate_cpuset_cpus,
71
+ )
72
+ from redis_benchmarks_specification.__self_contained_coordinator__.docker import (
73
+ spin_docker_standalone_redis,
74
+ teardown_containers,
75
+ )
76
+ from redis_benchmarks_specification.__self_contained_coordinator__.prepopulation import (
77
+ data_prepopulation_step,
78
+ )
79
+
80
+
81
+ def build_runners_consumer_group_create(conn, running_platform, arch="amd64", id="$"):
82
+ consumer_group_name = get_runners_consumer_group_name(running_platform)
83
+ arch_specific_stream = get_arch_specific_stream_name(arch)
84
+ logging.info("Will use consumer group named {}.".format(consumer_group_name))
85
+ logging.info(
86
+ "Will read from architecture-specific stream: {}.".format(arch_specific_stream)
87
+ )
88
+ try:
89
+ conn.xgroup_create(
90
+ arch_specific_stream,
91
+ consumer_group_name,
92
+ mkstream=True,
93
+ id=id,
94
+ )
95
+ logging.info(
96
+ "Created consumer group named {} to distribute work.".format(
97
+ consumer_group_name
98
+ )
99
+ )
100
+ except redis.exceptions.ResponseError:
101
+ logging.info(
102
+ "Consumer group named {} already existed.".format(consumer_group_name)
103
+ )
104
+
105
+
106
+ def get_runners_consumer_group_name(running_platform):
107
+ consumer_group_name = "{}-{}".format(
108
+ STREAM_GH_NEW_BUILD_RUNNERS_CG, running_platform
109
+ )
110
+ return consumer_group_name
111
+
112
+
113
+ def clear_pending_messages_for_consumer(
114
+ conn, running_platform, consumer_pos, arch="amd64"
115
+ ):
116
+ """Clear all pending messages for a specific consumer on startup"""
117
+ consumer_group_name = get_runners_consumer_group_name(running_platform)
118
+ consumer_name = "{}-self-contained-proc#{}".format(
119
+ consumer_group_name, consumer_pos
120
+ )
121
+ arch_specific_stream = get_arch_specific_stream_name(arch)
122
+ logging.info(
123
+ f"Clearing pending messages from architecture-specific stream: {arch_specific_stream}"
124
+ )
125
+
126
+ try:
127
+ # Get pending messages for this specific consumer
128
+ pending_info = conn.xpending_range(
129
+ arch_specific_stream,
130
+ consumer_group_name,
131
+ min="-",
132
+ max="+",
133
+ count=1000, # Get up to 1000 pending messages
134
+ consumername=consumer_name,
135
+ )
136
+
137
+ if pending_info:
138
+ message_ids = [msg["message_id"] for msg in pending_info]
139
+ logging.info(
140
+ f"Found {len(message_ids)} pending messages for consumer {consumer_name}. Clearing them..."
141
+ )
142
+
143
+ # Acknowledge all pending messages to clear them
144
+ ack_count = conn.xack(
145
+ arch_specific_stream, consumer_group_name, *message_ids
146
+ )
147
+
148
+ logging.info(
149
+ f"Successfully cleared {ack_count} pending messages for consumer {consumer_name}"
150
+ )
151
+ else:
152
+ logging.info(f"No pending messages found for consumer {consumer_name}")
153
+
154
+ except redis.exceptions.ResponseError as e:
155
+ if "NOGROUP" in str(e):
156
+ logging.info(f"Consumer group {consumer_group_name} does not exist yet")
157
+ else:
158
+ logging.warning(f"Error clearing pending messages: {e}")
159
+ except Exception as e:
160
+ logging.error(f"Unexpected error clearing pending messages: {e}")
161
+
162
+
163
+ def reset_consumer_group_to_latest(conn, running_platform, arch="amd64"):
164
+ """Reset the consumer group position to only read new messages (skip old ones)"""
165
+ consumer_group_name = get_runners_consumer_group_name(running_platform)
166
+ arch_specific_stream = get_arch_specific_stream_name(arch)
167
+ logging.info(
168
+ f"Resetting consumer group position for architecture-specific stream: {arch_specific_stream}"
169
+ )
170
+
171
+ try:
172
+ # Set the consumer group position to '$' (latest) to skip all existing messages
173
+ conn.xgroup_setid(arch_specific_stream, consumer_group_name, id="$")
174
+ logging.info(
175
+ f"Reset consumer group {consumer_group_name} position to latest on stream {arch_specific_stream} - will only process new messages"
176
+ )
177
+
178
+ except redis.exceptions.ResponseError as e:
179
+ if "NOGROUP" in str(e):
180
+ logging.info(f"Consumer group {consumer_group_name} does not exist yet")
181
+ else:
182
+ logging.warning(f"Error resetting consumer group position: {e}")
183
+ except Exception as e:
184
+ logging.error(f"Unexpected error resetting consumer group position: {e}")
185
+
186
+
187
+ def process_self_contained_coordinator_stream(
188
+ conn,
189
+ datasink_push_results_redistimeseries,
190
+ docker_client,
191
+ home,
192
+ newTestInfo,
193
+ datasink_conn,
194
+ testsuite_spec_files,
195
+ topologies_map,
196
+ running_platform,
197
+ profilers_enabled=False,
198
+ profilers_list=[],
199
+ grafana_profile_dashboard="",
200
+ cpuset_start_pos=0,
201
+ redis_proc_start_port=6379,
202
+ docker_air_gap=False,
203
+ verbose=False,
204
+ run_tests_with_dataset=False,
205
+ ):
206
+ # Use a default password for coordinator Redis instances
207
+ redis_password = "redis_coordinator_password_2024"
208
+ stream_id = "n/a"
209
+ overall_result = False
210
+ total_test_suite_runs = 0
211
+ full_result_path = None
212
+ try:
213
+ stream_id, testDetails = newTestInfo[0][1][0]
214
+ stream_id = stream_id.decode()
215
+ logging.info("Received work . Stream id {}.".format(stream_id))
216
+
217
+ if b"git_hash" in testDetails:
218
+ (
219
+ build_variant_name,
220
+ metadata,
221
+ build_artifacts,
222
+ git_hash,
223
+ git_branch,
224
+ git_version,
225
+ run_image,
226
+ use_git_timestamp,
227
+ git_timestamp_ms,
228
+ _,
229
+ ) = extract_build_info_from_streamdata(testDetails)
230
+
231
+ overall_result = True
232
+ profiler_dashboard_links = []
233
+ if docker_air_gap:
234
+ airgap_key = "docker:air-gap:{}".format(run_image)
235
+ logging.info(
236
+ "Restoring docker image: {} from {}".format(run_image, airgap_key)
237
+ )
238
+ if conn.exists(airgap_key):
239
+ airgap_docker_image_bin = conn.get(airgap_key)
240
+ images_loaded = docker_client.images.load(airgap_docker_image_bin)
241
+ logging.info("Successfully loaded images {}".format(images_loaded))
242
+ else:
243
+ logging.error(
244
+ "docker image {} was not present on key {}".format(
245
+ run_image, airgap_key
246
+ )
247
+ )
248
+
249
+ for test_file in testsuite_spec_files:
250
+ redis_containers = []
251
+ client_containers = []
252
+
253
+ with open(test_file, "r") as stream:
254
+ result, benchmark_config, test_name = get_final_benchmark_config(
255
+ None, None, stream, ""
256
+ )
257
+ if result is False:
258
+ logging.error(
259
+ "Skipping {} given there were errors while calling get_final_benchmark_config()".format(
260
+ test_file
261
+ )
262
+ )
263
+ continue
264
+ (
265
+ _,
266
+ _,
267
+ redis_configuration_parameters,
268
+ _,
269
+ _,
270
+ ) = extract_redis_dbconfig_parameters(benchmark_config, "dbconfig")
271
+ build_variants = extract_build_variant_variations(benchmark_config)
272
+ if build_variants is not None:
273
+ logging.info("Detected build variant filter")
274
+ if build_variant_name not in build_variants:
275
+ logging.error(
276
+ "Skipping {} given it's not part of build-variants for this test-suite {}".format(
277
+ build_variant_name, build_variants
278
+ )
279
+ )
280
+ continue
281
+ else:
282
+ logging.error(
283
+ "Running build variant {} given it's present on the build-variants spec {}".format(
284
+ build_variant_name, build_variants
285
+ )
286
+ )
287
+ for topology_spec_name in benchmark_config["redis-topologies"]:
288
+ test_result = False
289
+ try:
290
+ current_cpu_pos = cpuset_start_pos
291
+ ceil_db_cpu_limit = extract_db_cpu_limit(
292
+ topologies_map, topology_spec_name
293
+ )
294
+
295
+ temporary_dir_client = tempfile.mkdtemp(dir=home)
296
+ temporary_dir = tempfile.mkdtemp(dir=home)
297
+ logging.info(
298
+ "Using local temporary dir to persist redis build artifacts. Path: {}".format(
299
+ temporary_dir
300
+ )
301
+ )
302
+ tf_github_org = "redis"
303
+ tf_github_repo = "redis"
304
+ setup_name = topology_spec_name
305
+ tf_triggering_env = "ci"
306
+ github_actor = "{}-{}".format(
307
+ tf_triggering_env, running_platform
308
+ )
309
+ restore_build_artifacts_from_test_details(
310
+ build_artifacts, conn, temporary_dir, testDetails
311
+ )
312
+
313
+ if "dataset" in benchmark_config["dbconfig"]:
314
+ if run_tests_with_dataset is False:
315
+ logging.warning(
316
+ "Skipping test {} giving it implies dataset preload".format(
317
+ test_name
318
+ )
319
+ )
320
+ continue
321
+ logging.info("Checking if there is a dataset requirement")
322
+ (
323
+ dataset,
324
+ dataset_name,
325
+ _,
326
+ _,
327
+ ) = check_dataset_local_requirements(
328
+ benchmark_config,
329
+ temporary_dir,
330
+ None,
331
+ "./datasets",
332
+ "dbconfig",
333
+ 1,
334
+ False,
335
+ )
336
+
337
+ dso = "redis-server"
338
+ profilers_artifacts_matrix = []
339
+
340
+ collection_summary_str = ""
341
+ if profilers_enabled:
342
+ collection_summary_str = (
343
+ local_profilers_platform_checks(
344
+ dso,
345
+ github_actor,
346
+ git_branch,
347
+ tf_github_repo,
348
+ git_hash,
349
+ )
350
+ )
351
+ logging.info(
352
+ "Using the following collection summary string for profiler description: {}".format(
353
+ collection_summary_str
354
+ )
355
+ )
356
+ if setup_name == "oss-standalone":
357
+ current_cpu_pos = spin_docker_standalone_redis(
358
+ ceil_db_cpu_limit,
359
+ current_cpu_pos,
360
+ docker_client,
361
+ redis_configuration_parameters,
362
+ redis_containers,
363
+ redis_proc_start_port,
364
+ run_image,
365
+ temporary_dir,
366
+ redis_password,
367
+ )
368
+ else:
369
+ shard_count = 1
370
+ start_port = redis_proc_start_port
371
+ dbdir_folder = None
372
+ server_private_ip = "127.0.0.1"
373
+ for master_shard_id in range(1, shard_count + 1):
374
+ shard_port = master_shard_id + start_port - 1
375
+
376
+ (
377
+ command,
378
+ logfile,
379
+ ) = generate_cluster_redis_server_args(
380
+ "redis-server",
381
+ dbdir_folder,
382
+ None,
383
+ server_private_ip,
384
+ shard_port,
385
+ redis_configuration_parameters,
386
+ "yes",
387
+ None,
388
+ "",
389
+ "yes",
390
+ False,
391
+ )
392
+ logging.error(
393
+ "Remote primary shard {} command: {}".format(
394
+ master_shard_id, " ".join(command)
395
+ )
396
+ )
397
+
398
+ r = redis.StrictRedis(
399
+ port=redis_proc_start_port, password=redis_password
400
+ )
401
+ r.ping()
402
+ redis_pids = []
403
+ redis_info = r.info()
404
+ first_redis_pid = redis_info.get("process_id")
405
+ if first_redis_pid is not None:
406
+ redis_pids.append(first_redis_pid)
407
+ else:
408
+ logging.warning(
409
+ "Redis process_id not found in INFO command"
410
+ )
411
+ ceil_client_cpu_limit = extract_client_cpu_limit(
412
+ benchmark_config
413
+ )
414
+ client_cpuset_cpus, current_cpu_pos = generate_cpuset_cpus(
415
+ ceil_client_cpu_limit, current_cpu_pos
416
+ )
417
+ client_mnt_point = "/mnt/client/"
418
+ benchmark_tool_workdir = client_mnt_point
419
+
420
+ logging.info(
421
+ "Checking if there is a data preload_tool requirement"
422
+ )
423
+ if "preload_tool" in benchmark_config["dbconfig"]:
424
+ data_prepopulation_step(
425
+ benchmark_config,
426
+ benchmark_tool_workdir,
427
+ client_cpuset_cpus,
428
+ docker_client,
429
+ git_hash,
430
+ redis_proc_start_port,
431
+ temporary_dir,
432
+ test_name,
433
+ redis_password,
434
+ )
435
+
436
+ logging.info(
437
+ "Checking if there is a keyspace check being enforced"
438
+ )
439
+ dbconfig_keyspacelen_check(
440
+ benchmark_config,
441
+ [r],
442
+ )
443
+
444
+ benchmark_tool = extract_client_tool(benchmark_config)
445
+ # backwards compatible
446
+ if benchmark_tool is None:
447
+ benchmark_tool = "redis-benchmark"
448
+ if benchmark_tool == "vector_db_benchmark":
449
+ full_benchmark_path = "python /code/run.py"
450
+ else:
451
+ full_benchmark_path = "/usr/local/bin/{}".format(
452
+ benchmark_tool
453
+ )
454
+
455
+ # setup the benchmark
456
+ (
457
+ start_time,
458
+ start_time_ms,
459
+ start_time_str,
460
+ ) = get_start_time_vars()
461
+ local_benchmark_output_filename = (
462
+ get_local_run_full_filename(
463
+ start_time_str,
464
+ git_hash,
465
+ test_name,
466
+ topology_spec_name,
467
+ )
468
+ )
469
+ logging.info(
470
+ "Will store benchmark json output to local file {}".format(
471
+ local_benchmark_output_filename
472
+ )
473
+ )
474
+ if "memtier_benchmark" in benchmark_tool:
475
+ (
476
+ _,
477
+ benchmark_command_str,
478
+ ) = prepare_memtier_benchmark_parameters(
479
+ benchmark_config["clientconfig"],
480
+ full_benchmark_path,
481
+ redis_proc_start_port,
482
+ "localhost",
483
+ local_benchmark_output_filename,
484
+ benchmark_tool_workdir,
485
+ redis_password,
486
+ )
487
+ elif "vector_db_benchmark" in benchmark_tool:
488
+ (
489
+ _,
490
+ benchmark_command_str,
491
+ ) = prepare_vector_db_benchmark_parameters(
492
+ benchmark_config["clientconfig"],
493
+ full_benchmark_path,
494
+ redis_proc_start_port,
495
+ "localhost",
496
+ )
497
+ else:
498
+ # prepare the benchmark command
499
+ (
500
+ benchmark_command,
501
+ benchmark_command_str,
502
+ ) = prepare_benchmark_parameters(
503
+ benchmark_config,
504
+ full_benchmark_path,
505
+ redis_proc_start_port,
506
+ "localhost",
507
+ local_benchmark_output_filename,
508
+ False,
509
+ benchmark_tool_workdir,
510
+ False,
511
+ )
512
+
513
+ client_container_image = extract_client_container_image(
514
+ benchmark_config
515
+ )
516
+ profiler_call_graph_mode = "dwarf"
517
+ profiler_frequency = 99
518
+ # start the profile
519
+ (
520
+ profiler_name,
521
+ profilers_map,
522
+ ) = profilers_start_if_required(
523
+ profilers_enabled,
524
+ profilers_list,
525
+ redis_pids,
526
+ setup_name,
527
+ start_time_str,
528
+ test_name,
529
+ profiler_frequency,
530
+ profiler_call_graph_mode,
531
+ )
532
+
533
+ logging.info(
534
+ "Using docker image {} as benchmark client image (cpuset={}) with the following args: {}".format(
535
+ client_container_image,
536
+ client_cpuset_cpus,
537
+ benchmark_command_str,
538
+ )
539
+ )
540
+ # run the benchmark
541
+ benchmark_start_time = datetime.datetime.now()
542
+
543
+ client_container_stdout = docker_client.containers.run(
544
+ image=client_container_image,
545
+ volumes={
546
+ temporary_dir_client: {
547
+ "bind": client_mnt_point,
548
+ "mode": "rw",
549
+ },
550
+ },
551
+ auto_remove=True,
552
+ privileged=True,
553
+ working_dir=benchmark_tool_workdir,
554
+ command=benchmark_command_str,
555
+ network_mode="host",
556
+ detach=False,
557
+ cpuset_cpus=client_cpuset_cpus,
558
+ )
559
+
560
+ benchmark_end_time = datetime.datetime.now()
561
+ benchmark_duration_seconds = (
562
+ calculate_client_tool_duration_and_check(
563
+ benchmark_end_time, benchmark_start_time
564
+ )
565
+ )
566
+ if verbose:
567
+ logging.info(
568
+ "output {}".format(client_container_stdout)
569
+ )
570
+ r.shutdown(save=False)
571
+
572
+ (
573
+ _,
574
+ overall_tabular_data_map,
575
+ ) = profilers_stop_if_required(
576
+ datasink_push_results_redistimeseries,
577
+ benchmark_duration_seconds,
578
+ collection_summary_str,
579
+ dso,
580
+ tf_github_org,
581
+ tf_github_repo,
582
+ profiler_name,
583
+ profilers_artifacts_matrix,
584
+ profilers_enabled,
585
+ profilers_map,
586
+ redis_pids,
587
+ S3_BUCKET_NAME,
588
+ test_name,
589
+ )
590
+ if (
591
+ profilers_enabled
592
+ and datasink_push_results_redistimeseries
593
+ ):
594
+ datasink_profile_tabular_data(
595
+ git_branch,
596
+ tf_github_org,
597
+ tf_github_repo,
598
+ git_hash,
599
+ overall_tabular_data_map,
600
+ conn,
601
+ setup_name,
602
+ start_time_ms,
603
+ start_time_str,
604
+ test_name,
605
+ tf_triggering_env,
606
+ )
607
+ if len(profilers_artifacts_matrix) == 0:
608
+ logging.error("No profiler artifact was retrieved")
609
+ else:
610
+ profilers_artifacts = []
611
+ for line in profilers_artifacts_matrix:
612
+ artifact_name = line[2]
613
+ s3_link = line[4]
614
+ profilers_artifacts.append(
615
+ {
616
+ "artifact_name": artifact_name,
617
+ "s3_link": s3_link,
618
+ }
619
+ )
620
+ https_link = generate_artifacts_table_grafana_redis(
621
+ datasink_push_results_redistimeseries,
622
+ grafana_profile_dashboard,
623
+ profilers_artifacts,
624
+ datasink_conn,
625
+ setup_name,
626
+ start_time_ms,
627
+ start_time_str,
628
+ test_name,
629
+ tf_github_org,
630
+ tf_github_repo,
631
+ git_hash,
632
+ git_branch,
633
+ )
634
+ profiler_dashboard_links.append(
635
+ [
636
+ setup_name,
637
+ test_name,
638
+ " {} ".format(https_link),
639
+ ]
640
+ )
641
+ logging.info(
642
+ "Published new profile info for this testcase. Access it via: {}".format(
643
+ https_link
644
+ )
645
+ )
646
+
647
+ datapoint_time_ms = start_time_ms
648
+ if (
649
+ use_git_timestamp is True
650
+ and git_timestamp_ms is not None
651
+ ):
652
+ datapoint_time_ms = git_timestamp_ms
653
+ post_process_benchmark_results(
654
+ benchmark_tool,
655
+ local_benchmark_output_filename,
656
+ datapoint_time_ms,
657
+ start_time_str,
658
+ client_container_stdout,
659
+ None,
660
+ )
661
+ full_result_path = local_benchmark_output_filename
662
+ if "memtier_benchmark" in benchmark_tool:
663
+ full_result_path = "{}/{}".format(
664
+ temporary_dir_client,
665
+ local_benchmark_output_filename,
666
+ )
667
+ logging.critical(
668
+ "Reading results json from {}".format(full_result_path)
669
+ )
670
+
671
+ with open(
672
+ full_result_path,
673
+ "r",
674
+ ) as json_file:
675
+ results_dict = json.load(json_file)
676
+ dataset_load_duration_seconds = 0
677
+
678
+ logging.info(
679
+ "Using datapoint_time_ms: {}".format(datapoint_time_ms)
680
+ )
681
+
682
+ timeseries_test_sucess_flow(
683
+ datasink_push_results_redistimeseries,
684
+ git_version,
685
+ benchmark_config,
686
+ benchmark_duration_seconds,
687
+ dataset_load_duration_seconds,
688
+ None,
689
+ topology_spec_name,
690
+ setup_name,
691
+ None,
692
+ results_dict,
693
+ datasink_conn,
694
+ datapoint_time_ms,
695
+ test_name,
696
+ git_branch,
697
+ tf_github_org,
698
+ tf_github_repo,
699
+ tf_triggering_env,
700
+ metadata,
701
+ build_variant_name,
702
+ running_platform,
703
+ None,
704
+ None,
705
+ disable_target_tables=True,
706
+ )
707
+ test_result = True
708
+ total_test_suite_runs = total_test_suite_runs + 1
709
+
710
+ except:
711
+ logging.critical(
712
+ "Some unexpected exception was caught "
713
+ "during local work. Failing test...."
714
+ )
715
+ logging.critical(sys.exc_info()[0])
716
+ print("-" * 60)
717
+ traceback.print_exc(file=sys.stdout)
718
+ print("-" * 60)
719
+ test_result = False
720
+ # tear-down
721
+ logging.info("Tearing down setup")
722
+ teardown_containers(redis_containers, "DB")
723
+ teardown_containers(client_containers, "CLIENT")
724
+ shutil.rmtree(temporary_dir, ignore_errors=True)
725
+
726
+ overall_result &= test_result
727
+
728
+ else:
729
+ logging.error("Missing commit information within received message.")
730
+ except:
731
+ logging.critical(
732
+ "Some unexpected exception was caught "
733
+ "during local work on stream {}. Failing test....".format(stream_id)
734
+ )
735
+ logging.critical(sys.exc_info()[0])
736
+ print("-" * 60)
737
+ traceback.print_exc(file=sys.stdout)
738
+ print("-" * 60)
739
+ overall_result = False
740
+ return stream_id, overall_result, total_test_suite_runs