Sending a single request to a single router where the lambda can be invoked but cannot connect to the router (wrong IP, wrong security group, etc) results in a tight loop of Lambda invokes of 11k RPM (for a single request ever)
The request appears to never timeout / get cancelled in this case
This can get expensive quickly
Acceptance Criteria
[x] Determine why the PendingRequest does not get cancelled
[x] Add a test to confirm that the PendingRequest gets cancelled if it cannot be dispatched
[x] Determine why the Router is rejecting requests with a 409 right off the start
[ ] Add circuit breakers / exponential backoff for short failed invokes that did not handle requests successfully (long failed invokes that handled requests are not as big of a concern) - Will handle in #33
Second Issue - ConcurrentDictionary.GetOrAdd - Calls Factory Multiple Times
Motivations
Acceptance Criteria
[ ] Add circuit breakers / exponential backoff for short failed invokes that did not handle requests successfully (long failed invokes that handled requests are not as big of a concern)- Will handle in #33Second Issue -
ConcurrentDictionary.GetOrAdd
- Calls Factory Multiple Timeshttps://andrewlock.net/making-getoradd-on-concurrentdictionary-thread-safe-using-lazy/
Added failing tests for this that prove it, after checking the source code.
Router Logs - Issue Happens on First Invoke - Hundreds of Thousands of Invokes
Lambda Logs from 1st Rejected Lambda