redis-benchmarks-specification 0.1.102__py3-none-any.whl → 0.1.150__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of redis-benchmarks-specification might be problematic. Click here for more details.

Files changed (322) hide show
  1. redis_benchmarks_specification/__builder__/builder.py +186 -76
  2. redis_benchmarks_specification/__cli__/args.py +38 -5
  3. redis_benchmarks_specification/__cli__/cli.py +142 -8
  4. redis_benchmarks_specification/__common__/builder_schema.py +6 -1
  5. redis_benchmarks_specification/__common__/env.py +1 -1
  6. redis_benchmarks_specification/__common__/github.py +44 -39
  7. redis_benchmarks_specification/__common__/runner.py +15 -3
  8. redis_benchmarks_specification/__common__/spec.py +52 -0
  9. redis_benchmarks_specification/__common__/timeseries.py +1551 -0
  10. redis_benchmarks_specification/__compare__/args.py +28 -0
  11. redis_benchmarks_specification/__compare__/compare.py +479 -84
  12. redis_benchmarks_specification/__runner__/runner.py +21 -6
  13. redis_benchmarks_specification/__self_contained_coordinator__/args.py +0 -5
  14. redis_benchmarks_specification/__self_contained_coordinator__/artifacts.py +18 -15
  15. redis_benchmarks_specification/__self_contained_coordinator__/build_info.py +5 -3
  16. redis_benchmarks_specification/__self_contained_coordinator__/docker.py +7 -3
  17. redis_benchmarks_specification/__self_contained_coordinator__/prepopulation.py +4 -1
  18. redis_benchmarks_specification/__self_contained_coordinator__/runners.py +7 -3
  19. redis_benchmarks_specification/__self_contained_coordinator__/self_contained_coordinator.py +317 -125
  20. redis_benchmarks_specification/__spec__/cli.py +7 -7
  21. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-100Kkeys-hash-hgetall-50-fields-100B-values.yml +51 -0
  22. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-100Kkeys-load-hash-50-fields-with-1000B-values.yml +46 -0
  23. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-100Kkeys-load-hash-50-fields-with-100B-values.yml +46 -0
  24. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-100Kkeys-load-hash-50-fields-with-10B-values.yml +46 -0
  25. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-10Mkeys-load-hash-5-fields-with-100B-values-pipeline-10.yml +36 -0
  26. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-10Mkeys-load-hash-5-fields-with-100B-values.yml +36 -0
  27. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-10Mkeys-load-hash-5-fields-with-10B-values-pipeline-10.yml +36 -0
  28. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-10Mkeys-load-hash-5-fields-with-10B-values.yml +36 -0
  29. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-100B-expire-use-case.yml +45 -0
  30. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-10B-expire-use-case.yml +45 -0
  31. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-1KiB-expire-use-case.yml +45 -0
  32. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-4KiB-expire-use-case.yml +45 -0
  33. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-bitmap-getbit-pipeline-10.yml +41 -0
  34. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-generic-exists-pipeline-10.yml +40 -0
  35. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-generic-expire-pipeline-10.yml +38 -0
  36. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-generic-expireat-pipeline-10.yml +39 -0
  37. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-generic-pexpire-pipeline-10.yml +38 -0
  38. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-generic-scan-pipeline-10.yml +37 -0
  39. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-generic-touch-pipeline-10.yml +38 -0
  40. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-generic-ttl-pipeline-10.yml +37 -0
  41. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-hash-hexists.yml +41 -0
  42. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-hash-hget-hgetall-hkeys-hvals-with-100B-values.yml +46 -0
  43. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-hash-hgetall-50-fields-10B-values.yml +51 -0
  44. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-hash-hincrby.yml +40 -0
  45. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-hash-hmget-5-fields-with-100B-values-pipeline-10.yml +42 -0
  46. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-hash-transactions-multi-exec-pipeline-20.yml +45 -0
  47. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-list-lpop-rpop-with-100B-values.yml +41 -0
  48. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-list-lpop-rpop-with-10B-values.yml +41 -0
  49. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-list-lpop-rpop-with-1KiB-values.yml +41 -0
  50. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-hash-5-fields-with-1000B-values-pipeline-10.yml +36 -0
  51. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-hash-5-fields-with-1000B-values.yml +36 -0
  52. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-hash-hmset-5-fields-with-1000B-values.yml +36 -0
  53. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-list-with-100B-values.yml +34 -0
  54. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-list-with-10B-values.yml +34 -0
  55. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-list-with-1KiB-values.yml +34 -0
  56. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-set-intset-with-100-elements-pipeline-10.yml +42 -0
  57. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-set-intset-with-100-elements.yml +42 -0
  58. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-stream-1-fields-with-100B-values-pipeline-10.yml +34 -0
  59. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-stream-1-fields-with-100B-values.yml +34 -0
  60. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-stream-5-fields-with-100B-values-pipeline-10.yml +36 -0
  61. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-stream-5-fields-with-100B-values.yml +36 -0
  62. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-string-with-100B-values-pipeline-10.yml +34 -0
  63. redis_benchmarks_specification/{test-suites/memtier_benchmark-1Mkeys-load-string-with-2MB-values.yml → latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-string-with-100B-values.yml} +10 -9
  64. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-string-with-10B-values-pipeline-10.yml +34 -0
  65. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-string-with-10B-values.yml +34 -0
  66. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-string-with-1KiB-values.yml +34 -0
  67. redis_benchmarks_specification/{test-suites/memtier_benchmark-1Mkeys-load-string-with-200KiB-values.yml → latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-string-with-20KiB-values.yml} +10 -9
  68. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-zset-with-10-elements-double-score.yml +36 -0
  69. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-load-zset-with-10-elements-int-score.yml +35 -0
  70. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-append-1-100B-pipeline-10.yml +40 -0
  71. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-append-1-100B.yml +39 -0
  72. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-decr.yml +39 -0
  73. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-get-100B-pipeline-10.yml +38 -0
  74. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-get-100B.yml +37 -0
  75. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-get-10B-pipeline-10.yml +38 -0
  76. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-get-10B.yml +37 -0
  77. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-get-1KiB-pipeline-10.yml +38 -0
  78. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-get-1KiB.yml +37 -0
  79. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-get-20KiB.yml +37 -0
  80. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-incrby-pipeline-10.yml +32 -0
  81. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-incrby.yml +31 -0
  82. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-incrbyfloat-pipeline-10.yml +32 -0
  83. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-incrbyfloat.yml +31 -0
  84. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-mget-1KiB.yml +38 -0
  85. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-setex-100B-pipeline-10.yml +38 -0
  86. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-setrange-100B-pipeline-10.yml +39 -0
  87. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1Mkeys-string-setrange-100B.yml +38 -0
  88. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-geo-2-elements-geopos.yml +35 -0
  89. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-geo-2-elements-geosearch-fromlonlat-withcoord.yml +38 -0
  90. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-geo-60M-elements-geodist-pipeline-10.yml +36 -0
  91. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-geo-60M-elements-geodist.yml +35 -0
  92. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-geo-60M-elements-geohash-pipeline-10.yml +36 -0
  93. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-geo-60M-elements-geohash.yml +35 -0
  94. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-geo-60M-elements-geopos-pipeline-10.yml +36 -0
  95. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-geo-60M-elements-geopos.yml +35 -0
  96. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-geo-60M-elements-geosearch-fromlonlat-bybox.yml +36 -0
  97. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-geo-60M-elements-geosearch-fromlonlat-pipeline-10.yml +36 -0
  98. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-geo-60M-elements-geosearch-fromlonlat.yml +36 -0
  99. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-hash-hscan-50-fields-10B-values.yml +50 -0
  100. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-list-10-elements-lrange-all-elements-pipeline-10.yml +37 -0
  101. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-list-10-elements-lrange-all-elements.yml +37 -0
  102. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-list-100-elements-lrange-all-elements-pipeline-10.yml +52 -0
  103. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-list-100-elements-lrange-all-elements.yml +52 -0
  104. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-list-10K-elements-lindex-integer.yml +40 -0
  105. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-list-10K-elements-lindex-string.yml +40 -0
  106. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-list-1K-elements-lrange-all-elements-pipeline-10.yml +202 -0
  107. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-list-1K-elements-lrange-all-elements.yml +202 -0
  108. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-pfadd-4KB-values-pipeline-10.yml +33 -0
  109. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-set-10-elements-smembers-pipeline-10.yml +37 -0
  110. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-set-10-elements-smembers.yml +36 -0
  111. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-set-10-elements-smismember.yml +36 -0
  112. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-set-100-elements-sismember-is-a-member.yml +52 -0
  113. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-set-100-elements-sismember-not-a-member.yml +52 -0
  114. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-set-100-elements-smembers.yml +50 -0
  115. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-set-100-elements-smismember.yml +53 -0
  116. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-set-100-elements-sscan.yml +50 -0
  117. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-set-10M-elements-sismember-50pct-chance.yml +39 -0
  118. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-set-1K-elements-smembers.yml +200 -0
  119. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-set-1M-elements-sismember-50pct-chance.yml +39 -0
  120. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-set-200K-elements-sadd-constant.yml +38 -0
  121. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-set-2M-elements-sadd-increasing.yml +33 -0
  122. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-zincrby-1M-elements-pipeline-1.yml +40 -0
  123. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-zrank-1M-elements-pipeline-1.yml +40 -0
  124. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-zrem-5M-elements-pipeline-1.yml +47 -0
  125. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-zrevrangebyscore-256K-elements-pipeline-1.yml +40 -0
  126. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-zrevrank-1M-elements-pipeline-1.yml +40 -0
  127. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-zset-10-elements-zrange-all-elements-long-scores.yml +39 -0
  128. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-zset-10-elements-zrange-all-elements.yml +38 -0
  129. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-zset-100-elements-zrange-all-elements.yml +64 -0
  130. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-zset-100-elements-zrangebyscore-all-elements-long-scores.yml +64 -0
  131. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-zset-100-elements-zrangebyscore-all-elements.yml +64 -0
  132. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-zset-100-elements-zscan.yml +63 -0
  133. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-zset-1M-elements-zcard-pipeline-10.yml +39 -0
  134. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-zset-1M-elements-zrevrange-5-elements.yml +40 -0
  135. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-1key-zset-1M-elements-zscore-pipeline-10.yml +39 -0
  136. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-2keys-lua-eval-hset-expire.yml +37 -0
  137. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-2keys-lua-evalsha-hset-expire.yml +42 -0
  138. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-2keys-set-10-100-elements-sdiff.yml +55 -0
  139. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-2keys-set-10-100-elements-sinter.yml +56 -0
  140. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-2keys-set-10-100-elements-sunion.yml +56 -0
  141. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-2keys-stream-5-entries-xread-all-entries-pipeline-10.yml +45 -0
  142. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-2keys-stream-5-entries-xread-all-entries.yml +45 -0
  143. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-3Mkeys-load-string-with-512B-values.yml +41 -0
  144. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-10000_qps-memtier_benchmark-connection-hello.yml +32 -0
  145. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-1000_qps-memtier_benchmark-10Kkeys-load-hash-50-fields-with-10000B-values.yml +46 -0
  146. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-1000_qps-memtier_benchmark-1Mkeys-load-zset-listpack-with-100-elements-double-score.yml +92 -0
  147. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-1000_qps-memtier_benchmark-1key-100M-bits-bitmap-bitcount.yml +43 -0
  148. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-1000_qps-memtier_benchmark-1key-list-10K-elements-linsert-lrem-integer.yml +43 -0
  149. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-1000_qps-memtier_benchmark-1key-list-10K-elements-linsert-lrem-string.yml +44 -0
  150. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-1000_qps-memtier_benchmark-1key-list-10K-elements-lpos-integer.yml +40 -0
  151. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-1000_qps-memtier_benchmark-1key-list-10K-elements-lpos-string.yml +40 -0
  152. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-1000_qps-memtier_benchmark-1key-list-2K-elements-quicklist-lrange-all-elements-longs.yml +259 -0
  153. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-1000_qps-memtier_benchmark-1key-zset-1K-elements-zrange-all-elements.yml +321 -0
  154. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-1000_qps-memtier_benchmark-2keys-zset-300-elements-skiplist-encoded-zunion.yml +433 -0
  155. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-1000_qps-memtier_benchmark-2keys-zset-300-elements-skiplist-encoded-zunionstore.yml +433 -0
  156. redis_benchmarks_specification/latency-test-suites/latency-rate-limited-100_qps-memtier_benchmark-1key-1Billion-bits-bitmap-bitcount.yml +44 -0
  157. redis_benchmarks_specification/setups/topologies/topologies.yml +65 -0
  158. redis_benchmarks_specification/test-suites/defaults.yml +5 -1
  159. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-hash-hgetall-50-fields-100B-values.yml +34 -0
  160. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-20-fields-with-1B-values-pipeline-30.yml +30 -0
  161. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-1000B-values.yml +30 -0
  162. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-100B-values.yml +30 -0
  163. redis_benchmarks_specification/test-suites/memtier_benchmark-100Kkeys-load-hash-50-fields-with-10B-values.yml +30 -0
  164. redis_benchmarks_specification/test-suites/memtier_benchmark-10Kkeys-load-hash-50-fields-with-10000B-values.yml +30 -0
  165. redis_benchmarks_specification/test-suites/memtier_benchmark-10Kkeys-load-list-with-10B-values-pipeline-50.yml +30 -0
  166. redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-load-hash-5-fields-with-100B-values-pipeline-10.yml +1 -0
  167. redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-load-hash-5-fields-with-100B-values.yml +1 -0
  168. redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-load-hash-5-fields-with-10B-values-pipeline-10.yml +1 -0
  169. redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-load-hash-5-fields-with-10B-values.yml +1 -0
  170. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-100B-expire-use-case.yml +1 -0
  171. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-10B-expire-use-case.yml +1 -0
  172. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-1KiB-expire-use-case.yml +1 -0
  173. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-4KiB-expire-use-case.yml +1 -0
  174. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-bitmap-getbit-pipeline-10.yml +1 -0
  175. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-exists-pipeline-10.yml +1 -0
  176. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-expire-pipeline-10.yml +1 -0
  177. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-expireat-pipeline-10.yml +1 -0
  178. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-pexpire-pipeline-10.yml +1 -0
  179. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-scan-pipeline-10.yml +1 -0
  180. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-touch-pipeline-10.yml +1 -0
  181. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-generic-ttl-pipeline-10.yml +1 -0
  182. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hexists.yml +1 -0
  183. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hget-hgetall-hkeys-hvals-with-100B-values.yml +1 -0
  184. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hgetall-50-fields-10B-values.yml +34 -0
  185. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hincrby.yml +1 -0
  186. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-hmget-5-fields-with-100B-values-pipeline-10.yml +1 -0
  187. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-hash-transactions-multi-exec-pipeline-20.yml +1 -0
  188. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-list-lpop-rpop-with-100B-values.yml +1 -0
  189. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-list-lpop-rpop-with-10B-values.yml +1 -0
  190. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-list-lpop-rpop-with-1KiB-values.yml +1 -0
  191. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-hash-5-fields-with-1000B-values-pipeline-10.yml +1 -0
  192. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-hash-5-fields-with-1000B-values.yml +1 -0
  193. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-hash-hmset-5-fields-with-1000B-values.yml +1 -0
  194. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-list-with-100B-values.yml +1 -0
  195. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-list-with-10B-values-pipeline-10.yml +30 -0
  196. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-list-with-10B-values.yml +1 -0
  197. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-list-with-1KiB-values.yml +1 -0
  198. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-set-intset-with-100-elements-pipeline-10.yml +30 -0
  199. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-set-intset-with-100-elements.yml +30 -0
  200. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-stream-1-fields-with-100B-values-pipeline-10.yml +1 -0
  201. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-stream-1-fields-with-100B-values.yml +1 -0
  202. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-stream-5-fields-with-100B-values-pipeline-10.yml +1 -0
  203. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-stream-5-fields-with-100B-values.yml +1 -0
  204. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-100B-values-pipeline-10.yml +1 -0
  205. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-100B-values.yml +2 -5
  206. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-10B-values-pipeline-10.yml +1 -0
  207. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-10B-values.yml +1 -0
  208. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-1KiB-values.yml +1 -0
  209. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-string-with-20KiB-values.yml +2 -5
  210. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-zset-listpack-with-100-elements-double-score.yml +30 -0
  211. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-zset-with-10-elements-double-score.yml +1 -0
  212. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-load-zset-with-10-elements-int-score.yml +1 -0
  213. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-append-1-100B-pipeline-10.yml +34 -0
  214. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-append-1-100B.yml +34 -0
  215. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-decr.yml +1 -0
  216. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-100B-pipeline-10.yml +1 -0
  217. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-100B.yml +1 -0
  218. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-10B-pipeline-10.yml +3 -2
  219. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-10B.yml +1 -0
  220. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-1KiB-pipeline-10.yml +1 -0
  221. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-get-1KiB.yml +1 -0
  222. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-incrby-pipeline-10.yml +28 -0
  223. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-incrby.yml +28 -0
  224. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-incrbyfloat-pipeline-10.yml +28 -0
  225. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-incrbyfloat.yml +28 -0
  226. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-mget-1KiB.yml +1 -0
  227. redis_benchmarks_specification/test-suites/{memtier_benchmark-1Mkeys-string-get-20KiB.yml → memtier_benchmark-1Mkeys-string-set-with-ex-100B-pipeline-10.yml} +7 -7
  228. redis_benchmarks_specification/test-suites/{memtier_benchmark-1Mkeys-string-get-200KiB.yml → memtier_benchmark-1Mkeys-string-setex-100B-pipeline-10.yml} +7 -7
  229. redis_benchmarks_specification/test-suites/memtier_benchmark-1Mkeys-string-setrange-100B-pipeline-10.yml +34 -0
  230. redis_benchmarks_specification/test-suites/{memtier_benchmark-1Mkeys-string-get-2MB.yml → memtier_benchmark-1Mkeys-string-setrange-100B.yml} +7 -6
  231. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-100M-bits-bitmap-bitcount.yml +37 -0
  232. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-1Billion-bits-bitmap-bitcount.yml +37 -0
  233. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-2-elements-geopos.yml +32 -0
  234. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-2-elements-geosearch-fromlonlat-withcoord.yml +33 -0
  235. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geodist-pipeline-10.yml +1 -0
  236. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geodist.yml +1 -0
  237. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geohash-pipeline-10.yml +1 -0
  238. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geohash.yml +1 -0
  239. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geopos-pipeline-10.yml +1 -0
  240. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geopos.yml +1 -0
  241. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geosearch-fromlonlat-bybox.yml +1 -0
  242. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geosearch-fromlonlat-pipeline-10.yml +1 -0
  243. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-geo-60M-elements-geosearch-fromlonlat.yml +1 -0
  244. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-hash-1K-fields-hgetall-pipeline-10.yml +32 -0
  245. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-hash-1K-fields-hgetall.yml +32 -0
  246. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-hash-hscan-50-fields-10B-values.yml +34 -0
  247. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10-elements-lrange-all-elements-pipeline-10.yml +32 -0
  248. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10-elements-lrange-all-elements.yml +1 -0
  249. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-100-elements-int-7bit-uint-lrange-all-elements-pipeline-10.yml +32 -0
  250. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-100-elements-int-lrange-all-elements-pipeline-10.yml +32 -0
  251. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-100-elements-lrange-all-elements-pipeline-10.yml +32 -0
  252. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-100-elements-lrange-all-elements.yml +1 -0
  253. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-lindex-integer.yml +34 -0
  254. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-lindex-string-pipeline-10.yml +34 -0
  255. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-lindex-string.yml +34 -0
  256. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-linsert-lrem-integer.yml +35 -0
  257. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-linsert-lrem-string.yml +35 -0
  258. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-lpos-integer.yml +34 -0
  259. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-10K-elements-lpos-string.yml +34 -0
  260. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-1K-elements-lrange-all-elements-pipeline-10.yml +32 -0
  261. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-1K-elements-lrange-all-elements.yml +1 -0
  262. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-list-2K-elements-quicklist-lrange-all-elements-longs.yml +32 -0
  263. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-load-hash-1K-fields-with-5B-values.yml +30 -0
  264. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-pfadd-4KB-values-pipeline-10.yml +1 -0
  265. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-10-elements-smembers-pipeline-10.yml +1 -0
  266. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-10-elements-smembers.yml +1 -0
  267. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-10-elements-smismember.yml +1 -0
  268. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-100-elements-sismember-is-a-member.yml +32 -0
  269. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-100-elements-sismember-not-a-member.yml +32 -0
  270. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-100-elements-smembers.yml +1 -0
  271. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-100-elements-smismember.yml +1 -0
  272. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-100-elements-sscan.yml +32 -0
  273. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-10M-elements-sismember-50pct-chance.yml +34 -0
  274. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-1K-elements-smembers.yml +1 -0
  275. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-1M-elements-sismember-50pct-chance.yml +34 -0
  276. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-200K-elements-sadd-constant.yml +1 -0
  277. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-set-2M-elements-sadd-increasing.yml +1 -0
  278. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zincrby-1M-elements-pipeline-1.yml +1 -0
  279. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrank-1M-elements-pipeline-1.yml +1 -0
  280. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrem-5M-elements-pipeline-1.yml +1 -0
  281. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrevrangebyscore-256K-elements-pipeline-1.yml +1 -0
  282. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrevrangebyscore-256K-elements-pipeline-10.yml +34 -0
  283. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zrevrank-1M-elements-pipeline-1.yml +1 -0
  284. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-10-elements-zrange-all-elements-long-scores.yml +1 -0
  285. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-10-elements-zrange-all-elements.yml +1 -0
  286. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-100-elements-zrange-all-elements.yml +1 -0
  287. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-100-elements-zrangebyscore-all-elements-long-scores.yml +1 -0
  288. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-100-elements-zrangebyscore-all-elements.yml +1 -0
  289. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-100-elements-zscan.yml +32 -0
  290. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1K-elements-zrange-all-elements.yml +1 -0
  291. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1M-elements-zcard-pipeline-10.yml +1 -0
  292. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1M-elements-zrevrange-5-elements.yml +1 -0
  293. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1M-elements-zrevrange-withscores-5-elements-pipeline-10.yml +34 -0
  294. redis_benchmarks_specification/test-suites/memtier_benchmark-1key-zset-1M-elements-zscore-pipeline-10.yml +1 -0
  295. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-lua-eval-hset-expire.yml +1 -0
  296. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-lua-evalsha-hset-expire.yml +1 -0
  297. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-set-10-100-elements-sdiff.yml +1 -0
  298. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-set-10-100-elements-sinter.yml +1 -0
  299. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-set-10-100-elements-sunion.yml +1 -0
  300. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-stream-5-entries-xread-all-entries-pipeline-10.yml +1 -0
  301. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-stream-5-entries-xread-all-entries.yml +1 -0
  302. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-zset-300-elements-skiplist-encoded-zunion.yml +33 -0
  303. redis_benchmarks_specification/test-suites/memtier_benchmark-2keys-zset-300-elements-skiplist-encoded-zunionstore.yml +33 -0
  304. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-load-string-with-512B-values copy.yml +36 -0
  305. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-load-string-with-512B-values.yml +36 -0
  306. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-pipeline-10-2000_conns.yml +34 -0
  307. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-pipeline-10-400_conns.yml +34 -0
  308. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-get-with-1KiB-values-pipeline-10-40_conns.yml +34 -0
  309. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-pipeline-10-2000_conns.yml +34 -0
  310. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-pipeline-10-400_conns.yml +34 -0
  311. redis_benchmarks_specification/test-suites/memtier_benchmark-3Mkeys-string-mixed-20-80-with-512B-values-pipeline-10-5200_conns.yml +34 -0
  312. redis_benchmarks_specification/test-suites/memtier_benchmark-connection-hello-pipeline-10.yml +30 -0
  313. redis_benchmarks_specification/test-suites/memtier_benchmark-connection-hello.yml +30 -0
  314. redis_benchmarks_specification/test-suites/template.txt +1 -0
  315. {redis_benchmarks_specification-0.1.102.dist-info → redis_benchmarks_specification-0.1.150.dist-info}/METADATA +13 -4
  316. redis_benchmarks_specification-0.1.150.dist-info/RECORD +350 -0
  317. {redis_benchmarks_specification-0.1.102.dist-info → redis_benchmarks_specification-0.1.150.dist-info}/WHEEL +1 -1
  318. redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values-pipeline-10.yml +0 -29
  319. redis_benchmarks_specification/test-suites/memtier_benchmark-10Mkeys-load-hash-5-fields-with-1000B-values.yml +0 -29
  320. redis_benchmarks_specification-0.1.102.dist-info/RECORD +0 -157
  321. {redis_benchmarks_specification-0.1.102.dist-info → redis_benchmarks_specification-0.1.150.dist-info}/LICENSE +0 -0
  322. {redis_benchmarks_specification-0.1.102.dist-info → redis_benchmarks_specification-0.1.150.dist-info}/entry_points.txt +0 -0
