Conversation
|
API Changes no api changes detected |
|
This pull request resolves a panic in the Tyk Gateway that occurs when gateways with different Redis-based rate-limiting configurations share the same Redis instance. Specifically, a gateway using a non-DRL (Distributed Rate Limiter) Redis rate limiter (e.g., Sentinel, rolling window) would panic upon receiving a DRL update notification from another gateway. The fix introduces a check within the Redis event handler to verify if DRL is disabled on the receiving gateway. If it is, the DRL notification is safely ignored, preventing the system from accessing an uninitialized DRL manager and thus averting the panic. Files Changed Analysis
Architecture & Impact Assessment
graph TD
A[Redis Receives DRL Notification] --> B{isDRLDisabled?};
B -->|Yes| C[Ignore Notification & Prevent Panic];
B -->|No| D[Process DRL Update as Normal];
Scope Discovery & Context Expansion
Metadata
Powered by Visor from Probelabs Last updated: 2025-11-25T16:32:50.132Z | Triggered by: pr_updated | Commit: 6214b39 💡 TIP: You can chat with Visor using |
✅ Security Check PassedNo security issues found – changes LGTM. ✅ Architecture Check PassedNo architecture issues found – changes LGTM. ✅ Performance Check PassedNo performance issues found – changes LGTM. Quality Issues (1)
Powered by Visor from Probelabs Last updated: 2025-11-25T16:32:55.455Z | Triggered by: pr_updated | Commit: 6214b39 💡 TIP: You can chat with Visor using |
|
/visor ask |
|
You are correct. Thank you for the clarification. In The new test, Therefore, the implementation and the tests are aligned. References:
Powered by Visor from Probelabs Last updated: 2025-11-24T12:25:33.479Z | Triggered by: MaciekMis | Commit: 4618f45 💡 TIP: You can chat with Visor using |
…ter-panics-if-any-gateway-sharing-the-same-redis-is-using-the-drl
buraksezer
left a comment
There was a problem hiding this comment.
Modifying the global config can lead to flaky tests, but this is already a known issue in the codebase.
…ter-panics-if-any-gateway-sharing-the-same-redis-is-using-the-drl
|
|
SonarCube scanned every file that had any change in this PR - those errors are not related to introduced code |
|
/release to release-5.8 |
… sharing the same Redis is using the DRL (#7558) <!-- Provide a general summary of your changes in the Title above --> ## Description This pull request fixes an issue where a gateway that uses enable_redis_rolling_limiter, enable_sentinel_rate_limiter or enable_fixed_window_rate_limiter shares redis with a gateway which is sending DRL updates panics as soon as it receives a DRL update ## Related Issue <!-- This project only accepts pull requests related to open issues. --> <!-- If suggesting a new feature or change, please discuss it in an issue first. --> <!-- If fixing a bug, there should be an issue describing it with steps to reproduce. --> <!-- OSS: Please link to the issue here. Tyk: please create/link the JIRA ticket. --> ## Motivation and Context <!-- Why is this change required? What problem does it solve? --> ## How This Has Been Tested <!-- Please describe in detail how you tested your changes --> <!-- Include details of your testing environment, and the tests --> <!-- you ran to see how your change affects other areas of the code, etc. --> <!-- This information is helpful for reviewers and QA. --> ## Screenshots (if appropriate) ## Types of changes <!-- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Refactoring or add test (improvements in base code or adds test coverage to functionality) ## Checklist <!-- Go over all the following points, and put an `x` in all the boxes that apply --> <!-- If there are no documentation updates required, mark the item as checked. --> <!-- Raise up any additional concerns not covered by the checklist. --> - [ ] I ensured that the documentation is up to date - [ ] I explained why this PR updates go.mod in detail with reasoning why it's required - [ ] I would like a code coverage CI quality gate exception and have explained why <!---TykTechnologies/jira-linter starts here--> ### Ticket Details <details> <summary> <a href="https://tyktech.atlassian.net/browse/TT-12827" title="TT-12827" target="_blank">TT-12827</a> </summary> | | | |---------|----| | Status | In Code Review | | Summary | A gateway using a redis rate limiter panics if any Gateway sharing the same Redis is using the DRL | Generated at: 2025-11-25 16:31:44 </details> <!---TykTechnologies/jira-linter ends here--> (cherry picked from commit 26926b2)
|
✅ Cherry-pick successful. A PR was created: #7565 |
…er panics if any Gateway sharing the same Redis is using the DRL (#7558) (#7565) ### **User description** [TT-12827] A gateway using a redis rate limiter panics if any Gateway sharing the same Redis is using the DRL (#7558) <!-- Provide a general summary of your changes in the Title above --> ## Description This pull request fixes an issue where a gateway that uses enable_redis_rolling_limiter, enable_sentinel_rate_limiter or enable_fixed_window_rate_limiter shares redis with a gateway which is sending DRL updates panics as soon as it receives a DRL update ## Related Issue <!-- This project only accepts pull requests related to open issues. --> <!-- If suggesting a new feature or change, please discuss it in an issue first. --> <!-- If fixing a bug, there should be an issue describing it with steps to reproduce. --> <!-- OSS: Please link to the issue here. Tyk: please create/link the JIRA ticket. --> ## Motivation and Context <!-- Why is this change required? What problem does it solve? --> ## How This Has Been Tested <!-- Please describe in detail how you tested your changes --> <!-- Include details of your testing environment, and the tests --> <!-- you ran to see how your change affects other areas of the code, etc. --> <!-- This information is helpful for reviewers and QA. --> ## Screenshots (if appropriate) ## Types of changes <!-- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Refactoring or add test (improvements in base code or adds test coverage to functionality) ## Checklist <!-- Go over all the following points, and put an `x` in all the boxes that apply --> <!-- If there are no documentation updates required, mark the item as checked. --> <!-- Raise up any additional concerns not covered by the checklist. --> - [ ] I ensured that the documentation is up to date - [ ] I explained why this PR updates go.mod in detail with reasoning why it's required - [ ] I would like a code coverage CI quality gate exception and have explained why <!---TykTechnologies/jira-linter starts here--> ### Ticket Details <details> <summary> <a href="https://tyktech.atlassian.net/browse/TT-12827" title="TT-12827" target="_blank">TT-12827</a> </summary> | | | |---------|----| | Status | In Code Review | | Summary | A gateway using a redis rate limiter panics if any Gateway sharing the same Redis is using the DRL | Generated at: 2025-11-25 16:31:44 </details> <!---TykTechnologies/jira-linter ends here--> [TT-12827]: https://tyktech.atlassian.net/browse/TT-12827?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ ___ ### **PR Type** Bug fix, Tests ___ ### **Description** - Skip DRL events when DRL disabled - Centralize DRL disable check in helper - Add tests for DRL skip behavior ___ ### Diagram Walkthrough ```mermaid flowchart LR handleRedisEvent["handleRedisEvent: DRL notice"] -- "isDRLDisabled() true" --> skip["return (skip)"] handleRedisEvent -- "isDRLDisabled() false" --> onStatus["onServerStatusReceivedHandler"] startDRL["startDRL()"] -- "isDRLDisabled() true" --> noInit["Don't init DRL"] startDRL -- "isDRLDisabled() false" --> initDRL["Init DRL + notifications"] ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Tests</strong></td><td><table> <tr> <td> <details> <summary><strong>gateway_test.go</strong><dd><code>Tests for skipping DRL notifications under other limiters</code></dd></summary> <hr> gateway/gateway_test.go <ul><li>Add test to ensure DRL notices are skipped.<br> <li> Cover Sentinel, Redis Rolling, and Fixed Window limiters.<br> <li> Validate no handler invocation when alternate limiter enabled.</ul> </details> </td> <td><a href="https://github.com/TykTechnologies/tyk/pull/7565/files#diff-d34c7069ce5e81d45082b19eb3e869ee1a086e185dcd6630e75e3ed0d368b546">+45/-0</a> </td> </tr> </table></td></tr><tr><td><strong>Bug fix</strong></td><td><table> <tr> <td> <details> <summary><strong>redis_signals.go</strong><dd><code>Guard DRL redis event handling with disable check</code> </dd></summary> <hr> gateway/redis_signals.go <ul><li>Use centralized <code>isDRLDisabled()</code> gate for DRL notice handling.<br> <li> Prevent processing DRL notifications when DRL is disabled.</ul> </details> </td> <td><a href="https://github.com/TykTechnologies/tyk/pull/7565/files#diff-18cb136722c238e19b02741a85510dfd464343f85365482f0873aa60a37718af">+2/-4</a> </td> </tr> </table></td></tr><tr><td><strong>Enhancement</strong></td><td><table> <tr> <td> <details> <summary><strong>server.go</strong><dd><code>Centralize DRL disable logic and apply in startDRL</code> </dd></summary> <hr> gateway/server.go <ul><li>Introduce <code>isDRLDisabled()</code> helper.<br> <li> Replace inline condition in <code>startDRL</code> with helper.<br> <li> Ensure DRL not initialized when disabled conditions met.</ul> </details> </td> <td><a href="https://github.com/TykTechnologies/tyk/pull/7565/files#diff-4652d1bf175a0be8f5e61ef7177c9666f23e077d8626b73ac9d13358fa8b525b">+7/-3</a> </td> </tr> </table></td></tr></tr></tbody></table> </details> ___ Co-authored-by: Maciej Miś <maciej.mis@codilime.com>
… sharing the same Redis is using the DRL (#7558) <!-- Provide a general summary of your changes in the Title above --> ## Description This pull request fixes an issue where a gateway that uses enable_redis_rolling_limiter, enable_sentinel_rate_limiter or enable_fixed_window_rate_limiter shares redis with a gateway which is sending DRL updates panics as soon as it receives a DRL update ## Related Issue <!-- This project only accepts pull requests related to open issues. --> <!-- If suggesting a new feature or change, please discuss it in an issue first. --> <!-- If fixing a bug, there should be an issue describing it with steps to reproduce. --> <!-- OSS: Please link to the issue here. Tyk: please create/link the JIRA ticket. --> ## Motivation and Context <!-- Why is this change required? What problem does it solve? --> ## How This Has Been Tested <!-- Please describe in detail how you tested your changes --> <!-- Include details of your testing environment, and the tests --> <!-- you ran to see how your change affects other areas of the code, etc. --> <!-- This information is helpful for reviewers and QA. --> ## Screenshots (if appropriate) ## Types of changes <!-- What types of changes does your code introduce? Put an `x` in all the boxes that apply: --> - [x] Bug fix (non-breaking change which fixes an issue) - [ ] New feature (non-breaking change which adds functionality) - [ ] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Refactoring or add test (improvements in base code or adds test coverage to functionality) ## Checklist <!-- Go over all the following points, and put an `x` in all the boxes that apply --> <!-- If there are no documentation updates required, mark the item as checked. --> <!-- Raise up any additional concerns not covered by the checklist. --> - [ ] I ensured that the documentation is up to date - [ ] I explained why this PR updates go.mod in detail with reasoning why it's required - [ ] I would like a code coverage CI quality gate exception and have explained why <!---TykTechnologies/jira-linter starts here--> ### Ticket Details <details> <summary> <a href="https://tyktech.atlassian.net/browse/TT-12827" title="TT-12827" target="_blank">TT-12827</a> </summary> | | | |---------|----| | Status | In Code Review | | Summary | A gateway using a redis rate limiter panics if any Gateway sharing the same Redis is using the DRL | Generated at: 2025-11-25 16:31:44 </details> <!---TykTechnologies/jira-linter ends here-->




Description
This pull request fixes an issue where a gateway that uses enable_redis_rolling_limiter, enable_sentinel_rate_limiter or enable_fixed_window_rate_limiter shares redis with a gateway which is sending DRL updates panics as soon as it receives a DRL update
Related Issue
Motivation and Context
How This Has Been Tested
Screenshots (if appropriate)
Types of changes
Checklist
Ticket Details
TT-12827
Generated at: 2025-11-25 16:31:44