Add support for StackExchange.Redis 3.x#8808
Conversation
Execution-Time Benchmarks Report ⏱️Execution-time results for samples comparing This PR (8808) and master. ✅ No regressions detected - check the details below Full Metrics ComparisonFakeDbCommand
HttpMessageHandler
Comparison explanationExecution-time benchmarks measure the whole time it takes to execute a program, and are intended to measure the one-off costs. Cases where the execution time results for the PR are worse than latest master results are highlighted in **red**. The following thresholds were used for comparing the execution times:
Note that these results are based on a single point-in-time result for each branch. For full results, see the dashboard. Graphs show the p99 interval based on the mean and StdDev of the test run, as well as the mean value of the run (shown as a diamond below the graph). Duration chartsFakeDbCommand (.NET Framework 4.8)gantt
title Execution time (ms) FakeDbCommand (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8808) - mean (70ms) : 68, 72
master - mean (72ms) : 68, 76
section Bailout
This PR (8808) - mean (76ms) : 72, 81
master - mean (77ms) : 73, 80
section CallTarget+Inlining+NGEN
This PR (8808) - mean (1,083ms) : 1038, 1127
master - mean (1,078ms) : 1036, 1120
FakeDbCommand (.NET Core 3.1)gantt
title Execution time (ms) FakeDbCommand (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8808) - mean (109ms) : 106, 112
master - mean (112ms) : 107, 118
section Bailout
This PR (8808) - mean (114ms) : 108, 120
master - mean (112ms) : 107, 117
section CallTarget+Inlining+NGEN
This PR (8808) - mean (772ms) : 752, 791
master - mean (774ms) : 752, 796
FakeDbCommand (.NET 6)gantt
title Execution time (ms) FakeDbCommand (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8808) - mean (98ms) : 93, 104
master - mean (99ms) : 95, 104
section Bailout
This PR (8808) - mean (102ms) : 97, 106
master - mean (99ms) : 96, 102
section CallTarget+Inlining+NGEN
This PR (8808) - mean (932ms) : 898, 966
master - mean (935ms) : 897, 973
FakeDbCommand (.NET 8)gantt
title Execution time (ms) FakeDbCommand (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8808) - mean (97ms) : 88, 105
master - mean (95ms) : 92, 98
section Bailout
This PR (8808) - mean (96ms) : 94, 97
master - mean (98ms) : 92, 104
section CallTarget+Inlining+NGEN
This PR (8808) - mean (815ms) : 781, 848
master - mean (812ms) : 779, 846
HttpMessageHandler (.NET Framework 4.8)gantt
title Execution time (ms) HttpMessageHandler (.NET Framework 4.8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8808) - mean (201ms) : 195, 208
master - mean (202ms) : 195, 209
section Bailout
This PR (8808) - mean (205ms) : 199, 210
master - mean (206ms) : 199, 213
section CallTarget+Inlining+NGEN
This PR (8808) - mean (1,209ms) : 1170, 1247
master - mean (1,203ms) : 1162, 1245
HttpMessageHandler (.NET Core 3.1)gantt
title Execution time (ms) HttpMessageHandler (.NET Core 3.1)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8808) - mean (288ms) : 282, 294
master - mean (286ms) : 278, 294
section Bailout
This PR (8808) - mean (290ms) : 284, 296
master - mean (290ms) : 283, 298
section CallTarget+Inlining+NGEN
This PR (8808) - mean (967ms) : 945, 988
master - mean (966ms) : 947, 985
HttpMessageHandler (.NET 6)gantt
title Execution time (ms) HttpMessageHandler (.NET 6)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8808) - mean (281ms) : 277, 286
master - mean (283ms) : 276, 290
section Bailout
This PR (8808) - mean (282ms) : 277, 287
master - mean (282ms) : 278, 287
section CallTarget+Inlining+NGEN
This PR (8808) - mean (1,170ms) : 1131, 1209
master - mean (1,169ms) : 1121, 1218
HttpMessageHandler (.NET 8)gantt
title Execution time (ms) HttpMessageHandler (.NET 8)
dateFormat x
axisFormat %Q
todayMarker off
section Baseline
This PR (8808) - mean (280ms) : 274, 287
master - mean (282ms) : 273, 290
section Bailout
This PR (8808) - mean (281ms) : 274, 288
master - mean (281ms) : 272, 289
section CallTarget+Inlining+NGEN
This PR (8808) - mean (1,046ms) : 997, 1094
master - mean (1,043ms) : 996, 1089
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BenchmarksBenchmark execution time: 2026-06-22 16:44:41 Comparing candidate commit cfcd9d0 in PR branch Found 0 performance improvements and 0 performance regressions! Performance is the same for 72 metrics, 0 unstable metrics, 62 known flaky benchmarks, 64 flaky benchmarks without significant changes.
|
442a7bb to
edbe413
Compare
This comment has been minimized.
This comment has been minimized.
399e7cb to
51ded72
Compare
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: cfcd9d0e68
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| "maxVersionSupportedInclusive": "2.13.17", | ||
| "maxVersionAvailableInclusive": "3.0.0", | ||
| "maxVersionTestedInclusive": "2.13.17" | ||
| "maxVersionTestedInclusive": "3.0.0" |
There was a problem hiding this comment.
Update support matrix to mark Redis 3.x supported
This entry now records StackExchange.Redis 3.0.0 as tested, but the same package block still caps maxVersionSupportedInclusive at 2.13.17 and the assembly block at 2.x. Any consumer of supported_versions.json will therefore continue to report 3.x as unsupported even though this change adds 3.x instrumentation and tests; please regenerate or adjust the support matrix so the supported maximum is consistent with the new tested 3.0.0 range.
Useful? React with 👍 / 👎.
There was a problem hiding this comment.
nobody uses this json file so unimportant imo
There was a problem hiding this comment.
Yeah, and it's get fixed in the next update, so I'm very much "meh" about triggering another CI run just for that 😄
| MethodName = "ExecuteSync", | ||
| ReturnTypeName = "!!0", | ||
| ParameterTypeNames = ["StackExchange.Redis.Message", "StackExchange.Redis.ResultProcessor`1[!!0]", "StackExchange.Redis.ServerEndPoint", "!!0"], | ||
| MinimumVersion = "1.0.0", |
There was a problem hiding this comment.
is this correct ? Since this is introduced to support 3.x, I'd expect
| MinimumVersion = "1.0.0", | |
| MinimumVersion = "3.0.0", |
Though if the method doesn't exist in earlier versions I guess there is no technical impact, but like for readability
There was a problem hiding this comment.
Yeah, so this is essentially a bug fix as well as new support for 3.x 🙈 It turns out that this has been the "correct" sync method since at least 2022... The 3-parameter version of the sync method calls hasn't existed since then 😬
There was a problem hiding this comment.
ah yes I hadn't read the PR description 🤦
| "maxVersionSupportedInclusive": "2.13.17", | ||
| "maxVersionAvailableInclusive": "3.0.0", | ||
| "maxVersionTestedInclusive": "2.13.17" | ||
| "maxVersionTestedInclusive": "3.0.0" |
There was a problem hiding this comment.
nobody uses this json file so unimportant imo
Summary of changes
Adds support for StackExchange.Redis 3.x
Reason for change
We want to support the latest versions.
Implementation details
In general, this should be an easy change, because 3.x just changes the internals, without changing the public API, and we mostly rely on the public API.
While working on this, I noticed a couple of things
RedisBase.ExecuteSyncmethod changed its signature 4 years ago, so has been broken since then... I added an additional instrumentation for the new signature 😅Test coverage
Extended the testing to cover the new major versions
Other details