@@ -16,6 +16,9 @@ import os
16
16
  from tqdm import tqdm
17
17
  import argparse
18
18
 
19
+ from io import StringIO
20
+ import sys
21
+
19
22
  from redis_benchmarks_specification.__common__.github import (
20
23
  update_comment_if_needed,
21
24
  create_new_pr_comment,
@@ -200,6 +203,8 @@ def compare_command_logic(args, project_name, project_version):
200
203
  )
201
204
  )
202
205
  baseline_branch = default_baseline_branch
206
+ if baseline_branch == "":
207
+ baseline_branch = None
203
208
  comparison_branch = args.comparison_branch
204
209
  simplify_table = args.simple_table
205
210
  print_regressions_only = args.print_regressions_only
@@ -245,7 +250,16 @@ def compare_command_logic(args, project_name, project_version):
245
250
  testname_regex = args.testname_regex
246
251
  auto_approve = args.auto_approve
247
252
  running_platform = args.running_platform
248
- grafana_base_dashboard = args.grafana_base_dashboard
253
+ baseline_target_version = args.baseline_target_version
254
+ comparison_target_version = args.comparison_target_version
255
+ baseline_target_branch = args.baseline_target_branch
256
+ comparison_target_branch = args.comparison_target_branch
257
+ baseline_github_repo = args.baseline_github_repo
258
+ comparison_github_repo = args.comparison_github_repo
259
+ baseline_github_org = args.baseline_github_org
260
+ comparison_github_org = args.comparison_github_org
261
+ baseline_hash = args.baseline_hash
262
+ comparison_hash = args.comparison_hash
249
263
 
