[TT-15954]: Make org session fetch non-blocking#7531
Conversation
🎯 Recommended Merge TargetsBased on JIRA ticket TT-15954: Request pipeline blocked by synchronous RPC calls every 10 minutes when MDCB unavailable Fix Version: Tyk 5.11.0
Required:
Fix Version: Tyk 5.8.9Required:
📋 Workflow
|
5ba2d40 to
e128bbe
Compare
🔍 Code Analysis ResultsThis PR addresses a critical performance issue where the request pipeline could be blocked for extended periods if the Multi-Data Center Bridge (MDCB) was unavailable. The fix makes the fetching of organization session data non-blocking when the gateway is operating in RPC mode, significantly improving resilience and availability. Files Changed Analysis
Architecture & Impact Assessment
Org Session Fetch FlowsequenceDiagram
participant Client
participant Gateway
participant OrganizationMonitor
participant MDCB
Client->>Gateway: API Request
box Old (Blocking Flow)
Gateway->>OrganizationMonitor: ProcessRequest (Cache Miss)
OrganizationMonitor->>MDCB: GetOrgSession (Blocking RPC call)
Note over OrganizationMonitor, MDCB: Request pipeline is blocked here if MDCB is down
MDCB-->>OrganizationMonitor: Session Data / Timeout
OrganizationMonitor-->>Gateway: Continue/Block Request
Gateway-->>Client: API Response / Error
end
box New (Non-Blocking Flow in RPC Mode)
Gateway->>OrganizationMonitor: ProcessRequest (Cache Miss)
OrganizationMonitor-->>Gateway: Return immediately (non-blocking)
Gateway-->>Client: API Response (processed without org policy)
par Background Fetch
OrganizationMonitor->>MDCB: GetOrgSession
MDCB-->>OrganizationMonitor: Session Data / Timeout
OrganizationMonitor->>OrganizationMonitor: Update local cache for subsequent requests
end
end
Scope Discovery & Context ExpansionThe change introduces a deliberate architectural trade-off: prioritizing availability over immediate consistency. By adopting a "fail-open" strategy for uncached sessions during an MDCB outage, the first request will bypass all organization-level policies, such as quotas and rate limits. Subsequent requests will use the correct session data once it has been fetched and cached. This behavior is isolated to gateways configured in RPC mode and is a strategic choice to enhance resilience against backend failures. The impact of this change is broad within the gateway, affecting any feature that relies on Metadata
Powered by Visor from Probelabs Last updated: 2025-11-19T12:17:47.227Z | Triggered by: synchronize | Commit: e2cbe2f 💡 TIP: You can chat with Visor using |
🔍 Code Analysis ResultsSecurity Issues (1)
Architecture Issues (1)
✅ Performance Check PassedNo performance issues found – changes LGTM. Quality Issues (2)
✅ Dependency Check PassedNo dependency issues found – changes LGTM. Connectivity Issues (1)
|
1b71e10 to
d935b4d
Compare
|
API Changes no api changes detected |
|
/review is there a way to write integration tests for this? |
🔍 Code Analysis ResultsYes, it's possible to write an integration test for this change. The existing test framework is flexible enough to support it, although it would require setting up a mock gRPC server to simulate the MDCB backend. Here is the high-level approach you could take:
This approach would validate the non-blocking behavior through the entire stack, from the middleware to the RPC client, providing higher confidence than the current unit tests that rely on References:
Powered by Visor from Probelabs Last updated: 2025-11-12T12:02:11.384Z | Triggered by: comment by @lghiur 💡 TIP: You can chat with Visor using |
c258e5d to
a436b30
Compare
3847a83 to
4a5ebb7
Compare
|
The probe comments are not necesarily a problem as the rate limits are monitored from a data plane perspective and not a control plane one so MCDB going down should not open any vulnerabiltiy for attack. From a code coverage perspective this functionality is more related to an integrated flow so a unit test coverage of 70%+ should be more than enough to be merged. |
|
|
/release to release-5.8 |
<!-- Provide a general summary of your changes in the Title above --> ## Description <!-- Describe your changes in detail --> Fixes request pipeline blocking when MDCB is unavailable by making org session fetches non-blocking in RPC mode. ## 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. --> [TT-15954](https://tyktech.atlassian.net/browse/TT-15954) ## Motivation and Context <!-- Why is this change required? What problem does it solve? --> When MDCB is unavailable, synchronous RPC calls to fetch org sessionsin OrganizationMonitor were blocking the request pipeline for 90-120 seconds ## 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 [TT-15954]: https://tyktech.atlassian.net/browse/TT-15954?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ <!---TykTechnologies/jira-linter starts here--> ### Ticket Details <details> <summary> <a href="https://tyktech.atlassian.net/browse/TT-15954" title="TT-15954" target="_blank">TT-15954</a> </summary> | | | |---------|----| | Status | In Code Review | | Summary | Request pipeline blocked by synchronous RPC calls every 10 minutes when MDCB unavailable | Generated at: 2025-11-20 13:06:06 </details> <!---TykTechnologies/jira-linter ends here--> --------- Co-authored-by: andrei-tyk <97896463+andrei-tyk@users.noreply.github.com> (cherry picked from commit 30461c4)
|
✅ Cherry-pick successful. A PR was created: #7582 |
|
/release to release-5.8.9 |
<!-- Provide a general summary of your changes in the Title above --> ## Description <!-- Describe your changes in detail --> Fixes request pipeline blocking when MDCB is unavailable by making org session fetches non-blocking in RPC mode. ## 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. --> [TT-15954](https://tyktech.atlassian.net/browse/TT-15954) ## Motivation and Context <!-- Why is this change required? What problem does it solve? --> When MDCB is unavailable, synchronous RPC calls to fetch org sessionsin OrganizationMonitor were blocking the request pipeline for 90-120 seconds ## 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 [TT-15954]: https://tyktech.atlassian.net/browse/TT-15954?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ <!---TykTechnologies/jira-linter starts here--> ### Ticket Details <details> <summary> <a href="https://tyktech.atlassian.net/browse/TT-15954" title="TT-15954" target="_blank">TT-15954</a> </summary> | | | |---------|----| | Status | In Code Review | | Summary | Request pipeline blocked by synchronous RPC calls every 10 minutes when MDCB unavailable | Generated at: 2025-11-20 13:06:06 </details> <!---TykTechnologies/jira-linter ends here--> --------- Co-authored-by: andrei-tyk <97896463+andrei-tyk@users.noreply.github.com> (cherry picked from commit 30461c4)
|
✅ Cherry-pick successful. A PR was created: #7583 |
…ng (#7531) (#7582) ### **User description** [TT-15954]: Make org session fetch non-blocking (#7531) <!-- Provide a general summary of your changes in the Title above --> ## Description <!-- Describe your changes in detail --> Fixes request pipeline blocking when MDCB is unavailable by making org session fetches non-blocking in RPC mode. ## 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. --> [TT-15954](https://tyktech.atlassian.net/browse/TT-15954) ## Motivation and Context <!-- Why is this change required? What problem does it solve? --> When MDCB is unavailable, synchronous RPC calls to fetch org sessionsin OrganizationMonitor were blocking the request pipeline for 90-120 seconds ## 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 [TT-15954]: https://tyktech.atlassian.net/browse/TT-15954?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ <!---TykTechnologies/jira-linter starts here--> ### Ticket Details <details> <summary> <a href="https://tyktech.atlassian.net/browse/TT-15954" title="TT-15954" target="_blank">TT-15954</a> </summary> | | | |---------|----| | Status | In Code Review | | Summary | Request pipeline blocked by synchronous RPC calls every 10 minutes when MDCB unavailable | Generated at: 2025-11-20 13:06:06 </details> <!---TykTechnologies/jira-linter ends here--> --------- Co-authored-by: andrei-tyk <97896463+andrei-tyk@users.noreply.github.com> [TT-15954]: https://tyktech.atlassian.net/browse/TT-15954?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ [TT-15954]: https://tyktech.atlassian.net/browse/TT-15954?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ [TT-15954]: https://tyktech.atlassian.net/browse/TT-15954?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ ___ ### **PR Type** Bug fix ___ ### **Description** - Make org session fetch non-blocking in RPC - Add singleflight to dedupe session fetches - Async refresh for org session expiry cache - Add tests for async behavior and RPC mode ___ ### Diagram Walkthrough ```mermaid flowchart LR ProcReq["OrganizationMonitor.ProcessRequest"] -- "RPC mode, cache miss" --> RefreshBG["refreshOrgSession (async)"] ProcReq -- "non-RPC mode, miss" --> SyncFetch["OrgSession (sync)"] RefreshBG -- "populate cache or set OrgHasNoSession" --> Cache["SessionCache"] OrgExpiry["BaseMiddleware.OrgSessionExpiry"] -- "cache hit" --> ReturnExp["return cached expiry"] OrgExpiry -- "cache miss" --> ExpiryBG["refreshOrgSessionExpiry (async)"] ExpiryBG -- "found session" --> SetExp["SetOrgExpiry(DataExpires)"] ExpiryBG -- "not found/error" --> SetDefault["SetOrgExpiry(DEFAULT)"] RPCMock["Mock gorpc server"] -- "slow GetKey" --> Tests["Async RPC tests"] ``` <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>mw_organisation_activity_test.go</strong><dd><code>Tests for async org session fetch and RPC mode</code> </dd></summary> <hr> gateway/mw_organisation_activity_test.go <ul><li>Add tests for async org session refresh.<br> <li> Implement mock gorpc server for slow RPC.<br> <li> Verify requests don't block in RPC mode.<br> <li> Validate OrgHasNoSession handling.</ul> </details> </td> <td><a href="https://github.com/TykTechnologies/tyk/pull/7582/files#diff-b3bbd18e384b7f03f44c0d6c9a5205e8acdd117029e1e73412089191ec8e833a">+227/-0</a> </td> </tr> <tr> <td> <details> <summary><strong>middleware_test.go</strong><dd><code>Tests for async org session expiry refresh</code> </dd></summary> <hr> gateway/middleware_test.go <ul><li>Extend OrgSessionExpiry tests for async path.<br> <li> Add background fetch assertions with delays.<br> <li> Cover non-existent org default behavior.</ul> </details> </td> <td><a href="https://github.com/TykTechnologies/tyk/pull/7582/files#diff-6a09a08e3f82cc5e9d8c6b5c8426d75ea1e5d85e15ab008fca1f512e7c49c1e6">+35/-12</a> </td> </tr> </table></td></tr><tr><td><strong>Bug fix</strong></td><td><table> <tr> <td> <details> <summary><strong>mw_organisation_activity.go</strong><dd><code>Non-blocking org session fetch with singleflight</code> </dd></summary> <hr> gateway/mw_organisation_activity.go <ul><li>Introduce singleflight group for org session fetch.<br> <li> Add async refreshOrgSession with cache populate.<br> <li> Make RPC mode fetch non-blocking on cache miss.<br> <li> Minor comment fix for off-thread path.</ul> </details> </td> <td><a href="https://github.com/TykTechnologies/tyk/pull/7582/files#diff-26dd955903317b085be06642ae3e76fe41c8c53844d8758a1a1c8bd05b0110a2">+29/-2</a> </td> </tr> <tr> <td> <details> <summary><strong>middleware.go</strong><dd><code>Async org expiry refresh and emergency defaults</code> </dd></summary> <hr> gateway/middleware.go <ul><li>Return default on expiry cache miss immediately.<br> <li> Add async refreshOrgSessionExpiry using singleflight.<br> <li> Short-circuit to default in emergency mode.<br> <li> Cache defaults when session not found.</ul> </details> </td> <td><a href="https://github.com/TykTechnologies/tyk/pull/7582/files#diff-703054910891a4db633eca0f42ed779d6b4fa75cd9b3aa4c503e681364201c1b">+21/-15</a> </td> </tr> </table></td></tr><tr><td><strong>Miscellaneous</strong></td><td><table> <tr> <td> <details> <summary><strong>coverage.out</strong><dd><code>Add coverage report artifact</code> </dd></summary> <hr> gateway/coverage.out - Add coverage output file. </details> </td> <td><a href="https://github.com/TykTechnologies/tyk/pull/7582/files#diff-09774255d9a84e7fadb3d7b29c523e342197d9e6cb340482bce64a09425eca0f">+9299/-0</a></td> </tr> </table></td></tr></tr></tbody></table> </details> ___ Co-authored-by: imogenkraak <162994391+imogenkraak@users.noreply.github.com> Co-authored-by: andrei-tyk <97896463+andrei-tyk@users.noreply.github.com>
…king (#7531) (#7583) ### **User description** [TT-15954]: Make org session fetch non-blocking (#7531) <!-- Provide a general summary of your changes in the Title above --> ## Description <!-- Describe your changes in detail --> Fixes request pipeline blocking when MDCB is unavailable by making org session fetches non-blocking in RPC mode. ## 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. --> [TT-15954](https://tyktech.atlassian.net/browse/TT-15954) ## Motivation and Context <!-- Why is this change required? What problem does it solve? --> When MDCB is unavailable, synchronous RPC calls to fetch org sessionsin OrganizationMonitor were blocking the request pipeline for 90-120 seconds ## 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 [TT-15954]: https://tyktech.atlassian.net/browse/TT-15954?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ <!---TykTechnologies/jira-linter starts here--> ### Ticket Details <details> <summary> <a href="https://tyktech.atlassian.net/browse/TT-15954" title="TT-15954" target="_blank">TT-15954</a> </summary> | | | |---------|----| | Status | In Code Review | | Summary | Request pipeline blocked by synchronous RPC calls every 10 minutes when MDCB unavailable | Generated at: 2025-11-20 13:06:06 </details> <!---TykTechnologies/jira-linter ends here--> --------- Co-authored-by: andrei-tyk <97896463+andrei-tyk@users.noreply.github.com> [TT-15954]: https://tyktech.atlassian.net/browse/TT-15954?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ [TT-15954]: https://tyktech.atlassian.net/browse/TT-15954?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ [TT-15954]: https://tyktech.atlassian.net/browse/TT-15954?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ ___ ### **PR Type** Bug fix ___ ### **Description** - Make org session fetch non-blocking in RPC - Add singleflight to dedupe session fetches - Async refresh for org expiry cache misses - Add tests for async, non-blocking behavior ___ ### Diagram Walkthrough ```mermaid flowchart LR A["ProcessRequest (OrganizationMonitor)"] -- "RPC mode & no cache" --> B["refreshOrgSession (async)"] A -- "Non-RPC & no cache" --> C["OrgSession (sync)"] D["OrgSessionExpiry (BaseMiddleware)"] -- "cache miss" --> E["refreshOrgSessionExpiry (async)"] F["singleflight.Group"] -- "dedupe fetches" --> B ``` <details> <summary><h3> File Walkthrough</h3></summary> <table><thead><tr><th></th><th align="left">Relevant files</th></tr></thead><tbody><tr><td><strong>Bug fix</strong></td><td><table> <tr> <td> <details> <summary><strong>mw_organisation_activity.go</strong><dd><code>Async org session fetch with singleflight</code> </dd></summary> <hr> gateway/mw_organisation_activity.go <ul><li>Introduce singleflight for org session fetches.<br> <li> In RPC mode, fetch org session asynchronously.<br> <li> Add background cache population via refresh function.<br> <li> Minor comment fix and flow adjustments.</ul> </details> </td> <td><a href="https://github.com/TykTechnologies/tyk/pull/7583/files#diff-26dd955903317b085be06642ae3e76fe41c8c53844d8758a1a1c8bd05b0110a2">+29/-2</a> </td> </tr> <tr> <td> <details> <summary><strong>middleware.go</strong><dd><code>Async org expiry refresh and non-blocking path</code> </dd></summary> <hr> gateway/middleware.go <ul><li>Make OrgSessionExpiry return default on miss.<br> <li> Trigger async refresh on cache miss.<br> <li> Avoid blocking and handle emergency mode.<br> <li> Cache default when session not found.</ul> </details> </td> <td><a href="https://github.com/TykTechnologies/tyk/pull/7583/files#diff-703054910891a4db633eca0f42ed779d6b4fa75cd9b3aa4c503e681364201c1b">+21/-15</a> </td> </tr> </table></td></tr><tr><td><strong>Tests</strong></td><td><table> <tr> <td> <details> <summary><strong>mw_organisation_activity_test.go</strong><dd><code>Tests for async org session and RPC behavior</code> </dd></summary> <hr> gateway/mw_organisation_activity_test.go <ul><li>Add tests for refreshOrgSession behavior.<br> <li> Add RPC-mode async non-blocking request tests.<br> <li> Implement mock RPC server simulating delays.<br> <li> Verify cache population and no-session flagging.</ul> </details> </td> <td><a href="https://github.com/TykTechnologies/tyk/pull/7583/files#diff-b3bbd18e384b7f03f44c0d6c9a5205e8acdd117029e1e73412089191ec8e833a">+227/-0</a> </td> </tr> <tr> <td> <details> <summary><strong>middleware_test.go</strong><dd><code>Tests for async org expiry refresh</code> </dd></summary> <hr> gateway/middleware_test.go <ul><li>Add tests for async expiry refresh flow.<br> <li> Validate cached value, default on miss.<br> <li> Ensure default retained for missing org.</ul> </details> </td> <td><a href="https://github.com/TykTechnologies/tyk/pull/7583/files#diff-6a09a08e3f82cc5e9d8c6b5c8426d75ea1e5d85e15ab008fca1f512e7c49c1e6">+35/-12</a> </td> </tr> </table></td></tr><tr><td><strong>Miscellaneous</strong></td><td><table> <tr> <td> <details> <summary><strong>coverage.out</strong><dd><code>Add coverage output artifact</code> </dd></summary> <hr> gateway/coverage.out - Add coverage report artifact to repo. </details> </td> <td><a href="https://github.com/TykTechnologies/tyk/pull/7583/files#diff-09774255d9a84e7fadb3d7b29c523e342197d9e6cb340482bce64a09425eca0f">+9299/-0</a></td> </tr> </table></td></tr></tr></tbody></table> </details> ___ Co-authored-by: imogenkraak <162994391+imogenkraak@users.noreply.github.com> Co-authored-by: andrei-tyk <97896463+andrei-tyk@users.noreply.github.com>


Description
Fixes request pipeline blocking when MDCB is unavailable by making org session fetches non-blocking in RPC mode.
Related Issue
TT-15954
Motivation and Context
When MDCB is unavailable, synchronous RPC calls to fetch org sessionsin OrganizationMonitor were blocking the request pipeline for 90-120 seconds
How This Has Been Tested
Screenshots (if appropriate)
Types of changes
Checklist
Ticket Details
TT-15954
Generated at: 2025-11-20 13:06:06