250
264
  if running_platform is not None:
251
265
  logging.info(
@@ -270,8 +284,8 @@ def compare_command_logic(args, project_name, project_version):
270
284
  (
271
285
  detected_regressions,
272
286
  table_output,
273
- total_improvements,
274
- total_regressions,
287
+ improvements_list,
288
+ regressions_list,
275
289
  total_stable,
276
290
  total_unstable,
277
291
  total_comparison_points,
@@ -304,7 +318,21 @@ def compare_command_logic(args, project_name, project_version):
304
318
  to_ts_ms,
305
319
  use_metric_context_path,
306
320
  running_platform,
321
+ baseline_target_version,
322
+ comparison_target_version,
323
+ baseline_hash,
324
+ comparison_hash,
325
+ baseline_github_repo,
326
+ comparison_github_repo,
327
+ baseline_target_branch,
328
+ comparison_target_branch,
329
+ baseline_github_org,
330
+ comparison_github_org,
331
+ args.regression_str,
332
+ args.improvement_str,
307
333
  )
334
+ total_regressions = len(regressions_list)
335
+ total_improvements = len(improvements_list)
308
336
  prepare_regression_comment(
309
337
  auto_approve,
310
338
  baseline_branch,
@@ -331,6 +359,8 @@ def compare_command_logic(args, project_name, project_version):
331
359
  total_unstable,
332
360
  verbose,
333
361
  args.regressions_percent_lower_limit,
362
+ regressions_list,
363
+ improvements_list,
334
364
  )
335
365
  return (
336
366
  detected_regressions,
@@ -369,6 +399,8 @@ def prepare_regression_comment(
369
399
  total_unstable,
370
400
  verbose,
371
401
  regressions_percent_lower_limit,
402
+ regressions_list=[],
403
+ improvements_list=[],
372
404
  ):
373
405
  if total_comparison_points > 0:
374
406
  comment_body = "### Automated performance analysis summary\n\n"
@@ -395,10 +427,27 @@ def prepare_regression_comment(
395
427
  comparison_summary += "- Detected a total of {} improvements above the improvement water line.\n".format(
396
428
  total_improvements
397
429
  )
430
+ if len(improvements_list) > 0:
431
+ regression_values = [l[1] for l in improvements_list]
432
+ regression_df = pd.DataFrame(regression_values)
433
+ median_regression = round(float(regression_df.median().iloc[0]), 1)
434
+ max_regression = round(float(regression_df.max().iloc[0]), 1)
435
+ min_regression = round(float(regression_df.min().iloc[0]), 1)
436
+
437
+ comparison_summary += f" - Median/Common-Case improvement was {median_regression}% and ranged from [{min_regression}%,{max_regression}%].\n"
438
+
398
439
  if total_regressions > 0:
399
440
  comparison_summary += "- Detected a total of {} regressions bellow the regression water line {}.\n".format(
400
441
  total_regressions, regressions_percent_lower_limit
401
442
  )
443
+ if len(regressions_list) > 0:
444
+ regression_values = [l[1] for l in regressions_list]
445
+ regression_df = pd.DataFrame(regression_values)
446
+ median_regression = round(float(regression_df.median().iloc[0]), 1)
447
+ max_regression = round(float(regression_df.max().iloc[0]), 1)
448
+ min_regression = round(float(regression_df.min().iloc[0]), 1)
449
+
450
+ comparison_summary += f" - Median/Common-Case regression was {median_regression}% and ranged from [{min_regression}%,{max_regression}%].\n"
402
451
 
403
452
  comment_body += comparison_summary
404
453
  comment_body += "\n"
@@ -505,7 +554,7 @@ def compute_regression_table(
505
554
  tf_triggering_env,
506
555
  metric_name,
507
556
  comparison_branch,
508
- baseline_branch="master",
557
+ baseline_branch="unstable",
509
558
  baseline_tag=None,
510
559
  comparison_tag=None,
511
560
  baseline_deployment_name="oss-standalone",
@@ -527,6 +576,18 @@ def compute_regression_table(
527
576
  to_ts_ms=None,
528
577
  use_metric_context_path=None,
529
578
  running_platform=None,
579
+ baseline_target_version=None,
580
+ comparison_target_version=None,
581
+ comparison_hash=None,
582
+ baseline_hash=None,
583
+ baseline_github_repo="redis",
584
+ comparison_github_repo="redis",
585
+ baseline_target_branch=None,
586
+ comparison_target_branch=None,
587
+ baseline_github_org="redis",
588
+ comparison_github_org="redis",
589
+ regression_str="REGRESSION",
590
+ improvement_str="IMPROVEMENT",
530
591
  ):
531
592
  START_TIME_NOW_UTC, _, _ = get_start_time_vars()
532
593
  START_TIME_LAST_MONTH_UTC = START_TIME_NOW_UTC - datetime.timedelta(days=31)
@@ -550,7 +611,15 @@ def compute_regression_table(
550
611
  comparison_branch,
551
612
  baseline_tag,
552
613
  comparison_tag,
614
+ baseline_target_version,
615
+ comparison_target_version,
616
+ comparison_hash,
617
+ baseline_hash,
618
+ baseline_target_branch,
619
+ comparison_target_branch,
553
620
  )
621
+ logging.info(f"Using baseline filter {by_str_baseline}={baseline_str}")
622
+ logging.info(f"Using comparison filter {by_str_comparison}={comparison_str}")
554
623
  (
555
624
  prefix,
556
625
  testcases_setname,
@@ -583,12 +652,22 @@ def compute_regression_table(
583
652
  )
584
653
  (
585
654
  detected_regressions,
586
- table,
655
+ table_full,
656
+ table_stable,
657
+ table_unstable,
658
+ table_improvements,
659
+ table_regressions,
587
660
  total_improvements,
588
661
  total_regressions,
589
662
  total_stable,
590
663
  total_unstable,
591
664
  total_comparison_points,
665
+ regressions_list,
666
+ improvements_list,
667
+ unstable_list,
668
+ baseline_only_list,
669
+ comparison_only_list,
670
+ no_datapoints_list,
592
671
  ) = from_rts_to_regression_table(
593
672
  baseline_deployment_name,
594
673
  comparison_deployment_name,
@@ -613,58 +692,164 @@ def compute_regression_table(
613
692
  tf_triggering_env,
614
693
  verbose,
615
694
  running_platform,
695
+ baseline_github_repo,
696
+ comparison_github_repo,
697
+ baseline_github_org,
698
+ comparison_github_org,
699
+ regression_str,
700
+ improvement_str,
616
701
  )
617
702
  logging.info(
618
703
  "Printing differential analysis between {} and {}".format(
619
704
  baseline_str, comparison_str
620
705
  )
621
706
  )
622
- writer = MarkdownTableWriter(
623
- table_name="Comparison between {} and {}.\n\nTime Period from {}. (environment used: {})\n".format(
624
- baseline_str,
625
- comparison_str,
626
- from_human_str,
627
- baseline_deployment_name,
628
- ),
707
+
708
+ table_output = "# Comparison between {} and {}.\n\nTime Period from {}. (environment used: {})\n\n".format(
709
+ baseline_str,
710
+ comparison_str,
711
+ from_human_str,
712
+ baseline_deployment_name,
713
+ )
714
+
715
+ if total_unstable > 0:
716
+ old_stdout = sys.stdout
717
+ sys.stdout = mystdout = StringIO()
718
+ table_output += "#### Unstable Table\n\n"
719
+ writer_regressions = MarkdownTableWriter(
720
+ table_name="",
721
+ headers=[
722
+ "Test Case",
723
+ f"Baseline {baseline_github_org}/{baseline_github_repo} {baseline_str} (median obs. +- std.dev)",
724
+ f"Comparison {comparison_github_org}/{comparison_github_repo} {comparison_str} (median obs. +- std.dev)",
725
+ "% change ({})".format(metric_mode),
726
+ "Note",
727
+ ],
728
+ value_matrix=table_unstable,
729
+ )
730
+ writer_regressions.dump(mystdout, False)
731
+ table_output += mystdout.getvalue()
732
+ table_output += "\n\n"
733
+ test_names_str = "|".join([l[0] for l in unstable_list])
734
+ table_output += f"Unstable test regexp names: {test_names_str}\n\n"
735
+ mystdout.close()
736
+ sys.stdout = old_stdout
737
+
738
+ if total_regressions > 0:
739
+ old_stdout = sys.stdout
740
+ sys.stdout = mystdout = StringIO()
741
+ table_output += "#### Regressions Table\n\n"
742
+ writer_regressions = MarkdownTableWriter(
743
+ table_name="",
744
+ headers=[
745
+ "Test Case",
746
+ f"Baseline {baseline_github_org}/{baseline_github_repo} {baseline_str} (median obs. +- std.dev)",
747
+ f"Comparison {comparison_github_org}/{comparison_github_repo} {comparison_str} (median obs. +- std.dev)",
748
+ "% change ({})".format(metric_mode),
749
+ "Note",
750
+ ],
751
+ value_matrix=table_regressions,
752
+ )
753
+ writer_regressions.dump(mystdout, False)
754
+ table_output += mystdout.getvalue()
755
+ table_output += "\n\n"
756
+ test_names_str = "|".join([l[0] for l in regressions_list])
757
+ table_output += f"Regressions test regexp names: {test_names_str}\n\n"
758
+ mystdout.close()
759
+ sys.stdout = old_stdout
760
+
761
+ if total_improvements > 0:
762
+ old_stdout = sys.stdout
763
+ sys.stdout = mystdout = StringIO()
764
+ table_output += "#### Improvements Table\n\n"
765
+ writer_regressions = MarkdownTableWriter(
766
+ table_name="",
767
+ headers=[
768
+ "Test Case",
769
+ f"Baseline {baseline_github_org}/{baseline_github_repo} {baseline_str} (median obs. +- std.dev)",
770
+ f"Comparison {comparison_github_org}/{comparison_github_repo} {comparison_str} (median obs. +- std.dev)",
771
+ "% change ({})".format(metric_mode),
772
+ "Note",
773
+ ],
774
+ value_matrix=table_improvements,
775
+ )
776
+ writer_regressions.dump(mystdout, False)
777
+ table_output += mystdout.getvalue()
778
+ table_output += "\n\n"
779
+ test_names_str = "|".join([l[0] for l in improvements_list])
780
+ table_output += f"Improvements test regexp names: {test_names_str}\n\n"
781
+ mystdout.close()
782
+ sys.stdout = old_stdout
783
+
784
+ old_stdout = sys.stdout
785
+ sys.stdout = mystdout = StringIO()
786
+ writer_full = MarkdownTableWriter(
787
+ table_name="",
629
788
  headers=[
630
789
  "Test Case",
631
- "Baseline {} (median obs. +- std.dev)".format(baseline_str),
632
- "Comparison {} (median obs. +- std.dev)".format(comparison_str),
790
+ f"Baseline {baseline_github_org}/{baseline_github_repo} {baseline_str} (median obs. +- std.dev)",
791
+ f"Comparison {comparison_github_org}/{comparison_github_repo} {comparison_str} (median obs. +- std.dev)",
633
792
  "% change ({})".format(metric_mode),
634
793
  "Note",
635
794
  ],
636
- value_matrix=table,
795
+ value_matrix=table_full,
637
796
  )
638
- table_output = ""
639
-
640
- from io import StringIO
641
- import sys
797
+ table_output += "<details>\n <summary>Full Results table:</summary>\n\n"
642
798
 
643
- old_stdout = sys.stdout
644
- sys.stdout = mystdout = StringIO()
645
-
646
- writer.dump(mystdout, False)
799
+ writer_full.dump(mystdout, False)
647
800
 
648
801
  sys.stdout = old_stdout
649
-
650
- table_output = mystdout.getvalue()
802
+ table_output += mystdout.getvalue()
803
+ table_output += "\n</details>\n"
804
+ len_baseline_only_list = len(baseline_only_list)
805
+ if len_baseline_only_list > 0:
806
+ table_output += f"\n WARNING: There were {len_baseline_only_list} benchmarks with datapoints only on baseline.\n\n"
807
+ baseline_only_test_names_str = "|".join([l[0] for l in baseline_only_list])
808
+ table_output += (
809
+ f" Baseline only test regexp names: {baseline_only_test_names_str}\n\n"
810
+ )
811
+ len_comparison_only_list = len(comparison_only_list)
812
+ if len_comparison_only_list > 0:
813
+ table_output += f"\n WARNING: There were {len_comparison_only_list} benchmarks with datapoints only on comparison.\n\n"
814
+ comparison_only_test_names_str = "|".join([l[0] for l in comparison_only_list])
815
+ table_output += (
816
+ f" Comparison only test regexp names: {comparison_only_test_names_str}\n\n"
817
+ )
818
+ len_no_datapoints = len(no_datapoints_list)
819
+ if len_no_datapoints > 0:
820
+ table_output += f"\n WARNING: There were {len_no_datapoints} benchmarks with NO datapoints for both baseline and comparison.\n\n"
821
+ no_datapoints_test_names_str = "|".join([l[0] for l in no_datapoints_list])
822
+ table_output += (
823
+ f" NO DATAPOINTS test regexp names: {no_datapoints_test_names_str}\n\n"
824
+ )
651
825
 
652
826
  return (
653
827
  detected_regressions,
654
828
  table_output,
655
- total_improvements,
656
- total_regressions,
829
+ improvements_list,
830
+ regressions_list,
657
831
  total_stable,
658
832
  total_unstable,
659
833
  total_comparison_points,
660
834
  )
661
835
 
662
836
 
837
+ def get_by_error(name, by_str_arr):
838
+ by_string = ",".join(by_str_arr)
839
+ return f"--{name}-branch, --{name}-tag, --{name}-target-branch, --{name}-hash, and --{name}-target-version are mutually exclusive. You selected a total of {len(by_str_arr)}: {by_string}. Pick one..."
840
+
841
+
663
842
  def get_by_strings(
664
843
  baseline_branch,
665
844
  comparison_branch,
666
845
  baseline_tag,
667
846
  comparison_tag,
847
+ baseline_target_version=None,
848
+ comparison_target_version=None,
849
+ baseline_hash=None,
850
+ comparison_hash=None,
851
+ baseline_target_branch=None,
852
+ comparison_target_branch=None,
668
853
  ):
669
854
  baseline_covered = False
670
855
  comparison_covered = False
@@ -672,45 +857,112 @@ def get_by_strings(
672
857
  by_str_comparison = ""
673
858
  baseline_str = ""
674
859
  comparison_str = ""
860
+ baseline_by_arr = []
861
+ comparison_by_arr = []
862
+
863
+ ################# BASELINE BY ....
864
+
675
865
  if baseline_branch is not None:
676
- baseline_covered = True
677
866
  by_str_baseline = "branch"
867
+ baseline_covered = True
678
868
  baseline_str = baseline_branch
679
- if comparison_branch is not None:
680
- comparison_covered = True
681
- by_str_comparison = "branch"
682
- comparison_str = comparison_branch
869
+ baseline_by_arr.append(by_str_baseline)
683
870
 
684
871
  if baseline_tag is not None:
685
- if comparison_covered:
686
- logging.error(
687
- "--baseline-branch and --baseline-tag are mutually exclusive. Pick one..."
688
- )
872
+ by_str_baseline = "version"
873
+ if baseline_covered:
874
+ baseline_by_arr.append(by_str_baseline)
875
+ logging.error(get_by_error("baseline", baseline_by_arr))
689
876
  exit(1)
690
877
  baseline_covered = True
691
- by_str_baseline = "version"
692
878
  baseline_str = baseline_tag
693
879
 
880
+ if baseline_target_version is not None:
881
+ by_str_baseline = "target+version"
882
+ if baseline_covered:
883
+ baseline_by_arr.append(by_str_baseline)
884
+ logging.error(get_by_error("baseline", baseline_by_arr))
885
+ exit(1)
886
+ baseline_covered = True
887
+ baseline_str = baseline_target_version
888
+
889
+ if baseline_hash is not None:
890
+ by_str_baseline = "hash"
891
+ if baseline_covered:
892
+ baseline_by_arr.append(by_str_baseline)
893
+ logging.error(get_by_error("baseline", baseline_by_arr))
894
+ exit(1)
895
+ baseline_covered = True
896
+ baseline_str = baseline_hash
897
+ if baseline_target_branch is not None:
898
+ by_str_baseline = "target+branch"
899
+ if baseline_covered:
900
+ baseline_by_arr.append(by_str_baseline)
901
+ logging.error(get_by_error("baseline", baseline_by_arr))
902
+ exit(1)
903
+ baseline_covered = True
904
+ baseline_str = baseline_target_branch
905
+
906
+ ################# COMPARISON BY ....
907
+
908
+ if comparison_branch is not None:
909
+ by_str_comparison = "branch"
910
+ comparison_covered = True
911
+ comparison_str = comparison_branch
912
+
694
913
  if comparison_tag is not None:
695
914
  # check if we had already covered comparison
696
915
  if comparison_covered:
697
916
  logging.error(
698
- "--comparison-branch and --comparison-tag are mutually exclusive. Pick one..."
917
+ "--comparison-branch and --comparison-tag, --comparison-hash, --comparison-target-branch, and --comparison-target-table are mutually exclusive. Pick one..."
699
918
  )
700
919
  exit(1)
701
920
  comparison_covered = True
702
921
  by_str_comparison = "version"
703
922
  comparison_str = comparison_tag
923
+ if comparison_target_version is not None:
924
+ # check if we had already covered comparison
925
+ if comparison_covered:
926
+ logging.error(
927
+ "--comparison-branch, --comparison-tag, --comparison-hash, --comparison-target-branch, and --comparison-target-table are mutually exclusive. Pick one..."
928
+ )
929
+ exit(1)
930
+ comparison_covered = True
931
+ by_str_comparison = "target+version"
932
+ comparison_str = comparison_target_version
933
+
934
+ if comparison_target_branch is not None:
935
+ # check if we had already covered comparison
936
+ if comparison_covered:
937
+ logging.error(
938
+ "--comparison-branch, --comparison-tag, --comparison-hash, --comparison-target-branch, and --comparison-target-table are mutually exclusive. Pick one..."
939
+ )
940
+ exit(1)
941
+ comparison_covered = True
942
+ by_str_comparison = "target+branch"
943
+ comparison_str = comparison_target_branch
944
+
945
+ if comparison_hash is not None:
946
+ # check if we had already covered comparison
947
+ if comparison_covered:
948
+ logging.error(
949
+ "--comparison-branch, --comparison-tag, --comparison-hash, --comparison-target-branch, and --comparison-target-table are mutually exclusive. Pick one..."
950
+ )
951
+ exit(1)
952
+ comparison_covered = True
953
+ by_str_comparison = "hash"
954
+ comparison_str = comparison_hash
704
955
 
705
956
  if baseline_covered is False:
706
957
  logging.error(
707
- "You need to provider either " + "( --baseline-branch or --baseline-tag ) "
958
+ "You need to provider either "
959
+ + "( --baseline-branch, --baseline-tag, --baseline-hash, --baseline-target-branch or --baseline-target-version ) "
708
960
  )
709
961
  exit(1)
710
962
  if comparison_covered is False:
711
963
  logging.error(
712
964
  "You need to provider either "
713
- + "( --comparison-branch or --comparison-tag ) "
965
+ + "( --comparison-branch, --comparison-tag, --comparison-hash, --comparison-target-branch or --comparison-target-version ) "
714
966
  )
715
967
  exit(1)
716
968
  return baseline_str, by_str_baseline, comparison_str, by_str_comparison
@@ -740,9 +992,19 @@ def from_rts_to_regression_table(
740
992
  tf_triggering_env,
741
993
  verbose,
742
994
  running_platform=None,
995
+ baseline_github_repo="redis",
996
+ comparison_github_repo="redis",
997
+ baseline_github_org="redis",
998
+ comparison_github_org="redis",
999
+ regression_str="REGRESSION",
1000
+ improvement_str="IMPROVEMENT",
743
1001
  ):
744
1002
  print_all = print_regressions_only is False and print_improvements_only is False
745
- table = []
1003
+ table_full = []
1004
+ table_unstable = []
1005
+ table_stable = []
1006
+ table_regressions = []
1007
+ table_improvements = []
746
1008
  detected_regressions = []
747
1009
  total_improvements = 0
748
1010
  total_stable = 0
@@ -751,7 +1013,22 @@ def from_rts_to_regression_table(
751
1013
  total_comparison_points = 0
752
1014
  noise_waterline = 3
753
1015
  progress = tqdm(unit="benchmark time-series", total=len(test_names))
1016
+ regressions_list = []
1017
+ improvements_list = []
1018
+ unstable_list = []
1019
+ baseline_only_list = []
1020
+ comparison_only_list = []
1021
+ no_datapoints_list = []
1022
+ no_datapoints_baseline_list = []
1023
+ no_datapoints_comparison_list = []
1024
+ original_metric_mode = metric_mode
754
1025
  for test_name in test_names:
1026
+ metric_mode = original_metric_mode
1027
+ compare_version = "main"
1028
+ # GE
1029
+ github_link = "https://github.com/redis/redis-benchmarks-specification/blob"
1030
+ test_path = f"redis_benchmarks_specification/test-suites/{test_name}.yml"
1031
+ test_link = f"[{test_name}]({github_link}/{compare_version}/{test_path})"
755
1032
  multi_value_baseline = check_multi_value_filter(baseline_str)
756
1033
  multi_value_comparison = check_multi_value_filter(comparison_str)
757
1034
 
@@ -760,8 +1037,11 @@ def from_rts_to_regression_table(
760
1037
  "metric={}".format(metric_name),
761
1038
  "{}={}".format(test_filter, test_name),
762
1039
  "deployment_name={}".format(baseline_deployment_name),
1040
+ "github_repo={}".format(baseline_github_repo),
763
1041
  "triggering_env={}".format(tf_triggering_env),
764
1042
  ]
1043
+ if baseline_github_org != "":
1044
+ filters_baseline.append(f"github_org={baseline_github_org}")
765
1045
  if running_platform is not None:
766
1046
  filters_baseline.append("running_platform={}".format(running_platform))
767
1047
  filters_comparison = [
@@ -769,8 +1049,15 @@ def from_rts_to_regression_table(
769
1049
  "metric={}".format(metric_name),
770
1050
  "{}={}".format(test_filter, test_name),
771
1051
  "deployment_name={}".format(comparison_deployment_name),
1052
+ "github_repo={}".format(comparison_github_repo),
772
1053
  "triggering_env={}".format(tf_triggering_env),
773
1054
  ]
1055
+ if comparison_github_org != "":
1056
+ filters_comparison.append(f"github_org={comparison_github_org}")
1057
+ if "hash" not in by_str_baseline:
1058
+ filters_baseline.append("hash==")
1059
+ if "hash" not in by_str_comparison:
1060
+ filters_comparison.append("hash==")
774
1061
  if running_platform is not None:
775
1062
  filters_comparison.append("running_platform={}".format(running_platform))
776
1063
  baseline_timeseries = rts.ts().queryindex(filters_baseline)
@@ -794,6 +1081,22 @@ def from_rts_to_regression_table(
794
1081
  if len(baseline_timeseries) > 1 and multi_value_baseline is False:
795
1082
  baseline_timeseries = get_only_Totals(baseline_timeseries)
796
1083
 
1084
+ if len(baseline_timeseries) == 0:
1085
+ logging.warning(
1086
+ f"No datapoints for test={test_name} for baseline timeseries {baseline_timeseries}"
1087
+ )
1088
+ no_datapoints_baseline_list.append(test_name)
1089
+ if test_name not in no_datapoints_list:
1090
+ no_datapoints_list.append(test_name)
1091
+
1092
+ if len(comparison_timeseries) == 0:
1093
+ logging.warning(
1094
+ f"No datapoints for test={test_name} for comparison timeseries {comparison_timeseries}"
1095
+ )
1096
+ no_datapoints_comparison_list.append(test_name)
1097
+ if test_name not in no_datapoints_list:
1098
+ no_datapoints_list.append(test_name)
1099
+
797
1100
  if len(baseline_timeseries) != 1 and multi_value_baseline is False:
798
1101
  if verbose:
799
1102
  logging.warning(
@@ -870,20 +1173,40 @@ def from_rts_to_regression_table(
870
1173
  )
871
1174
 
872
1175
  waterline = regressions_percent_lower_limit
873
- if regressions_percent_lower_limit < largest_variance:
874
- note = "waterline={:.1f}%.".format(largest_variance)
875
- waterline = largest_variance
1176
+ # if regressions_percent_lower_limit < largest_variance:
1177
+ # note = "waterline={:.1f}%.".format(largest_variance)
1178
+ # waterline = largest_variance
876
1179
 
877
- except redis.exceptions.ResponseError:
1180
+ except redis.exceptions.ResponseError as e:
1181
+ logging.error(
1182
+ "Detected a redis.exceptions.ResponseError. {}".format(e.__str__())
1183
+ )
878
1184
  pass
879
1185
  except ZeroDivisionError as e:
880
1186
  logging.error("Detected a ZeroDivisionError. {}".format(e.__str__()))
881
1187
  pass
882
1188
  unstable = False
883
- if baseline_v != "N/A" and comparison_v != "N/A":
1189
+
1190
+ if baseline_v != "N/A" and comparison_v == "N/A":
1191
+ logging.warning(
1192
+ "Baseline contains datapoints but comparison not for test: {test_name}"
1193
+ )
1194
+ baseline_only_list.append(test_name)
1195
+ if comparison_v != "N/A" and baseline_v == "N/A":
1196
+ logging.warning(
1197
+ "Comparison contains datapoints but baseline not for test: {test_name}"
1198
+ )
1199
+ comparison_only_list.append(test_name)
1200
+ if (
1201
+ baseline_v != "N/A"
1202
+ and comparison_pct_change != "N/A"
1203
+ and comparison_v != "N/A"
1204
+ and baseline_pct_change != "N/A"
1205
+ ):
884
1206
  if comparison_pct_change > 10.0 or baseline_pct_change > 10.0:
885
1207
  note = "UNSTABLE (very high variance)"
886
1208
  unstable = True
1209
+ unstable_list.append([test_name, "n/a"])
887
1210
 
888
1211
  baseline_v_str = prepare_value_str(
889
1212
  baseline_pct_change, baseline_v, baseline_values, simplify_table
@@ -899,32 +1222,36 @@ def from_rts_to_regression_table(
899
1222
  else:
900
1223
  # lower-better
901
1224
  percentage_change = (
902
- float(baseline_v) / float(comparison_v) - 1
1225
+ -(float(baseline_v) - float(comparison_v)) / float(baseline_v)
903
1226
  ) * 100.0
1227
+ else:
1228
+ logging.warn(
1229
+ f"Missing data for test {test_name}. baseline_v={baseline_v} (pct_change={baseline_pct_change}), comparison_v={comparison_v} (pct_change={comparison_pct_change}) "
1230
+ )
904
1231
  if baseline_v != "N/A" or comparison_v != "N/A":
905
1232
  detected_regression = False
906
1233
  detected_improvement = False
907
- if percentage_change < 0.0 and not unstable:
1234
+ if percentage_change < 0.0:
908
1235
  if -waterline >= percentage_change:
909
1236
  detected_regression = True
910
1237
  total_regressions = total_regressions + 1
911
- note = note + " REGRESSION"
1238
+ note = note + f" {regression_str}"
912
1239
  detected_regressions.append(test_name)
913
1240
  elif percentage_change < -noise_waterline:
914
1241
  if simplify_table is False:
915
- note = note + " potential REGRESSION"
1242
+ note = note + f" potential {regression_str}"
916
1243
  else:
917
1244
  if simplify_table is False:
918
1245
  note = note + " No Change"
919
1246
 
920
- if percentage_change > 0.0 and not unstable:
1247
+ if percentage_change > 0.0:
921
1248
  if percentage_change > waterline:
922
1249
  detected_improvement = True
923
1250
  total_improvements = total_improvements + 1
924
- note = note + " IMPROVEMENT"
1251
+ note = note + f" {improvement_str}"
925
1252
  elif percentage_change > noise_waterline:
926
1253
  if simplify_table is False:
927
- note = note + " potential IMPROVEMENT"
1254
+ note = note + f" potential {improvement_str}"
928
1255
  else:
929
1256
  if simplify_table is False:
930
1257
  note = note + " No Change"
@@ -940,6 +1267,27 @@ def from_rts_to_regression_table(
940
1267
  total_unstable += 1
941
1268
 
942
1269
  should_add_line = False
1270
+ line = get_line(
1271
+ baseline_v_str,
1272
+ comparison_v_str,
1273
+ note,
1274
+ percentage_change,
1275
+ test_link,
1276
+ )
1277
+ if detected_regression:
1278
+ regressions_list.append([test_name, percentage_change])
1279
+ table_regressions.append(line)
1280
+
1281
+ if detected_improvement:
1282
+ improvements_list.append([test_name, percentage_change])
1283
+ table_improvements.append(line)
1284
+
1285
+ if unstable:
1286
+ table_unstable.append(line)
1287
+ else:
1288
+ if not detected_regression and not detected_improvement:
1289
+ table_stable.append(line)
1290
+
943
1291
  if print_regressions_only and detected_regression:
944
1292
  should_add_line = True
945
1293
  if print_improvements_only and detected_improvement:
@@ -951,22 +1299,51 @@ def from_rts_to_regression_table(
951
1299
 
952
1300
  if should_add_line:
953
1301
  total_comparison_points = total_comparison_points + 1
954
- add_line(
955
- baseline_v_str,
956
- comparison_v_str,
957
- note,
958
- percentage_change,
959
- table,
960
- test_name,
961
- )
1302
+ table_full.append(line)
1303
+ else:
1304
+ logging.warning(
1305
+ "There were no datapoints both for baseline and comparison for test: {test_name}"
1306
+ )
1307
+ if test_name not in no_datapoints_list:
1308
+ no_datapoints_list.append(test_name)
1309
+ logging.warning(
1310
+ f"There is a total of {len(no_datapoints_list)} tests without datapoints for baseline AND comparison"
1311
+ )
1312
+ logging.info(
1313
+ f"There is a total of {len(comparison_only_list)} tests without datapoints for baseline"
1314
+ )
1315
+ print(
1316
+ "No datapoint baseline regex={test_names_str}".format(
1317
+ test_names_str="|".join(no_datapoints_baseline_list)
1318
+ )
1319
+ )
1320
+ logging.info(
1321
+ f"There is a total of {len(baseline_only_list)} tests without datapoints for comparison"
1322
+ )
1323
+ print(
1324
+ "No datapoint comparison regex={test_names_str}".format(
1325
+ test_names_str="|".join(no_datapoints_comparison_list)
1326
+ )
1327
+ )
1328
+ logging.info(f"There is a total of {len(unstable_list)} UNSTABLE tests")
962
1329
  return (
963
1330
  detected_regressions,
964
- table,
1331
+ table_full,
1332
+ table_stable,
1333
+ table_unstable,
1334
+ table_improvements,
1335
+ table_regressions,
965
1336
  total_improvements,
966
1337
  total_regressions,
967
1338
  total_stable,
968
1339
  total_unstable,
969
1340
  total_comparison_points,
1341
+ regressions_list,
1342
+ improvements_list,
1343
+ unstable_list,
1344
+ baseline_only_list,
1345
+ comparison_only_list,
1346
+ no_datapoints_list,
970
1347
  )
971
1348
 
972
1349
 
@@ -1037,6 +1414,23 @@ def get_test_names_from_db(rts, tags_regex_string, test_names, used_key):
1037
1414
  return test_names
1038
1415
 
1039
1416
 
1417
+ def get_line(
1418
+ baseline_v_str,
1419
+ comparison_v_str,
1420
+ note,
1421
+ percentage_change,
1422
+ test_name,
1423
+ ):
1424
+ percentage_change_str = "{:.1f}% ".format(percentage_change)
1425
+ return [
1426
+ test_name,
1427
+ baseline_v_str,
1428
+ comparison_v_str,
1429
+ percentage_change_str,
1430
+ note.strip(),
1431
+ ]
1432
+
1433
+
1040
1434
  def add_line(
1041
1435
  baseline_v_str,
1042
1436
  comparison_v_str,
@@ -1045,15 +1439,14 @@ def add_line(
1045
1439
  table,
1046
1440
  test_name,
1047
1441
  ):
1048
- percentage_change_str = "{:.1f}% ".format(percentage_change)
1049
1442
  table.append(
1050
- [
1051
- test_name,
1443
+ get_line(
1052
1444
  baseline_v_str,
1053
1445
  comparison_v_str,
1054
- percentage_change_str,
1055
- note.strip(),
1056
- ]
1446
+ note,
1447
+ percentage_change,
1448
+ test_name,
1449
+ )
1057
1450
  )
1058
1451
 
1059
1452
 
@@ -1071,23 +1464,25 @@ def get_v_pct_change_and_largest_var(
1071
1464
  _, comparison_v = comparison_datapoints[0]
1072
1465
  for tuple in comparison_datapoints:
1073
1466
  if last_n < 0 or (last_n > 0 and len(comparison_values) < last_n):
1074
- comparison_values.append(tuple[1])
1075
- comparison_df = pd.DataFrame(comparison_values)
1076
- comparison_median = float(comparison_df.median())
1077
- comparison_v = comparison_median
1078
- comparison_std = float(comparison_df.std())
1079
- if verbose:
1080
- logging.info(
1081
- "comparison_datapoints: {} value: {}; std-dev: {}; median: {}".format(
1082
- comparison_datapoints,
1083
- comparison_v,
1084
- comparison_std,
1085
- comparison_median,
1467
+ if tuple[1] > 0.0:
1468
+ comparison_values.append(tuple[1])
1469
+ if len(comparison_values) > 0:
1470
+ comparison_df = pd.DataFrame(comparison_values)
1471
+ comparison_median = float(comparison_df.median().iloc[0])
1472
+ comparison_v = comparison_median
1473
+ comparison_std = float(comparison_df.std().iloc[0])
1474
+ if verbose:
1475
+ logging.info(
1476
+ "comparison_datapoints: {} value: {}; std-dev: {}; median: {}".format(
1477
+ comparison_datapoints,
1478
+ comparison_v,
1479
+ comparison_std,
1480
+ comparison_median,
1481
+ )
1086
1482
  )
1087
- )
1088
- comparison_pct_change = (comparison_std / comparison_median) * 100.0
1089
- if comparison_pct_change > largest_variance:
1090
- largest_variance = comparison_pct_change
1483
+ comparison_pct_change = (comparison_std / comparison_median) * 100.0
1484
+ if comparison_pct_change > largest_variance:
1485
+ largest_variance = comparison_pct_change
1091
1486
  return comparison_pct_change, comparison_v, largest_variance
1092
1487
 
1093
1488